私は簡単なスクリプトを持っています:
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$db = 'BPOJob';
$file =dirname(__FILE__).'\\'.'job_create.sql';
$mySQLDir='"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe"';
$cmd = $mySQLDir.' -h '.$dbhost.' --user='.$dbuser.' --password='.$dbpass.' < "'.$file.'"';
exec($cmd,$out,$retval);
echo "\n";
echo ($retval);
?>
上記のコマンドをPHP.exeで実行すると、機能しません。 execからの戻り値として1を取得しました。
しかし、コマンドラインを呼び出して直接実行すると
mysql.exe -h localhost --user=admin --password=password < job_create.sql
その後、.sqlファイルを実行できます。
何か足りないものはありますか?
編集:申し訳ありません!情報が間違っています。質問を編集しましたが、まだ有効です。
解決策を見つけました :$cmd
を引用符で囲む必要があります:
exec('"'.$cmd.'"',$out ,$retval);
参考までに、これは完全なスクリプトです。
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$db = 'BPOJob';
$file =dirname(__FILE__).'\\'.'job_create.sql';
$mySQLDir='"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe"';
$cmd = $mySQLDir.' -h '.$dbhost.' --user='.$dbuser.' --password='.$dbpass.' < "'.$file.'"';
exec('"'.$cmd.'"',$out,$retval);
echo "\n";
echo ($retval);
?>
うーん、$ mySQLDirの代わりに$ cmdを実行するべきではありませんか?
編集:$ cmdをエコーしてみてください。エラーが表示される可能性があります。
コマンドラインのスペースはおそらく区切り文字として扱われているため、実際に実行しようとしています。
_c:\program
_
引数付き:
_files ...
_
exec()
に渡されるときに、実行可能パス全体を二重引用符で囲んでみてください。これにより、Windowsシェルはそれが1つのWordであると想定されていることを認識します。