我有以下代码
$env=array('PATH'=>'C:\Program Files\MySQL\MySQL Server 5.1\bin',
'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC');
$cmd='mysql "--port=3306" "--host=127.0.0.1" "--user=root" "--password=xxxx" <"C:\Projects/script.sql" 2>&1';
print $cmd;
$proc = proc_open($cmd, $descriptorspec, $pipes, NULL, $env) or die("Cannot run $cmd");
while ($line=fgets($pipes[1])) print $line;
print "\n\nCompleted\n";
Run Code Online (Sandbox Code Playgroud)
我得到的输出是
ERROR 2004 (HY000): Can't create TCP/IP socket (10106)
Run Code Online (Sandbox Code Playgroud)
为什么忽略端口选项?该命令在命令行上运行良好.
看到的错误
ERROR 2004 (HY000): Can't create TCP/IP socket (10106)
Run Code Online (Sandbox Code Playgroud)
是由mysql引发的,所以mysql进程实际上启动了。
此错误对应于CR_IPSOCK_ERROR,它打印问题的根本原因:10106。
快速搜索给出:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668%28v=vs.85%29.aspx
特别是:
WSAEPROVIDERFAILEDINIT
10106
Service provider failed to initialize.
The requested service provider could not be loaded or initialized. This error is returned if either a service provider's DLL could not be loaded (LoadLibrary failed) or the provider's WSPStartup or NSPStartup function failed.
Run Code Online (Sandbox Code Playgroud)
我认为这与端口号被“忽略”没有任何关系,甚至更少的防火墙问题。
看来创建的环境proc_open足以启动 mysql 进程,但还不够完整,无法调用LoadLibrary从该进程内调用(即加载网络代码)失败。
相同的命令可以在命令行中运行,很可能是因为命令行中的环境包含更多内容。
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |