Postări etichetate PHP

PHP: bug la procesarea numerelor in virgula mobila

Se pare ca PHP versiunile 5.2 si 5.3 sufera de un bug la convertirea unui sir intr-un numar, daca numarul continut in sir este cu virgula si este foarte lung. Un astfel de sir este “2.2250738585072011e-308″, si incercarea de a-l converti la un numar float, poate duce la blocarea sau supraincarcarea serverului pe care ruleaza. Din fericire acest bug afecteaza doar PHP 5.2 si 5.3 care ruleaza in mod 32bit, si un plus deja a aparut fix-ul. Deci, daca rulati PHP 5.2 sau 5.3 pe 32bit, aveti grija sa va faceti update cat de curand.

,

Nu există comentarii

SQLite 3 – ‘SQL logic error or missing database’

SQLite nu e bun cand vine vorba sa dea mesaje de eroare, si eroarea ‘SQL logic error or missing database‘ este un exemplu clar.

M-am lovit si eu de ea azi in timp ce incercam sa fac un INSERT si am pierdut ceva timp sa-mi dau seama de ce… Inainte de toate, am verificat SQL-ul si am incercat sa-l rulez in alt fel, inclusiv direct de la promptul SQLite – rezultat: corect. Am verificat db-ul… era ok, exista, in plus SELECT-urile functionau. Am mai invartit eu codul… am mai cautat pe Google si unii ziceau ca poate nu sunt drepturi de scriere pe fisierul cu db-ul. Aveau dreptate, web serverul nu avea drept de scriere… am corectat. Am incercat din nou… iara nu a mers. Va dati seama disperare :) Am tot sapat, am tot sapat si… nu am gasit rezolvarea, pana mi-a venit mie o idee… Am dat drepturi de scriere pentru web server pe folderul in care era baza de date si… supriza… a functionat! Se pare ca SQLite-ul isi facea ceva fisiere temporare in folderul ala, desi nu e documentat nicaieri.

Deci, daca va intalniti cu eroarea ‘SQL logic error or missing database‘, verificati sa aveti drepturi de scriere pentru utilizatorul sub care ruleaza web serverul pe fisierul cu baza de date si pe folderul in care e acest fisier.

,

Nu există comentarii

Sfaturi pt PHPisti

PHP este un limbaj destul de usor de folosit si invatat… cel putin asa cred eu… Cei care au mai lucrat in C se pot adapta usor la el. In plus are o facilitate minunata in sensul ca iti face automat conversia tipului de variabila in ce ai tu nevoie, adica poti compara un sir ca un intreg, un intreg ca un sir, un sir ca o data, etc. Totusi usurinta asta se poate intoarce impotriva ta… si eu am avut de furca de cateva ori cu ea. Ultima data, am patit-o comparand ceva ce trebuia sa fie un sir cu “NULL”. Vroiam sa compar daca sirul respectiv este diferit de “NULL” dar din pacate PHP a crezut ca eu vreau sa compar daca variabila respectiva contine valoarea NULL sau 0. Instructiunea cu pricina era

if($search != “NULL”)

… si nu mi-am dat seama la inceput ce nu merge. Dupa aceea m-am prins si ca sa rezolv problema am scris:

if((string) $search != “NULL”)

… si a mers. Deci, aveti grija in PHP daca faceti comparatii ca s-ar putea ca rezultatul sa nu fie exact ce sperati sa fie. Trebuie sa aveti grija mai ales la valorile 0 (zero), NULL, true, false, 1.

Alta chestie ciudata la PHP de care m-am lovit zilele trecute a fost ca neavand o variabila setata si incercand sa o setez direct ca array cu $xyz[0] = valoare, variabila $xyz s-a initializat ca si variabila normala, nu array. Deci de fiecare data cand aveti nevoie de un array, initializati-l prima data cu array():

$xyz = array().

Cam atat cu sfaturile de PHP deocamdata ;) Sper sa fie de ajutor candva cuiva :)

2 Comentarii

Google App Engine si PHP

Auzisem de Google App Engine dar nu am stiut cu ce se mananca pana azi (e drept ca nici nu m-a interesat), dar azi am dat peste un articol despre rularea aplicatiilor PHP pe aceasta platforma si deci… am aflat :) In principiu Google App Engine te lasa sa iti stochezi o aplicatie web la ei in limita a 500 Mb si iti aloca destule resurse pentru a afisa aceasta aplicatie de cel putin 5 milioane de ori pe luna. Asta la varianta free, la varianta pe bani limitele sunt crescute.

Pana acum dezavantajul era ca nu puteai rula aplicatii PHP deoarece oficial Google App Engine suporta doar Java, dar nu mai este cazul. Se pare ca folosind Quercus se pot rula aplicatii PHP sub GAE. Quercus este o implementare in Java a limbajului PHP deci poate fi folosit pe orice server care suporta doar Java.

Pasii necesari pentru a va face o aplicatie in PHP sub GAE sunt:

1. Va inregistrati pentru un cont gratis.
2. Descarcati acest fisier pe calculatorul dvs.
3. Editati fisierul de setari al aplicatiei dvs. (XML) din war\WEB-INF\appengine-web.xml si schimbati tag-ul aplicatiei in numele aplicatiei dvs.
4. Incarcati aplicatia dvs. pe serverele Google. Descarcand Google App Engine SDK se poate folosi urmatoarea comanda pentru asta:
appcfg.cmd update C:\projects\phpwithjava\war

Daca voi face si eu un test al serviciului, va voi anunta. E posibil sa il testez deoarece 5 milioane afisari nu e o cifra mica pentru un hosting free :)

,

Nu există comentarii

PHP: Eliminarea caracterelor non-ascii dintr-un string

Azi am avut nevoie sa elimin niste caractere aiurea din numele unor fisiere uploadate si solutia cea mai simpla a fost un regex pe numele fisierului. Desigur, asta se poate aplica pe orice sir. Solutia pentru eliminarea caracterelor non-ascii este:

$rezultat = preg_replace("/[^(\x20-\x7F)]*/", "", $sir);

… unde $sir e string-ul cu “probleme”, iar $rezultat…. sirul fara caracterele non-ascii.

, ,

Nu există comentarii

PHP: ultima zi din luna

Poate ati avut vreodata nevoie sa aflati ultima zi dintr-o luna ca sa stiti cate zile are luna curenta, sau poate aveti nevoie chiar acum de o solutie la aceasta problema, deci solutia este apelarea mktime trecand-ui ca parametrii in campul luna – luna urmatoare, iar in campul zi, 0 (zero). Astfel, pentru a afla cate zile are luna Februarie, feceti asa:

$zile = mktime(0, 0, 0, 3, 0, 2009);

Ceea ce va returna 28, pentru ca anul acesta nu este an bisect :)

, ,

Nu există comentarii