0

整数の引数を取り、その整数 + 2 を出力する単純な C プログラムを作成しました。ターミナルで実行できます

./simplep 2

そしてPHPで

exec('./simplep 2', $output).

myprogram外部ライブラリを含む、より複雑なプログラムが呼び出されました。ターミナルで実行できます

./myprogram a.mov

しかし、PHPで実行すると失敗します

exec('./myprogram a.mov', $output)

出力が生成されないため、プログラムがまったく実行されていないと思います。

PS。私はMacで作業しています。

アップデート

エラー出力から、問題はライブラリにあることがわかりました。それは言う

dyld: Library not loaded: /opt/local/lib/libjpeg.8.dylib". 

しかし、ライブラリファイルはそこにあります。

4

3 に答える 3

2

おそらくエラーが発生しますが、stderr代わりにstdout. ここを表示する簡単な方法の 1 つstderrは、次のように変更することです。

exec('./myprogram a.mov', $output)

exec('./myprogram a.mov 2>err.out', $output)

ファイルerr.outを表示して、エラー メッセージの内容を確認します。

編集:

エラーを投稿したので、動的ライブラリが読み込まれていないようです。最も可能性の高い理由は、環境変数が に渡されておらずexecDYLD_LIBRARY_PATH環境変数がクリアされていることです。端末の内容DYLD_LIBRARY_PATHを ( 経由でenv) 確認してから、実行してみてください:

exec('env DYLD_LIBRARY_PATH=XYZ ./myprogram a.mov 2>err.out', $output)

XYZ はDYLD_LIBRARY_PATH端末の値です。

于 2012-06-25T18:57:07.087 に答える
1

exec で myprogram を実行するための適切な権限がありますか? これを試して

chmod +x myprogram
于 2012-06-25T18:29:46.840 に答える
0

プログラムがコマンド ラインで実行される場合は、exec の代わりに shell_exec を使用してみてください。

于 2012-06-25T18:41:46.343 に答える