• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:exec()で他ディレクトリのexeプログラムを実行したい)

exec()で他ディレクトリのexeプログラムを実行したい

このQ&Aのポイント
  • PHPのexec()関数を使用して、他のディレクトリにあるexeプログラムを実行したいです。
  • url2bmpというコマンドライン対応のソフトを使用して、指定したURLのスクリーンショットを作成します。
  • しかし、exeプログラムを他の階層に移動させると、exec()関数が動作しなくなります。対処法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

ディレクトリのセパレータは、OSによってちがいます。 大ざっぱにいえば、Windowsでなら \ で、UNIXなら /です。 ただし、WindowsのPHP上では、 パスを / でセパレートして記述してもよいように、PHP側の処理側で吸収されてます。 しかし、PHPのexec関数は、外部コマンドを呼び出すシステムコールですから、 PHPの管理外となり、OSのネイティブな機能を使うことになりますので そのOSでの方言を考慮して、記述する必要があります。 たとえば、Windows(というかDOSというか)では、/ はセパレータでなく、コマンドの オプション指定と解釈され、 dir/w としたら、dirディレクトリのしたのwコマンドを実行するという意味ではなく、 dirコマンドに対して、w というオプションを指定したという意味になります。

taku17
質問者

お礼

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

その他の回答 (2)

回答No.2

exeってことは、Windowsですよね。 exec()内でのディレクトリのセパレータは、/じゃなくて\ では?

taku17
質問者

お礼

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

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

エラーは出てないのでしょうか echo exec("kasou/url2bmp.exe 以下、引数"); で何か表示されませんか

taku17
質問者

補足

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

関連するQ&A