5

我在 php 中运行以下内容:

$res = proc_open($cmd, $descriptorspec, $pipes, "C:\\xampp\htdocs\\",null,array('bypass_shell'=>true));

问题是它给出了以下错误:

Warning: proc_open(): CreateProcess failed, error code - 3

我在哪里可以找到错误的含义?

PS:它在 Windows Server 2007.SP2 上。用户是管理员,完全访问。PHP 版本为 5.3.1

4

1 回答 1

10

在 Windows 中,CreateProcess 实际上并不返回错误代码。相反,如果 CreateProcess 失败,则使用GetLastError查找更多详细信息,然后使用FormatMessage将 GetLastError 中的错误代码转换为正确的描述。(GetLastError 中的错误代码也可以使用此列表进行解码)

查看 proc_open() 的源代码,PHP 实际上是在发生故障时为您执行 GetLastError(),它记录的错误代码是 GetLastError() 的返回值,而不是 CreateProcess 的返回值(它返回一个 BOOL,不太可能是 3 :) )

请注意,proc_open 使用它来转储消息:

php_error_docref(NULL TSRMLS_CC, E_WARNING, "CreateProcess failed, error code - %u", dw);

...所以你在 3 之前得到的“-”只是一个连字符,而不是减号。因此,您会收到错误代码 3,根据该列表,这意味着“系统找不到指定的路径。”。

于 2011-02-14T09:38:04.053 回答