4metin.net,4metin.ro
Bine Ati Venit Pe Max4ALL Veti Invata sa faceti servere de Metin2 Counter Strike etc.. Faceti Multe mesaje si spor la muca

Alăturați-vă forumului, este rapid și ușor

4metin.net,4metin.ro
Bine Ati Venit Pe Max4ALL Veti Invata sa faceti servere de Metin2 Counter Strike etc.. Faceti Multe mesaje si spor la muca
4metin.net,4metin.ro
Doriți să reacționați la acest mesaj? Creați un cont în câteva clickuri sau conectați-vă pentru a continua.

[Tutorial]Rularea de comenzi UNIX din PHP

5 participanți

In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de Adryyy Lun Iun 28, 2010 2:39 pm

Este util de foarte multe ori, in mod special in cazul in care serverul web ruleaza sub UNIX, sa rulam diferite comenzi din scripturile PHP. Este mult mai convenabil, de exemplu, sa rulam comanda UNIX "whois 4.2.2.2" ca sa aflam informatii despre IP-ul respectiv decat sa ne facem propria aplicatie bazata pe socket-uri care in majoritatea cazurilor nu e nici de departe la fel de bine optimizata cum e comanda whois din UNIX. De asemenea sa implementam in PHP diferite functionalitati care tin in mare parte de sistemul de operare ar insemna sa reinventam roata si sa facem o munca inutila in plus.

Dezvoltatorii PHP au pus la dispozitie mai multe metode de rulare a comenzilor, majoritatea fiind functii cu care suntem familiarizati din alte limbaje de scripting sau programare. Metodele de rulare a comenzilor difera in functie de necesitati si comoditate. Mai jos ofer exemple pentru doar cateva din aceste metode si anume: operatorul backtick si functiile shell_exec(),exec() si system().

In exemplele de mai jos am preferat sa afisez totul in format text/plain din comoditate. Functia header() folosita nu are nici o legatura cu rularea comenzilor.

1. Operatorul backtick este preferat de majoritatea programatorilor datorita usurintei in utilizare. Pentru rularea unei comenzi se introduce comanda, cu parametri aferenti daca e cazul, intre apostroafe ( ` ). Trebuie observat caracterul apostrof ( ` ) folosit pentru backtick si nu trebuie confundat cu ghilimelele simple ( ' ) sau ghilimelele duble ( " ). Un exemplu de utilizare gasiti mai jos:
Cod:
header('Content-type: text/plain');
$buf = `/bin/ls -a`;
echo $buf;
?>


Codul de mai sus executa comanda "/bin/ls -a" pentru afisarea continutului folderului curent. Rezultatul este pastrat in variabila $buf in format text care poate fi apoi prelucrata si afisata cu echo() sau print(). Trebuie retinut ca atunci cand PHP este configurat sa ruleze in safe_mode operatorul backtick este dezactivat.

2. Functia shell_exec() este identica cu operatorul backtick. Modul de utilizare si operare este acelasi, in afara de apelare (functie, nu operator) nu exista nici o diferenta. Este bine de stiut ca atunci cand functia shell_exec() este blocata din php.ini nu va functiona nici operatorul backtick.
Cod:
header('Content-type: text/plain');
$buf = shell_exec('ls -a');
echo $buf;
?>


3. Orice comanda in UNIX returneaza un raspuns care poate fi verificat citind din shell variabila de mediu $? si care ne spune daca executia comenzii s-a finalizat cu succes. Daca avem nevoie de rezultatul comenzii rulate putem folsi functia system() care accepta un al doilea parametru, pe langa primul care e comanda ce trebuie rulata, in care se stocheaza valoarea returnata dupa rularea functiei. Un exemplu de utilizare se gaseste mai jos:
Cod:
header('Content-type: text/plain');
system("/bin/ls -a",$retval);
echo "Retval:\n$retval";
?>


In $retval se va pastra valoarea returnata la finalizarea rularii comenzii. Un dezavantaj al acestei functii este faptul ca rezultatul este afisat automat fara a avea posibilitatea de a-l suprima sau de a-l prelucra inainte de a fi afisat. Pentru a rezolva aceasta problema se poate folosi functiaexec().

4. Functiaexec() este asemanatoare cu functia system(). Diferenta este ca rezultatul nu se afiseaza automat ci e salvat in variabila data in al doilea parametru de apelare. Dupa rulare variabila din al doilea parametru va contine un array care are ca elemente fiecare rand returnat de comanda rulata. Valoarea returnata de functiaexec() este ultimul rand afisat de rularea comenzii. Un exemplu de utilizare se gaseste mai jos:

Cod:
header('Content-type: text/plain');
$buf = exec("/bin/ls -a",$output,$retval);
print_r($output);
echo $buf;
echo "Retval:\n$retval";
?>


Pentru afisarea array-ului din $output am folosit functia print_r() dar acesta se poate prelucra folosind metodele clasice de utilizare a array-urilor.

Acestea ar fi metodele cele mai folosite pentru rularea unei comenzi. Pentru rularea comenzilor se pot folosi si functiile pcntl_exec(), proc_open() sau alte metode avansate de rulare, dar in majoritatea cazurilor nu veti avea nevoie de mai mult decat e afisat mai sus.

De asemenea e important de retinut ca aceste functii nu au restrictii. Daca din php.ini sau httpd.conf contul de hosting este restrictionat la utilizarea unui director folosind php_openbasedir, restrictia nu va avea efect asupra comenzilor UNIX rulate. Adica pot fi accesate fara probleme toate resursele la care are acces utilizatorul care ruleaza serverul web (nobody in majoritatea cazurilor).



Este bine de retinut ca aceste functii chiar daca sunt utile pot reprezenta un pericol major pentru securitatea serverului si in cazul in care nu sunt folosite trebuie dezactivate pentru a preveni astfel atacurile bazate pe web.


Sursa: Topic Gratuit
Adryyy
Adryyy
Administrators
Administrators


Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de KriminalKid Lun Iun 28, 2010 4:04 pm

Doamne cat ii aici mai bine ui in video sa se inteleaga mai multe ca asa nu cred ca intelege nimeni
KriminalKid
KriminalKid
Administrators
Administrators


https://max4all.all-up.com

Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de Adryyy Lun Iun 28, 2010 5:55 pm

intelege stai linistit daca nu intelege exzista replay...
Adryyy
Adryyy
Administrators
Administrators


Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de KriminalKid Lun Iun 28, 2010 5:59 pm

ma dor ochi daca citesc atata
KriminalKid
KriminalKid
Administrators
Administrators


https://max4all.all-up.com

Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de Adryyy Mar Iun 29, 2010 9:06 am

e si cu tine acum:))
Adryyy
Adryyy
Administrators
Administrators


Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de KriminalKid Mar Iun 29, 2010 9:07 am

dar cei ma ce nui mult de citit acolo vrei sa spui:))
KriminalKid
KriminalKid
Administrators
Administrators


https://max4all.all-up.com

Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de Adryyy Mar Iun 29, 2010 9:09 am

e putin stai linistit=))
Adryyy
Adryyy
Administrators
Administrators


Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de KriminalKid Joi Iul 22, 2010 5:36 am

da putin pe naiba
KriminalKid
KriminalKid
Administrators
Administrators


https://max4all.all-up.com

Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de Adryyy Joi Iul 22, 2010 9:36 am

faci excercitii inveti sa citesti si la scoala esti as:)) citesti rpd si nu intelegi nici profi ce spui:))
Adryyy
Adryyy
Administrators
Administrators


Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de ciprian3 Vin Iul 23, 2010 12:23 pm

aha
ciprian3
ciprian3
Helper
Helper


Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de Kata Mar Iul 27, 2010 11:39 pm

asa...ms,am citit tot si inteleg ceva
Kata
Kata
Moderator
Moderator


Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de KriminalKid Vin Iul 30, 2010 2:28 pm

bravo frate
KriminalKid
KriminalKid
Administrators
Administrators


https://max4all.all-up.com

Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de Hitman Lun Aug 02, 2010 6:28 pm

Bv! Very Happy
Hitman
Hitman
Moderator
Moderator


Sus In jos

[Tutorial]Rularea de comenzi UNIX din PHP Empty Re: [Tutorial]Rularea de comenzi UNIX din PHP

Mesaj Scris de Continut sponsorizat


Continut sponsorizat


Sus In jos

Sus

- Subiecte similare

 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum