
url2bmpという、指定したURLのスクリーンショットを作成できるコマンドライン対応のソフトを使用しています。これをPHPから実行させたく、exec()関数を使っています。PHPプログラムとexeプログラムは同じ階層にあり、コードは
exec("url2bmp.exe 以下、引数");
のようにしており、問題なく動作していました。
その後、url2bmp.exeを1階層下のフォルダに移し、コードも修正したのですが、動かなくなってしまいました。コードは以下の通りで
exec("kasou/url2bmp.exe 以下、引数");
ディレクトリ指定は間違っていないはずであり、原因は明らかにurl2bmp.exeがPHPプログラムと同じディレクトリにないことなのですが、これの対処法は存在しないのでしょうか?同じコードをコマンドプロンプトで実行するとうまくいくのに、exec()関数では動かないという点に納得がいきません。
No.3ベストアンサー
- 回答日時:
ディレクトリのセパレータは、OSによってちがいます。
大ざっぱにいえば、Windowsでなら \ で、UNIXなら /です。
ただし、WindowsのPHP上では、 パスを / でセパレートして記述してもよいように、PHP側の処理側で吸収されてます。
しかし、PHPのexec関数は、外部コマンドを呼び出すシステムコールですから、
PHPの管理外となり、OSのネイティブな機能を使うことになりますので
そのOSでの方言を考慮して、記述する必要があります。
たとえば、Windows(というかDOSというか)では、/ はセパレータでなく、コマンドの オプション指定と解釈され、
dir/w としたら、dirディレクトリのしたのwコマンドを実行するという意味ではなく、
dirコマンドに対して、w というオプションを指定したという意味になります。
回答ありがとうございます。
なるほど、確かにDOSの/はオプションに使われますね!
分かりやすい解説ありがとうございました!
疑問が完全にスッキリしました。
No.2
- 回答日時:
exeってことは、Windowsですよね。
exec()内でのディレクトリのセパレータは、/じゃなくて\ では?
回答ありがとうございます。
\に直したらうまくいきました!
締め切る前に質問させて頂きたいのですが、セパレータの/と\は何か違いがあるのでしょうか?
そういえばローカルアドレスは\、ウェブアドレスは/で区切られていた気がしますが、どちらも逆(ローカルアドレスに/、ウェブアドレスに\)にしても記号が置き換わって問題なく動作していたので深く考えたことがありませんでした。もしかしてどちらがどの記号という厳密な決まりがあって、ブラウザやエクスプローラには違う記号を置き換える機能が実装されているので動作し、自前でプログラムを組む時はそれをしないと動かないものなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
Subversionのリポジトリの削除
-
Visual C++ 2005 Express Editi...
-
CFileDialogの最初のディレクト...
-
VB.NET 最下位のディレクトリ名...
-
findfirst("*",&ffblk,FA_DIREC...
-
LoadLibraryの戻り値(HMODULE)...
-
HOSTSファイルについて
-
rmdirでフォルダが消せません
-
exec()で他ディレクトリのexeプ...
-
str ! = NULL
-
DLL のロードの順序
-
[ ディレクトリ '.' は書き込み...
-
kshのスクリプトでワイルドカー...
-
Subversionで、ファイルをリネ...
-
Matlab 指定したディレクトリ...
-
execコマンドについて
-
PHPのif文でその処理を途中で抜...
-
FORMで送信ボタンと戻るボタン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
CFileDialogの最初のディレクト...
-
makefile でファイルをコピーす...
-
現在位置より2つ上のディレク...
-
visualstudioでc#のdllができない
-
JAVA内で複数のファイルを削除...
-
rmdirでフォルダが消せません
-
バッチを用いたフォルダの自動移動
-
glob関数で日本語文字が取得で...
-
Subversionで、ファイルをリネ...
-
Makefile.inとMakefile.am
-
O/Rマッパーの選定
-
WSHやVBSについて
-
DLL のロードの順序
-
絶対パス?絶対アドレス?意味...
-
LoadLibraryの戻り値(HMODULE)...
-
ツリーメニューを縮小させたい
-
wordpressの記事をカスタマイズ...
-
アプリケーション・ディレクト...
おすすめ情報