[PHP-users 29790] Re: Windows版 PHPで system関数が動作しない
Daichi Kamemoto
daikame @ gmail.com
2006年 7月 14日 (金) 04:09:27 JST
初めまして。亀本と申します。
MLにメールを投げるのは初めてなので、かなりドキドキです。
> 【ソース】
> $command = '"C:\Program Files\PostgreSQL\8.1\bin\psql" -U foo -f
> "C:\Documents and Settings\foo\My Documents\data.sql" testdb 2>&1';
> $lastline = system($command, $retval);
>
> 【エラーメッセージ】
> 'C:\Program' は、内部コマンドまたは外部コマンド、
> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
不思議ですね。
当方でも適当なコマンドを実行しようとしたところ、ダブルクォートでくくられ
たコマンド等が二つ含まれている場合に同様のエラーが再現しました。
PHPの問題とは離れてしまい直接的な解決ではありませんが、ダブルクォートを
使わずに済むように、空白の混ざるパス指定に短縮名を使用するようにしてはど
うでしょう。
(最近の頭のいいコマンドプロンプトは、引数側のダブルクォートを省略しても
正しく解釈するようですが、それはちょっと解決策として怖いので。。。)
例えば上記のコマンドなら、
C:\PROGRA~1\PostgreSQL\8.1\bin\psql (中略
C:\DOCUME~1\foo\MYDOCU~1\data.sql
のような感じです。
なお、短縮名と長い名前は混在してもかまいません。 :)
通常は長い名前しか表示してくれませんが、dir /Xで短縮名も表示されるので、
確認したいときはどうぞ。
PHP-users メーリングリストの案内