passthru în PHP

Rulează o comandă și trimite ieșirea ei brută, neschimbată, direct către browser sau terminal (potrivit pentru date binare).

Sintaxă
passthru(string $command, &$result_code = null): ?false

Ce face passthru

passthru seamănă cu system, dar trimite ieșirea exact cum vine, octet cu octet, fără să o împartă în linii. Este alegerea potrivită când comanda produce o imagine, un PDF sau o arhivă pe care vrei s-o trimiți direct vizitatorului.

Nu returnează ieșirea: la succes returnează null, iar la eșec false. Codul de ieșire vine în $result_code.

Parametri

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

Ce returnează

null la succes sau false dacă comanda nu a putut fi pornită.

Exemple

Exemplul 1: Ieșirea trimisă direct

<?php
file_put_contents("preturi.csv", "produs,pret\npaine,5\nlapte,8\n");

$rezultat = passthru("cat preturi.csv", $cod);

var_dump($rezultat);
var_dump($cod);

Rezultat

produs,pret
paine,5
lapte,8
NULL
int(0)

Exemplul 2: O arhivă trimisă la descărcare

zip - scrie arhiva pe ieșirea standard, iar passthru o trimite browserului fără să o încarce în memorie.

<?php
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=\"facturi.zip\"");

passthru("zip -qr - facturi/2026");

Greșeli frecvente

  • Verifici succesul cu if (passthru(...)). La succes funcția returnează null, care este fals. Verifică $result_code === 0.
  • Afișezi ceva înainte de passthru când trimiți un fișier binar. Textul în plus strică fișierul descărcat.

Comenzi înrudite

  • system: Rulează o comandă de sistem, afișează imediat tot ce scrie ea și returnează ultima linie.
  • exec: Rulează o comandă a sistemului de operare și returnează ultima linie afișată de ea.
  • readfile: Citește un fișier și îl trimite direct la ieșire (spre browser), fără să îl încarce în memorie.
  • escapeshellarg: Pune un text între ghilimele sigure, ca să poată fi folosit ca argument într-o comandă de shell.