- 締切済み
PHP、exec関数のreturn_varの値
このようなコードをPHPから実行させています。 ******************** $com = 'convert -version'; $out = array(); $ret = 0; exec($com, $out, $ret); echo '$out = ' . var_export($out); echo '$ret = ' . var_export($ret); ******************** この結果なのですが、 -------------------- $out = array ( ) $ret = 5 -------------------- ということで、うまくコマンドが動いてくれていないのですが、 return_varにあたる$ret=5は、何を意味してくれているのでしょうか? 127ならちょいちょう検索ヒットするんですけどね……。 ご存知の方、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- thezen5
- ベストアンサー率84% (27/32)
参考URLではimagemagickを実行前に環境変数をphpの中でセットすると通るとあります。 putenv("PATH={$_SERVER["PATH"]}:/usr/local/ImageMagick/bin"); putenv("DYLD_LIBRARY_PATH=/usr/local/ImageMagick/lib"); また、他の方は以下のような方法でパスをセットする提案をしています。 <?php // In my case $HTTP_ENV_VARS['PATH'] = bin:usr/bin $env_vars = explode( ':', $HTTP_ENV_VARS['PATH']); // Combine the required part from $HTTP_ENV_VARS['PATH'] and convert for your path. $env_path = $env_vars[1]."/convert"; // Now $env_path = usr/bin/convert // Usage: exec("$env_path image.jpg -resize 100x100 output.jpg"); ?>
- thezen5
- ベストアンサー率84% (27/32)
osxの標準apacheで実行してるということでしょうか? ターミナルで実行できますか? 回答2の参考URLはMAMPで実行してる場合に起こるエラーでXAMPP環境では起きないとも書かれています。(この方達の環境もOSXです) MacPortsでimagemagickを入れた場合に環境変数がらみでライブラリのパスが見つからなくてエラーしてる人多いみたいですね。
お礼
回答ありがとうございます。 本当にありがたいです。 OSXの標準apacheで実行しています。 ターミナルでも実行できるのは確認できています。 ターミナルで実行する時は、administratorユーザーでログインして実行しています。 PHPからは、_wwwユーザーで実行されているみたいです。 convertファイルの権限も確認してみましたが、だれでも実行可能な権限になっていました。 あと試した事と言えば、 exec関数で"ls -all"コマンドは正常な結果が取得できたのを確認できています。 環境変数あたりで、もう少し色々調べてみたいと思います。
- thezen5
- ベストアンサー率84% (27/32)
参照URLによると以下の変更でconvertがエラーコード5を返すのを治せるとのことですが。 MAMPで稼働している場合 /Applications/MAMP/Library/bin/envvars の 以下の行をコメントアウトする DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" export DYLD_LIBRARY_PATH
お礼
回答ありがとうございます。 私の環境はMac OS X Serverです。 MAMPは入れた記憶ないですし、フォルダーも見当たらないですし、、、 「DYLD_LIBRARY_PATH」を中心にいろいろググってみましたが、よくわからず解決には至りませんでした。 たびたび感謝です。 ありがとうございますm(_ _)m
- thezen5
- ベストアンサー率84% (27/32)
convertってimagemagickのコマンドですよね? -version オプション付きで実行してるからimagemagickのバージョンじゃないですか?
お礼
おっしゃる通り、imagemagickのコマンドです。 ただ、imagemagickのバージョンではないんです。 exec関数はですね、 ・第2引数を指定するとコマンドの出力を配列で格納 ・さらに第3引数をしていすると、コマンドのステータスを格納 してくれるって動作です。 →http://php.net/manual/ja/function.exec.php 今回の場合、コマンドが正常に動作するなら、 ・第2引数……バージョン情報の文字がダラダラと$outに格納されて出力 ・第3引数……0 って感じになるんですね。 ようするに、第3引数が0ではない場合、うまく動かない理由のヒントになるんだろう。。。 といった経緯で質問を投稿しました。 さっそく回答していただいてうれしかったです。 ありがとうございましたm(_ _)m
お礼
時間が空いてしまいましたが、いつも回答いただきありがとうございます。 やっと教えていただいた記事の内容、試してみました。 結果、特に解決には至りませんでした。 ・環境変数の値が悪いのか ・他に環境変数の指定の記事ないか 調べてみましたが、とりあえずあきらめモードです。 自分のサーバー設定が悪いのでしょうがね、ImageMagickを使わない他のロジックを考える方向でシフトしつつあります。