Quais permissões são necessárias para executar um comando system () dentro de um script php que grava em uma pasta?

1

Eu tenho um script php que tem a seguinte linha:

system("ffmpeg -i ......");

A pasta de saída está configurada para ser:

drwxrwxr-x  5 apache apache   4096 Oct 19 07:40 in_upload

Se eu executar o texto exato "ffmpeg -i ......" no prompt como root, ele funcionará bem.

Mas se o script for executado, somente um arquivo de tamanho zero será criado. Alguma idéia do que poderia estar errado?

Editar 1

Acho que localizei o problema para o selinux

Eu tentei a solução recomendada no link :

<?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');

?>

A saída foi:

1 
2 
3 

Editar 2

Depois de desabilitar o selinux, recebi os seguintes resultados:

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.

Editar 3

script php:

echo "1 ";
echo shell_exec('touch test1.txt');
echo "\n2 ";
echo system('touch test2.txt');
echo "\n3 ";
echo exec('touch test3.txt');

error_log:

touch: cannot touch 'test1.txt': Permission denied
touch: cannot touch 'test2.txt': Permission denied
touch: cannot touch 'test3.txt': Permission denied

script 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');

error_log:

/bin/touch: cannot touch 'test1.txt': Permission denied
/bin/touch: cannot touch 'test2.txt': Permission denied
/bin/touch: cannot touch 'test3.txt': Permission denied

script 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');

error_log:

/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
    
por siliconpi 20.10.2010 / 15:13

2 respostas

1

Alguns pensamentos aleatórios:

  • Quanto tempo demora o seu comando ffpmpeg? se demorar mais que o valor de max_execution_time no php.ini, acredito que o comando foi cancelado.

  • tente usar apenas caminhos completos para o binário ffmpeg e os arquivos de entrada / saída. Embora, se você tiver um arquivo com tamanho zero emitido, não deve ser isso.

  • O apache tem permissão para executar o binário ffmpeg?

  • tente um comando básico em sua chamada de sistema, como "touch test.txt" apenas para verificar se o problema é do ffmpeg ou do seu script php.

por 20.10.2010 / 15:28
0

Era um problema de permissões, eu tinha o selinux ativado. Alterando a configuração em / etc / sysconfig / selinux

From: 
SELINUX=enforcing

To:
SELINUX=disabled

Os comandos system () começaram a funcionar

    
por 22.10.2010 / 05:37