A execução dos comandos da Web não é diferente de executá-los no sistema. O principal culpado por discrepâncias é o ambiente variáveis e caminhos .
Teste as variáveis e o caminho entre os dois (executando a partir do sistema e executando a partir do Apache2) e corrija a discrepância.
Você pode verificar suas variáveis de ambiente e caminhos do Apache2 com estas etapas:
Crie um script simples para mostrar seu ambiente:
/usr/local/bin/set.sh
#!/bin/bash
set
Execute-o na Web usando PHP ou Perl:
Usando o Perl:
#!/usr/bin/perl
use warnings;
use strict;
print "\n\n";
print system("/usr/local/bin/set.sh");
Usando o PHP:
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<pre>
<?php echo '<p>Hello World</p>';
system("/usr/local/bin/set.sh");
?>
</pre>
</body>
</html>
O melhor lugar para começar será certificar-se de ter os caminhos do seu login incluídos no caminho do programa em execução no Apache2.
Neste caso, o Apache2 está relatando isso para o caminho:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Ao correr do terminal, recebo isto:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
Se você testar a adição de todas as variáveis de caminho à sua instância da Web durante a execução do programa, deverá obter os mesmos resultados obtidos ao executá-lo a partir do terminal. Depois de executá-lo, você pode aparar sistematicamente os elementos de caminho que você acha desnecessários, como /usr/games
, /usr/local/games
e /snap/bin
.