[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 メーリングリストの案内