我有一个简单的脚本:
<?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而不是$ mySQLDir?
编辑:尝试echo $ cmd也许你可以看到一个错误。
命令行中的空格可能被视为分隔符,所以它实际上正在尝试运行:
c:\program
有参数:
files ...
尝试使用双引号括住整个可执行文件path,因为它传递给exec() ,所以windows shell知道它应该是一个单词。
我find了解决办法 :你需要明确地将$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); ?>