- ベストアンサー
exec()で他ディレクトリのexeプログラムを実行したい
- PHPのexec()関数を使用して、他のディレクトリにあるexeプログラムを実行したいです。
- url2bmpというコマンドライン対応のソフトを使用して、指定したURLのスクリーンショットを作成します。
- しかし、exeプログラムを他の階層に移動させると、exec()関数が動作しなくなります。対処法はありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ディレクトリのセパレータは、OSによってちがいます。 大ざっぱにいえば、Windowsでなら \ で、UNIXなら /です。 ただし、WindowsのPHP上では、 パスを / でセパレートして記述してもよいように、PHP側の処理側で吸収されてます。 しかし、PHPのexec関数は、外部コマンドを呼び出すシステムコールですから、 PHPの管理外となり、OSのネイティブな機能を使うことになりますので そのOSでの方言を考慮して、記述する必要があります。 たとえば、Windows(というかDOSというか)では、/ はセパレータでなく、コマンドの オプション指定と解釈され、 dir/w としたら、dirディレクトリのしたのwコマンドを実行するという意味ではなく、 dirコマンドに対して、w というオプションを指定したという意味になります。
その他の回答 (2)
- superside0
- ベストアンサー率64% (461/711)
exeってことは、Windowsですよね。 exec()内でのディレクトリのセパレータは、/じゃなくて\ では?
お礼
回答ありがとうございます。 \に直したらうまくいきました! 締め切る前に質問させて頂きたいのですが、セパレータの/と\は何か違いがあるのでしょうか? そういえばローカルアドレスは\、ウェブアドレスは/で区切られていた気がしますが、どちらも逆(ローカルアドレスに/、ウェブアドレスに\)にしても記号が置き換わって問題なく動作していたので深く考えたことがありませんでした。もしかしてどちらがどの記号という厳密な決まりがあって、ブラウザやエクスプローラには違う記号を置き換える機能が実装されているので動作し、自前でプログラムを組む時はそれをしないと動かないものなのでしょうか?
- php504
- ベストアンサー率42% (926/2160)
エラーは出てないのでしょうか echo exec("kasou/url2bmp.exe 以下、引数"); で何か表示されませんか
補足
回答ありがとうございます。 それも試してみましたが、何も表示されませんでした。
お礼
回答ありがとうございます。 なるほど、確かにDOSの/はオプションに使われますね! 分かりやすい解説ありがとうございました! 疑問が完全にスッキリしました。