質問: phpからバッチファイルを起動したいと考えています。 ``` exec("cmd.exe /c (ドライブ名)aaa.bat"); ``` と通常はなると思いますがaaa.batがphpのサーバーにある場合 パスの指定はどうなるのでしょうか? また、batファイルの中のプログラム上でも特定のフォルダー上にある場合 どうすればいいでしょうか? ``` copy (ドライブ名)aaa.txt (ドライブ名)bbb.txt ``` よろしくお願いいたします。 ### 追記 > > ローカル環境はWindowsかと思いますが、「phpのサーバ」のOSは何になるのでしょうか? > > > Linuxみたいです。
回答: ファイルパス以前の問題として、Windows と Linux 系 OS では実行可能ファイルのファイル形式が異なるので、Linux 上では cmd.exe を直接実行することができません。php が実行されているサーバーが Linux ということなので、`exec` 関数で実行するファイルは Linux の形式の実行可能ファイルでなくてはいけません。Linux 上で cmd.exe を間接的に実行する方法はありますが、今回の問題を効率的に解決するものではないです。 Windows でバッチファイルと呼ばれているものは、典型的な Linux 系 OS ではシェルスクリプトと呼ばれるものになります。本当に外部スクリプトを実行したいのであれば、シェルスクリプトを書いて `sh` や `bash` などのシェル経由で実行することになるかと思います。 しかしそもそもの問題として、なぜ外部スクリプトを実行したいのでしょうか? php のプログラムとして書くことはできませんか? php のプログラムとして書くことができれば、バッチファイル/シェルスクリプトという差異は吸収することができます。たとえば php の `copy()` 関数を使えばファイルのコピーができます。 これらの前提のもとで、Linux 系 OS の上では Linux 系のファイルパスの指定方法をそのまま使えばファイルを指定することができます。