dポイントプレゼントキャンペーン実施中!

url2bmpという、指定したURLのスクリーンショットを作成できるコマンドライン対応のソフトを使用しています。これをPHPから実行させたく、exec()関数を使っています。PHPプログラムとexeプログラムは同じ階層にあり、コードは

exec("url2bmp.exe 以下、引数");

のようにしており、問題なく動作していました。
その後、url2bmp.exeを1階層下のフォルダに移し、コードも修正したのですが、動かなくなってしまいました。コードは以下の通りで

exec("kasou/url2bmp.exe 以下、引数");

ディレクトリ指定は間違っていないはずであり、原因は明らかにurl2bmp.exeがPHPプログラムと同じディレクトリにないことなのですが、これの対処法は存在しないのでしょうか?同じコードをコマンドプロンプトで実行するとうまくいくのに、exec()関数では動かないという点に納得がいきません。

A 回答 (3件)

ディレクトリのセパレータは、OSによってちがいます。


大ざっぱにいえば、Windowsでなら \ で、UNIXなら /です。

ただし、WindowsのPHP上では、 パスを / でセパレートして記述してもよいように、PHP側の処理側で吸収されてます。

しかし、PHPのexec関数は、外部コマンドを呼び出すシステムコールですから、
PHPの管理外となり、OSのネイティブな機能を使うことになりますので
そのOSでの方言を考慮して、記述する必要があります。

たとえば、Windows(というかDOSというか)では、/ はセパレータでなく、コマンドの オプション指定と解釈され、
dir/w としたら、dirディレクトリのしたのwコマンドを実行するという意味ではなく、
dirコマンドに対して、w というオプションを指定したという意味になります。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
なるほど、確かにDOSの/はオプションに使われますね!
分かりやすい解説ありがとうございました!
疑問が完全にスッキリしました。

お礼日時:2009/05/01 01:12

exeってことは、Windowsですよね。


exec()内でのディレクトリのセパレータは、/じゃなくて\ では?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
\に直したらうまくいきました!
締め切る前に質問させて頂きたいのですが、セパレータの/と\は何か違いがあるのでしょうか?

そういえばローカルアドレスは\、ウェブアドレスは/で区切られていた気がしますが、どちらも逆(ローカルアドレスに/、ウェブアドレスに\)にしても記号が置き換わって問題なく動作していたので深く考えたことがありませんでした。もしかしてどちらがどの記号という厳密な決まりがあって、ブラウザやエクスプローラには違う記号を置き換える機能が実装されているので動作し、自前でプログラムを組む時はそれをしないと動かないものなのでしょうか?

お礼日時:2009/04/30 12:53

エラーは出てないのでしょうか


echo exec("kasou/url2bmp.exe 以下、引数");
で何か表示されませんか

この回答への補足

回答ありがとうございます。
それも試してみましたが、何も表示されませんでした。

補足日時:2009/04/30 12:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!