Ce face shell_exec
shell_exec este varianta simplă a lui exec: returnează toată ieșirea comenzii dintr-o bucată, inclusiv liniile noi. Nu îți dă codul de ieșire, deci nu știi sigur dacă comanda a reușit.
Returnează null dacă comanda nu afișează nimic sau dă eroare, și false dacă nu a putut fi pornită. Operatorul cu apostrofuri inverse (`ls`) face același lucru, dar este depreciat din PHP 8.5.
Parametri
| Parametru | Descriere |
|---|---|
$command |
Comanda rulată. |
Ce returnează
Ieșirea comenzii ca text, null dacă nu afișează nimic, sau false dacă nu a putut fi pornită.
Exemple
Exemplul 1: Ieșirea unei comenzi
<?php
$rezultat = shell_exec("echo Salut din terminal");
var_dump($rezultat);
Rezultat
string(19) "Salut din terminal
"
Exemplul 2: Numărul de linii dintr-un fișier
Unele sisteme pun spații înaintea numărului, de aceea folosim trim.
<?php
file_put_contents("abonati.txt", "ana@exemplu.ro\nion@exemplu.ro\nmaria@exemplu.ro\n");
$linii = (int) trim(shell_exec("wc -l < abonati.txt"));
echo "Abonați: $linii";
Rezultat
Abonați: 3
Exemplul 3: Și mesajele de eroare
Cu 2>&1, mesajele trimise pe canalul de erori sunt incluse în rezultat.
<?php
$iesire = shell_exec("(echo Rezultat normal; echo Mesaj de eroare >&2) 2>&1");
echo $iesire;
Rezultat
Rezultat normal
Mesaj de eroare
Greșeli frecvente
- Verifici succesul cu
if (shell_exec(...)). O comandă reușită care nu afișează nimic returnează totnull. Dacă ai nevoie de codul de ieșire, foloseșteexec. - Folosești apostrofurile inverse (
`comanda`). În PHP 8.5 primeștiDeprecated. Scrieshell_exec("comanda").
Comenzi înrudite
exec: Rulează o comandă a sistemului de operare și returnează ultima linie afișată de ea.escapeshellarg: Pune un text între ghilimele sigure, ca să poată fi folosit ca argument într-o comandă de shell.