35

PDF を JPG に変換するコマンドを実行するために exec() を呼び出す特定の PHP スクリプトがあります。このコマンドは bash で正常に機能します。

最初のトラブルシューティングの推測を回避するには、次の点に注意してください。

  • safe_mode = オフ
  • PDF とスクリプトを含むディレクトリのアクセス許可は 777 に設定されており、このディレクトリは JPG が書き込まれている場所でもあります。
  • exec() に渡すコマンドは、使用されているバイナリを明示的に指しています (例: /usr/local/bin/convert)。
  • display_errors = オン
  • error_reporting = E_ALL
  • disable_functions = [空白]
  • exec() の出力をエコーし​​ていますが、何も返されません。デフォルトで実行されるコマンドは何も返しません。

この PHP スクリプトをブラウザーから呼び出すと ( http://www.example.com/script.phpにアクセスして)、 exec() はその引数を実行しません。

重要: スクリプトや bash コマンドの作成方法に問題がないことはわかっています。なぜなら、bash から「php」を使用してスクリプトを実行でき、それが機能するからです (たとえば、「php script.php」はファイルを変換します)。

また、exec() を system() に切り替えようとしました。

最後に、過去にこの問題が発生したことがありますが、どのように修正したか思い出せません。

私は何かが欠けていることを知っているので、他の誰かが私と同じようにこれを経験し、それを修正する方法を覚えていることを願っています!

ご提供いただけるご支援をよろしくお願いいたします。

アレックス

4

9 に答える 9

70

コマンドの最後に追加2>&1して、エラーを stderr から stdout にリダイレクトします。これにより、何が問題なのかが明確になるはずです。

于 2009-02-11T22:00:36.690 に答える
6

推測では、Webサーバープロセスのユーザーにそうする権限がない可能性があります。

于 2009-02-11T21:44:41.317 に答える
5

コマンドライン(自分のユーザーアカウントの下にある)からの場合に機能するため、Webサーバーが実行されているアカウント(多くの場合「www-data」)に変換プログラムの実行権限がないように思えます。

于 2009-02-11T21:45:34.090 に答える
3

ファイルのアクセス許可を検討しましたか?ブラウザでは、phpは1人のユーザーの下で実行されていますが、bashで実行すると、ユーザーのアクセス許可で実行されている可能性があります。

それは私が最初にチェックすることです。

エイミー

于 2009-02-11T21:46:10.190 に答える
2

Apache / webserverユーザーは、シェルコマンドを実行するために必要な権限を持っていますか?

clから実行する場合、別のユーザーとして実行している可能性があります。これにより、どのclが機能するかが説明される場合がありますが、ブラウザー経由では機能しません。

于 2009-02-11T21:46:06.883 に答える
2

を使用して特定のアプリケーションを実行するには、Apache のユーザーwww-dataに権限を付与する必要がありますsudo

  1. コマンドを実行しますsudo visudo。実際にファイルを編集したいのですが、それetc/sudoersを行うには、ターミナルで使用sudo visudoして、編集する(一時)sudoersファイルを複製します。
  2. ファイルの最後に、次の例を追加します。

www-data ALL=NOPASSWD: /etc/init.d/smokeping/restart, /bin/mount

(これは、スーパー ユーザー (root) 権限を使用しrestartてコマンドを実行することを前提としています。)mount

ALLただし、スーパーユーザー権限を使用してすべてのアプリケーションを実行する場合は、上記の代わりに次を追加します。コマンドではなく、非常に危険なため、これを実行したくない場合があります。

www-data ALL=NOPASSWD: ALL

3. sudoers ファイルを編集した後 (visudo一時ファイルを編集しsudoersて保存し、一時ファイル (visudo) を終了してsudoersファイルに書き込みます。wq!)

4.以上です。スクリプトexec()内で次のように使用します。phpスクリプトでコマンドを使用する前に使用することを忘れないでください。xxx.phpsudo

元:-

exec ("sudo /etc/init.d/smokeping restart 2>&1");

したがって、あなたの問題では、使用したいコマンドを追加して、必要に応じてstep no (2.)phpスクリプトを追加および変更します。

于 2014-04-09T05:08:28.170 に答える
1

これは、Web サーバーを介してスクリプトを実行しているユーザーと、bash を介してスクリプトを実行しているユーザーが異なることが原因である可能性があります。

通常、ユーザー「www」とこのユーザーのようにサーバーを介して呼び出されるスクリプト/実行プログラムは、あなたの領域への書き込みアクセス権を持っていません。ただし、bash でスクリプトを実行すると、書き込み権限があります。

于 2009-12-19T08:55:36.527 に答える
0

これは PHP ではなく ImageMagick の問題であると判断しました。私はいくつかの修正を試みていますが、それらが機能しない場合は、代わりに PHP 共有ライブラリ (おそらく imagick) を使用して作業を行うことになります。

于 2009-02-12T18:21:28.707 に答える
0

デフォルトの出力デバイスが変更されました。

wwwとしてログインすると(有効にした後)、phpではなくシェルを介して出力されます。

于 2010-01-14T15:19:09.140 に答える