shell_exec în PHP

Rulează o comandă prin shell și returnează tot ce a afișat, ca un singur text.

Sintaxă
shell_exec(string $command): string|false|null

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ă tot null. Dacă ai nevoie de codul de ieșire, folosește exec.
  • Folosești apostrofurile inverse (`comanda`). În PHP 8.5 primești Deprecated. Scrie shell_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.