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
systemcând vrei rezultatul într-o variabilă. Ieșirea ajunge direct în pagină. Foloseșteexecsaushell_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.