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で質問しましょう!
似たような質問が見つかりました
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- プリンタ・スキャナー 2台のプリンターでそれぞれ異なる様式の帳票を印刷したい。 2 2022/09/06 10:07
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Windows 10 Windows11の実行モジュールはどこにある 1 2022/05/31 07:33
- その他(プログラミング・Web制作) プログラム初心者です Pythonでタイピング練習サイトに 自動で入力するものをつくったのですが こ 2 2022/07/09 23:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CFileDialogの最初のディレクト...
-
【PHP】declare命令で”Fatal er...
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
コマンドプロントについて
-
Tcl/Tkの超初歩的な質問です。
-
fopenでファイルが開かない場合...
-
exec()で他ディレクトリのexeプ...
-
絶対パス?絶対アドレス?意味...
-
MkDir関数
-
ディレクトリ内のファイル名取得
-
空きでないディレクトリの削除
-
上位ディレクトリ名(フォルダ...
-
renameでのPermission deniedエ...
-
glob関数で日本語文字が取得で...
-
DlgDirSelectComboBoxEx
-
ファイルアップロードに関して...
-
Subversionで、ファイルをリネ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
【BAT(バッチ)ファイル】Web...
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
fopenでファイルが開かない場合...
-
MkDir関数
-
visualstudioでc#のdllができない
-
絶対パス?絶対アドレス?意味...
-
DLL のロードの順序
-
includeが出来ない訳とは?
-
VB.NET 最下位のディレクトリ名...
-
rmdirでフォルダが消せません
-
ファイル選択ダイアログで選択...
-
C言語でのディレクトリ作成につ...
-
aspのページが表示できません
-
バッチファイルで特定ファイル...
-
ディレクトリの正規表現について
おすすめ情報