Batch resize script în PHP

Am realizat zilele trecute un script PHP care redimensionează  imaginile dintr-un director, la o lățime și înălțime dată. Pentru a-l utiliza ai nevoie de librăria GD preinstalată. Specificații:

================== Batch resize script în PHP =======================

Utilizare:

batchresize.php?dir=[source-path]&width=[width]&height=[height]&suffix=[filename-suffix]&output [yes|no|destination-path]&start=[index]&count=[as-many]&overwrite=[1|0].

Parametrii:

  • dir: directorul sursă din care se prelucrează imaginile. Poate fi o cale relativă sau absolută;
  • width: lățimea la care se redimensionează imaginile (thumbnails);
  • height: înălţimea la care se dorește redimensionarea; Notă: Dacă specificaţi doar lăţimea, sau doar înălţimea, parametrul lipsă va lua valoarea celui specificat. Deci, lățimea va fi egală cu înălţimea, în cazul în care înălţime numai este specificată, respectiv înălţimea va fi egală cu lăţimea dacă numai lățimea dorită este specificată;
  • suffix: sufixul pentru numele de fişierelor rezultate.  În mod implicit acesta este _thumb. Puteţi ignora acest parametru dacă specificați &output=yes;
  • output: calea către directorul în care vor fi salvate imaginile rezultate, sau setat “yes” va afișa în browser prima imagine redimensionată fără să salveze fișierul. Puteţi testa în acest fel mai multe combinaţii de înălţime/lățime înainte să faceți batch resize. În mod implicit directorul destinație este acelaşi cu directorul sursă.
  • start: dacă primiți erori de genul “Out of memory” când rulați scriptul, aveţi posibilitatea să utilizaţi &start şi &count pentru a redimensiona numai imaginile indexate între &start şi &star + &count.  Deci, dacă doriţi să să redimensionați primele 5 imagini din utilizarea directorul sursă puneți &start=0&count=5. Dacă doriţi să redimensionaţi următoarele 15 utilizați &start=6&count=15 şi aşa mai departe;
  • count: numărul de imagini care să fie redimensionate începând de la &start .
  • overwrite: puneți &overwrite=1 dacă doriţi să suprascrieţi fişierele existente deja redimensionate. Selecția se va face după parametrul &suffix. Fiți atent cu acest parametru, deoarece script-ul nu va face diferența între fişierele generate anterior. Așa că dacă directorul sursă este acelaș cu directorul destinație, va genera, de asemenea, thumbnailuri pentru thumbnailuri-urile deja existente şi aşa mai departe, ori de câte ori este aplicat.

Lăţimea implicită şi înălţimea implicite sunt de 100 x 100.
Sufixul implicit pentru numele fișierelor este _thumb.
Fişierele existente nu sunt suprascrise în mod implicit. Dacă doriţi să le suprascrieţi puneți &overwrite=1.
În prezent, script-ul suportă png, jpg, jpeg si gif. Fișierele rezultate sunt salvate ca jpg.
În scopuri de fiabilitate acest script nu va redimensiona fişiere mai mari de 2MB.

download

Bug critic în PHP!

Săptămâna trecută, primesc un mail de la Zend Update, care începe așa:

A fost identificată o vulnerabilitate critica in motorul PHP. Acest exploit este semnificativ, deoarece pe sistemele afectate cele mai multe aplicaţii PHP sunt la disponibile la distanţă și deci exploatabile la distanță printr-un atac de tip DOS (denial of service). Zend a lansat o remediere rapidă de securitate pentru a rezolva această vulnerabilitate (vezi mai jos).

Datorită modului în care rutinele PHP efectuează conversia internă a numerelor în virgulă flotantă, este posibil ca un atacator aflat la distanta să oprească o aplicaţie web pur şi simplu prin adăugarea unui parametru specific unui şir de interogare în navigatorul web (click aici pentru mai multe informaţii).

Se pare însă că nu toate distribuțiile sunt afectate:

Acum, bug-ul a fost reparat, însă dacă folosiți PHP 5.3.4, ar fi bine să verificați dacă nu cumva trebuie să faceți un update.

Tutorial servicii web: client pentru un serviciu web în PHP

Aşa cum am promis într-un articol anterior, în acest articol vă voi explica cum puteţi crea un client pentru un serviciu web. În tutorialul serviciului, am folosit limbajul Java, însă de această dată voi folosi PHP.

Veţi avea nevoie de următoarele:

  • Apache Web Server, sau un server similar care poate să ruleze script-uri PHP, recomand XAMPP.
  • Un editor PHP, eu folosesc Eclipse PDT.
  • Librăria NuSOAP , descărcaţi de la Sourceforge nusoap-0.9.5.zip .

Desigur, pentru ca clientul să funcţioneze, trebuie să aveţi serverul Tomcat pornit şi serviciul web descris în tutorialul precedent disponibil.

Crearea unui proiect nou în Eclipse PDT este foarte simplă, File -> New -> PHP Project. Alegeţi opţiunea de a crea proiectul din surse deja existente, şi cu browse navigaţi în directorul htdocs al XAMPP-ului, şi creaţi-vă un director pentru proiect, de exemplu ”wsclient”. Desigur dacă folosiţi un alt server acesta se poate avea alte denumiri ca www, wwwroot etc.
Creaţi apoi în directorul proiectului, wsclient, un director pentru librăriile nusoap, cu acelaş nume. Puneţi aici directoarele samples şi lib obţinute din arhiva nusoap-0.9.5:

Mergeţi apoi în Eclipse selectaţi proiectul şi daţi click-dreapta -> Refresh.
Pentru a fi mai uşor înţeleasă aplicaţia PHP va fi compusă din 3 fişiere, şi anume:

  • wsinit.php – aici definim endpoint-ul (URL-ul) serviciului web pe care îl invocăm şi iniţializăm o variabilă client;
  • set.php – trimite un nou număr serviciului web;
  • get.php – cere serviciului web şi afişează ultimul număr trimis.

Pentru a crea fişiere php, selectaţi proiectul şi mergeţi la File-> New -> PHP File. Introduceţi numele şi click Finish. Creaţi cele 3 fişiere şi puneţi în ele codul de la link-urile fiecăruia. În final structura proiectului va arăta aşa:

Acum, pentru a-l testa, asiguraţi-vă mai întâi că aveţi pornit serverul web, XAMPP.  Apoi navigaţi cu browser-ul web la adresa http://localhost/wsclient/set.php . Veţi observa formularul care vă cere să introduceţi un număr. Acesta va fi trimis serviciului web, iar pe a doua pagină, http://localhost/wsclient/get.php acesta va fi afişat.

Construirea unui client se reduce la câteva linii de cod, cu ajutorul unei librării specializate. Şi în Java se pot construi clienţi la fel de uşor cu ajutorul API-urilor AXIOM.