したがって、サーバーにSSHで接続して次のコマンドを実行すると、期待どおりに機能し、スクリプトは正常に実行されます(-fオプションを使用していることに注意してください)。
/usr/bin/php -f /home/somefolder/test.php
Expected Output is OK: hello world
-fオプションを指定せずにコマンドを実行すると、基本的に内容がhtmlファイルとして表示されます(これは予想される動作です)。
/usr/bin/php /home/somefolder/test.php
Expected Output is OK: Content-type: text/html; charset=UTF-8
これまでのところ、すべてが期待どおりに機能します!!
しかし、shell_exec()を使用して別のphpスクリプトからこれらの同じコマンドを呼び出そうとすると、ファイルが実行されません。-fオプションがある場合とない場合の両方で、同じ応答が返されます。
したがって、-fオプションを使用すると:
$out = shell_exec("/usr/bin/php -f /home/somefolder/test.php");
echo $out;
Output is not ok: Content-type: text/html; charset=UTF-8
Expected Output should be: hello world
そして-fオプションなし:
$out = shell_exec("/usr/bin/php /home/somefolder/test.php");
echo $out;
Expected Output is OK: Content-type: text/html; charset=UTF-8
したがって、何らかの理由で-fオプションを無視しているようです。
何かご意見は?
test.phpの内容:
<?php
echo "Hello World";
?>
さて、これには多くの調査が必要でしたが、私はついにそれを理解しました...これには2つの部分があります:
パート1-php.iniファイル
php.iniファイルには、次のような行が含まれています。
disable_functions = show_source, system, exec, shell_exec, passthru, popen, proc_open
したがって、exexとshell_execの両方を使用する場合は、それらをその行から削除し、php.iniファイルを再保存する必要があるため、行は次のようになります。
disable_functions = show_source, system, passthru, popen, proc_open
パート2-php-fpmconfファイル
php.iniファイルを変更しても、shell_exec()がまだ機能しない場合は、(php-cgiではなく)php-fpmを実行している可能性があります。
これは、php-fpmconfファイルも変更する必要があることを意味します。次のような行を探します。
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
次に、行からexecとshell_execを削除し、次のように再保存します。
php_admin_value[disable_functions] = passthru,system
この投稿は、confファイルを見つけて変更する方法の説明を見つけた場所です:https://www.interserver.net/tips/kb/how-to-enable-exec-in-php-fpm/
手順は一般的に次のとおりです。これを行うにはrootアクセスが必要な場合があることに注意してください。
(1)どのphpバージョンを実行していますか?v7.3の場合、「ea-php73」を使用します
(2)Confファイルは次の場所にあります。
/opt/cpanel/ea-php73/root/etc/php-fpm.d/mydomain.com.conf
(3)[disable_functions]行を変更し、confファイルを再保存します。
(4)次のコマンドでphp-fpmを再起動します。
/scripts/restartsrv_apache_php_fpm
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加