0

これは本当に簡単ですが、まったく機能しません。何時間も費やし、私はいつもあきらめてきました。copy.php という名前の php スクリプトを作成しました。これは、copy.py という名前の python スクリプトを呼び出す必要があります。

このようなコマンドラインを実行したい

 <?php exec('/var/www/html/copy.py'); ?>

本当に簡単です。

php exec() から実行される python スクリプトを取得できないのはなぜですか? Python スクリプト内の機能は、(Apache の外部の) 別のディレクトリから html ディレクトリに error_log のコピーを取得することです。

ターミナルからそれを実行すると

 > php copy.php

関数を実行し、コピーを作成しました。Webブラウザがそれをしていないのはなぜですか?

これを簡単にしましょう:

exec("cp /var/log/httpd/error_log /var/www/html/path/to/php/script") が機能しないのはなぜですか?

端末に入力すると正常に動作しますが、ブラウザで実行するとうまくいきません。

4

4 に答える 4

1

他の人がほのめかしたように、違いはおそらく権限です。コマンド ラインからコマンドを実行する場合、通常、Apache スクリプトを実行しているユーザーとは異なります。

別の言い方をすれば、コマンド ラインから と入力するとwhoami、ユーザー アカウントの名前が取得される可能性があります。

echo exec('whoami'); from within php は、スクリプトが誰として実行されているかを示します。これは Apache です。

したがって、Web サーバーから実行しようとしているコマンドは、Apache ユーザーとして実行することはできません。あなたは仕事をすることができたと言いましたがexec("python /usr/diskpurge/script.py")、仕事をしないことは exec('/var/www/html/copy.py')できません。copy.pyこれは、あるインスタンスでは Python を実行していて、別のインスタンスではスクリプトを実行しようとしていることが原因です。copy.py に Apache ユーザーの実行権限がない場合、ブラウザーから実行することはできません。

于 2013-03-22T22:08:14.283 に答える
0

許可エラーのように聞こえます。サーバーが十分な権限で実行されているかどうかを確認してください。

echo exec('whoami');

すべてを報告するようにエラー報告を設定します。

ini_set('display_errors', true);
error_reporting(E_ALL);

エラーをチェックします。

whoamiがSUファミリー(Linux)または管理(Windows)のメンバーではないユーザーを返す場合は、アクセス許可を再配置してください。

Linux:whoamiから返されたユーザーにPythonスクリプトを実行するための正しい権限を割り当てます。結果のユーザー名をrootとして実行し、総管理権限を持たせないでください。これは大したことではありません。

于 2013-02-22T00:45:34.207 に答える
0

おそらく、Apache環境とコマンドラインには異なる設定が適用されます。

を使用error_reporting(E_ALL);ini_set('display_errors', true)て、どのエラーが発生するかを確認します。

Apache環境での使用が禁止されているか、ApacheがPythonスクリプトに対する権限execを持たない別のユーザーの下で実行されている可能性があります。execute

于 2013-02-22T00:08:51.067 に答える
0

機能しない唯一の理由は、書き込み権限を設定していないためです!

行う:

sudo nano /etc/sudoers 

そして、以下を入れます。

www-data ALL=(root) NOPASSWD:ALL
于 2015-11-30T11:32:37.583 に答える