PHP Regexp – modificatori si optiuni

Modificatori:

[abc] Un singur caracter: a, b sau c
[^abc] Un singur caracter cu exceptia a, b, sau c
[a-z] Un singur caracter din intervalul a-z
[a-zA-Z] Un singur caracter din intervalul a-z sau A-Z
^ Inceput de linie
$ Sfarsit de linie
\A Inceput de sir de caractere/text
\z Sfarsit de sir de caractere/text
. Orice caracter
\s Orice caracter de tip whitespace
\S Orice caracter cu exceptia whitespace
\d Orice cifra
\D Orice caracter cu exceptia unei cifre
\w Orice carcater dintr-un cuvant (word): litera, cifra, underscore
\W Orice carcater cu exceptia celor dintr-un cuvant (non-word)
\b Orice caracter care delimiteaza un cuvant
(…) Retine secventa din paranteza
(a|b) a sau b
a? Cel mult o aparitie a lui a
a* Oricate (inclusiv zero) aparitii ale lui a
a+ Una sau mai multe aparitii ale lui a
a{3} Exact 3 aparitii ale lui a
a{3,} 3 sau mai multe aparitii ale lui a
a{3,6} Intre 3 si 6 aparitii ale lui a

Options:
i Nu tine cont de minuscule sau majuscule
m face ca punctul (.) sa includa si caracterul linie-noua
s continua cautarea chiar si dupa caracterul linie-noua
x Ignora caracterele de tip whitespace
o executa substitutiile #{…} o singura data

Sub-patterns

(?:(?!string).) Negarea unui sir de caractere (?: creaza un sub-sablon, iar ?! este o negare a textului care urmeaza

Mai multe informatii:
https://www.php.net/manual/en/reference.pcre.pattern.syntax.php

Instalare libssh2 si php-ssh2 pe un server CentOS

yum install php-devel
yum install libssh2-devel

Descarcare pachet libssh2 de la http://libssh2.org:

cd /opt
wget https://libssh2.org/download/libssh2-1.8.0.tar.gz
tar vxzf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure
make
make install

Descarcare pachet php-ssh2 de la http://pecl.php.net/package/ssh2:

cd /opt
wget http://pecl.php.net/get/ssh2-0.13.tgz
tar vxzf ssh2-0.11.3
cd ssh2-0.11.3
phpize
./configure --with-ssh2
make
make install

La finalul instalarii fisierul ssh2.so va fi copiat la locatia /usr/lib64/php/modules.

Modifica fisierul php.ini adaugand linia urmatoare in sectiunea extensions:

extension=ssh2.so

Verificare utiliand functia phpinfo().

La final trebuie restartat serviciul httpd.

PHP max_input_vars

Pentru firma unde lucrez am dezvoltat o aplicatie care permite crearea rapida si usoara a ofertelor de pret pentru clientii nostri. Aplicatia permite introducerea unuia sau a mai multor coduri de produs, apoi interogheaza baza de date SAP si returneaza date despre produse (7 campuri pentru fiecare produs): producator, denumire, pret, stoc disponibil, etc…

Recent, un coleg a avut de facut o oferta care continea aprox 200 de coduri de produs. Dar in urma interogarii erau returnate informatiile doar pentru aprox 160 de produse. Am inceput sa fac tot felul de teste sa vad de unde apare limitarea.

Read More

Trimitere email cu autentificare prin SMTP

La unul din proiectele din trecut am avut nevoie de o clasa pentru trimiterea email-urilor cu autentificare prin SMTP. Cineva mi-a recomandat clasa Mail din PEAR Framework. Clasa permite destul de multe operatiuni si pana in urma cu cateva zile am fost multumit de ea.

Recent, insa, am avut nevoie sa trimit email-uri catre mai multe adrese in Cc si Bcc. Aici aparea o anomalie si am gasit ca ar fi vorba de un bug inca nerezolvat (http://pear.php.net/bugs/bug.php?id=8047). Unii spun ca problema este din libraria Mail de la PEAR, altii spun ca problema ar fi la functia mail() din PHP si nu in libraria Mail. Oriunde ar fi problema, am consumat destul de mult timp incercand sa gasesc o solutie, insa fara succes. In final am renuntat la a mai utiliza aceasta librarie si am cautat solutii echivalente.

Read More

Sortare array multidimensional in PHP

Exista situatii in care anumite informatii sunt stocate intr-un array multidimensional, cum ar fi, de exemplu, continutul unui tabel care trebuie apoi afisat intr-o pagina. Daca tabelul are un numar considerabil de linii si coloane este posibil sa apara nevoia sortarii informatiei dupa anumite coloane.

In cazul in care informatia este adusa direct dintr-o tabela a unei baze de date, atunci lucrurile sunt destul de simple, pentru ca sortarea se poate face la momentul interogarii bazei de date. Insa, daca informatia de pe anumite coloane ale tabelului este calculata dupa anumite formule si nu poate fi regasita direct in baza de date interogata, atunci lucrurile se complica putin. In aceasta situatie, sortarea trebuie facuta direct pe array-ul multidimensional care contine informatia din tabelul de afisat.

Read More

Driver MSSQL pentru PHP

La unul din proiectele mele am avut nevoie sa extrag o serie de informatii din SAP si sa le introduc intr-o baza de date MySQL pe care apoi sa o extind cu informatii aditionale si sa creez/extrag diferite rapoarte. In configuratia clientului SAP folosea baze de date MSSQL, iar server-ul web pe care rula aplicatia rula CentOS administrat prin Plesk.

Pentru a se conecta la o baza de date MSSQL, PHP are nevoie de o extensie/un driver care sa-i permita acest lucru, la fel cum are nevoie de un driver pentru conectarea la o baza de date MySQL. Asa cum spune si documentatia PHP, driver-ul pentru MSSQL este disponibil numai pentru PHP care ruleaza pe Windows.

Read More

PHP Warning: open_basedir restriction in effect

Unul dintre elementele de siguranta ale PHP este si parametrul open_basedir , care se asigura ca un script PHP nu poate accesa un fisier aflat in afara locatiei/locatiilor permise.

Atunci cand un script php incearca accesarea unui fisier, de exemplu cu fopen() sau gzopen(), se verifica locatia fisierului. Daca fisierul se afla in afara locatiei permise, PHP va refuza sa-l deschida si va returna urmatoarea eroare:

PHP Warning: fopen(): open_basedir restriction in effect.
File(/var/www/vhosts/host_name/folder_name/filename.txt) is not within the allowed path(s): (/var/www/vhosts/host_name/other_folder_name/:/tmp/) in /var/www/vhosts/host_name/script.php on line 27

Eroarea apare in log-ul server-ului de http, Apache (error_log).

Exista mai multe solutii pentru aceasta problema:

Read More