Passthru: примеры (PHP)
passthru(string $command, int &$result_code = null): ?falseОсновы функции passthru
Функция passthru() выполняет внешнюю команду и выводит её результат напрямую. Отличительная особенность – прямой вывод бинарных данных без буферизации.
Функция применяется для выполнения системных команд, требующих вывода бинарных данных: обработка изображений, потоковое воспроизведение видео, работа с архивами.
command (обязательный): строка с командой для выполнения.
result_code (опциональный): переменная для сохранения кода возврата. Ненулевое значение указывает на ошибку.
Простые примеры использования
Вывод списка файлов:
<?
passthru('ls -la');
?>total 12 drwxr-xr-x 2 user user 4096 Jan 10 10:00 . drwxr-xr-x 10 user user 4096 Jan 9 09:00 .. -rw-r--r-- 1 user user 78 Jan 10 10:00 index.php
<?
passthru('pwd', $return_code);
echo "Код возврата: $return_code";
?>/home/user/project Код возврата: 0
Альтернативные функции PHP
Возвращает последнюю строку вывода, полный вывод доступен через второй параметр.
Выводит результат выполнения и возвращает последнюю строку.
Возвращает весь вывод команды в виде строки.
Предоставляет детальный контроль над процессом выполнения команд.
passthru применяется при работе с бинарными данными, остальные – для текстового вывода.
Аналоги в других языках
import subprocess
result = subprocess.run(['ls', '-la'], capture_output=True, text=True)
print(result.stdout)const { exec } = require('child_process');
exec('ls -la', (error, stdout, stderr) => {
console.log(stdout);
});ls -laВ отличие от PHP, Python и Node.js предоставляют более структурированный интерфейс.
Типичные ошибки
<?
$user_input = "; rm -rf /";
passthru("ls $user_input");
?>[Опасная команда выполняется]
<?
passthru('command_not_found');
echo "Скрипт продолжает работу";
?>sh: 1: command_not_found: not found Скрипт продолжает работу
Изменения в версиях PHP
В PHP 8.0 не было значительных изменений функции passthru(). В PHP 7.4 улучшена обработка ошибок при выполнении команд. Рекомендуется всегда использовать последние версии PHP для безопасности.
Расширенные примеры
<?
header('Content-Type: image/png');
passthru('convert input.jpg -resize 800x600 png:-');
?><?
header('Content-Type: video/mp4');
passthru('ffmpeg -i input.mp4 -c copy -f mp4 pipe:1');
?><?
header('Content-Disposition: attachment; filename="archive.tar"');
header('Content-Type: application/x-tar');
passthru('tar -cf - directory/');
?><?
$timeout = 5;
$cmd = "timeout $timeout long_running_command";
passthru($cmd, $code);
if($code == 124) echo "Команда прервана по таймауту";
?>