2011-02-14 12 views
5

estoy corriendo en php lo siguiente:¿Dónde puedo encontrar los detalles de los códigos de error CreateProcess?

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

problema es que da el siguiente error:

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

Dónde puedo averiguar qué significa el error?

PD: está en un servidor de Windows 2007. SP2. El usuario es administrador, acceso completo. PHP es la versión 5.3.1

+2

Más een vir die username. – McGafter

Respuesta

8

En Windows, CreateProcess en realidad no devuelve un código de error. En cambio, usa GetLastError para encontrar más detalles si CreateProcess falla, luego use FormatMessage para convertir el código de error de GetLastError en una descripción adecuada. (Los códigos de error de GetLastError también pueden ser decodificados usando this list)

En cuanto a la fuente de proc_open(), PHP está haciendo realmente el GetLastError() para que en el caso de un fallo, y el código de error se habilita el registro de el regreso de GetLastError() en lugar de CreateProcess (que devuelve un BOOL, poco probable que sea 3 :))

Tenga en cuenta que proc_open utiliza esto para volcar el mensaje:

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

... así que "-" tienes antes de que el 3 sea solo un guión, no un signo menos. Por lo tanto, obtiene el código de error 3, que de acuerdo con that list significa "El sistema no puede encontrar la ruta especificada".

+1

¿Cómo hago eso en php? – Tjorriemorrie

+0

@Tjorriemorrie Ooops, lo siento, no prestaba suficiente atención a la parte de PHP. He actualizado mi respuesta con lo que está sucediendo desde el lado de PHP, y qué significa eso para decodificar tu mensaje. –

+0

Gran respuesta, gracias – Tjorriemorrie

Cuestiones relacionadas