У меня есть скрипт php, в котором есть строка:
system("ffmpeg -i ......");
Папка вывода настроена следующим образом:
drwxrwxr-x 5 apache apache 4096 Oct 19 07:40 in_upload
Если я введу в командной строке точный текст «ffmpeg -i ......» от имени пользователя root, все будет нормально.
Но если скрипт запущен, создается только файл нулевого размера. Есть идеи, что может быть не так?
Редактировать 1
Я думаю, что локализовал проблему на selinux
Я попробовал решение, рекомендованное в http://www.php.net/manual/en/function.system.php#94929 :
<?php
function my_exec($cmd, $input='')
{$proc=proc_open($cmd, array(0=>array('pipe', 'r'), 1=>array('pipe', 'w'), 2=>a$
fwrite($pipes[0], $input);fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]);fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]);fclose($pipes[2]);
$rtn=proc_close($proc);
return array('stdout'=>$stdout,
'stderr'=>$stderr,
'return'=>$rtn
);
}
echo "1 ";
echo shell_exec('ls');
echo "\n2 ";
my_exec('ls');
echo "\n3 ";
my_exec('/bin/ls');
?>
Результат был:
1
2
3
Редактировать 2
ПОСЛЕ отключения selinux я получил следующие результаты:
echo "1 ";
echo shell_exec('ffmpeg');
echo "\n2 ";
echo system('ffmpeg');
echo "\n3 ";
echo exec('ffmpeg');
===> None worked
echo "1 ";
echo shell_exec('/usr/bin/ffmpeg');
echo "\n2 ";
echo system('/usr/bin/ffmpeg');
echo "\n3 ";
echo exec('/usr/bin/ffmpeg');
===> None worked
echo "1 ";
echo shell_exec('ls');
echo "\n2 ";
echo system('ls');
echo "\n3 ";
echo exec('ls');
===> All 3 worked as expected.
Редактировать 3
php скрипт:
echo "1 ";
echo shell_exec('touch test1.txt');
echo "\n2 ";
echo system('touch test2.txt');
echo "\n3 ";
echo exec('touch test3.txt');
журнал ошибок:
touch: cannot touch `test1.txt': Permission denied
touch: cannot touch `test2.txt': Permission denied
touch: cannot touch `test3.txt': Permission denied
php скрипт:
echo "1 ";
echo shell_exec('/bin/touch test1.txt');
echo "\n2 ";
echo system('/bin/touch test2.txt');
echo "\n3 ";
echo exec('/bin/touch test3.txt');
журнал ошибок:
/bin/touch: cannot touch `test1.txt': Permission denied
/bin/touch: cannot touch `test2.txt': Permission denied
/bin/touch: cannot touch `test3.txt': Permission denied
php скрипт:
echo "1 ";
echo shell_exec('/bin/touch /var/www/html/beta/test1.txt');
echo "\n2 ";
echo system('/bin/touch /var/www/html/beta/test2.txt');
echo "\n3 ";
echo exec('/bin/touch /var/www/html/beta/test3.txt');
журнал ошибок:
/bin/touch: cannot touch `/var/www/html/beta/test1.txt': Permission denied
/bin/touch: cannot touch `/var/www/html/beta/test2.txt': Permission denied
/bin/touch: cannot touch `/var/www/html/beta/test3.txt': Permission denied
Несколько случайных мыслей:
Сколько времени занимает ваша команда ffpmpeg? если это занимает больше времени, чем значение max_execution_time в php.ini, я считаю, что команда отменена.
попробуйте использовать только полные пути для двоичного файла ffmpeg и файлов ввода / вывода. Хотя, если у вас получился файл нулевого размера, этого быть не должно.
Есть ли у apache разрешение на запуск двоичного файла ffmpeg?
попробуйте выполнить базовую команду в системном вызове, например "touch test.txt", чтобы проверить, не связана ли проблема с ffmpeg или вашим php-скриптом.
Это была проблема с разрешениями, у меня был включен selinux. Изменив настройку в / etc / sysconfig / selinux
From:
SELINUX=enforcing
To:
SELINUX=disabled
Команды system () начали работать