system în PHP

Rulează o comandă de sistem, afișează imediat tot ce scrie ea și returnează ultima linie.

Sintaxă
system(string $command, &$result_code = null): string|false

Ce face system

system pornește comanda și trimite ieșirea ei direct în pagină sau în terminal, pe măsură ce apare. Returnează ultima linie afișată, iar în $result_code pune codul de ieșire (0 înseamnă succes).

Diferența față de exec și shell_exec: acelea îți dau ieșirea într-o variabilă, iar system o afișează. Este potrivită pentru scripturi CLI care arată progresul unei comenzi lungi.

Parametri

Parametru Descriere
$command Comanda rulată.
$result_code Opțional. Variabilă în care se pune codul de ieșire.

Ce returnează

Ultima linie a ieșirii sau false dacă comanda nu a putut fi pornită.

Exemple

Exemplul 1: Ieșirea afișată, ultima linie returnată

<?php
$ultima = system("echo Pasul 1 gata; echo Pasul 2 gata", $cod);

echo "---\n";
echo "Ultima linie: $ultima\n";
echo "Cod de ieșire: $cod";

Rezultat

Pasul 1 gata
Pasul 2 gata
---
Ultima linie: Pasul 2 gata
Cod de ieșire: 0

Exemplul 2: Verificarea codului de ieșire

grep -c afișează numărul de potriviri și iese cu codul 1 când nu găsește nimic.

<?php
file_put_contents("comenzi.log", "OK 101\nEROARE 102\nOK 103\n");

foreach (["EROARE", "ANULAT"] as $cuvant) {
    echo "$cuvant: ";
    system("grep -c " . escapeshellarg($cuvant) . " comenzi.log", $cod);
    echo "cod $cod\n";
}

Rezultat

EROARE: 1
cod 0
ANULAT: 0
cod 1

Greșeli frecvente

  • Folosești system când vrei rezultatul într-o variabilă. Ieșirea ajunge direct în pagină. Folosește exec sau shell_exec.
  • Pui text de la utilizator direct în comandă. Trece fiecare valoare prin escapeshellarg.

Comenzi înrudite

  • exec: Rulează o comandă a sistemului de operare și returnează ultima linie afișată de ea.
  • shell_exec: Rulează o comandă prin shell și returnează tot ce a afișat, ca un singur text.
  • passthru: Rulează o comandă și trimite ieșirea ei brută, neschimbată, direct către browser sau terminal (potrivit pentru date binare).
  • escapeshellarg: Pune un text între ghilimele sigure, ca să poată fi folosit ca argument într-o comandă de shell.