No se pueden ejecutar archivos .exe utilizando exec () en PHP

Intento usar un archivo .exe para realizar cálculos y pasar el resultado a PHP. Hice un archivo Hello World .exe usando C ++, pero no puedo obtener PHP para ejecutarlo.

Si ejecuto este comando desde el CMD, obtengo el resultado correcto:

C:\path\file.exe 

Pero si hago esto en PHP, el resultado es una cadena vacía:

 exec('C:\path\file.exe',$out); var_dump($out); 

Pero esto muestra el resultado correcto:

 exec('ipconfig',$out); var_dump($out); 

Estoy usando WAMP en Windows 7.

Editar: Aquí está el progtwig C ++:

 #include  using namespace std; int main() { cout << "Hello World" << endl; return 0; } 

Algunos consejos que pueden ayudar:

  1. Use / lugar, también funciona bajo Windows.
  2. Si su ruta contiene espacios, envuélvalo entre comillas dobles $exec = '"C:/my path/file.exe"';
  3. Los parámetros se deben pasar fuera de las comillas dobles $exec = '"C:/my path/file.exe" /help';
  4. Asegúrese de que su progtwig realmente escribe en STDOUT, no en STDERR.

En una secuencia de una sola cita, todavía necesita escapar barras diagonales inversas, por lo que para obtener \ usted necesita \\ :

 exec('C:\\path\\file.exe',$out); 

Comprueba tu archivo config / php.ini, la función exec puede ser disuelta en disable_functions o marca la línea open_basedir , PHP podría estar limitado para acceder a ciertos directorios

Use el parámetro return_var para verificar el valor de retorno desde el comando.

 $return = -1; exec('C:\path\file.exe',$out,$return); echo "Return value: $return\n"; var_dump($out); 

En su caso, si se ejecutó con éxito debería devolver 0. Si no se encontró el archivo, probablemente retornará 1. Sin embargo, si mis sospechas son correctas, creo que el valor de retorno más probable es -1073741515.

Error -1073741515 (0xc0000135) es lo que se devuelve cuando su aplicación tiene DLL faltadas. Esto sucedería si estás usando la versión DLL de la biblioteca de ejecución de tu comstackdor.

La aplicación puede funcionar bien cuando se ejecuta localmente, donde tiene los archivos DLL instalados, pero aún puede fallar cuando se ejecuta desde su servidor web, que no necesariamente los tendrá.

Si este es el problema, ya sea que necesite recomstackr su aplicación para usar bibliotecas estáticas o instalar las DLL necesarias en el servidor web. No dice qué comstackdor está utilizando, pero para más información sobre los archivos DLL utilizados por Visual C ++, consulte aquí .

He copiado tu código para probarlo y:

La primera vez que obtengo resultados.

Agregué la prueba file_exists y obtuve:

 Warning: file_exists(): open_basedir restriction in effect. File(xxxxxxxxx) is not within the allowed path(s): (xxxxx:xxxx:xxxx:xxxx:xxx:xxx:) in xxxxxx/test.php on line 4 Call Stack: 0.0004 645640 1. {main}() xxxx/test.php:0 0.0004 646016 2. file_exists() xxxxxx/test.php:4 

Moví file.exe al mismo directorio de test.php y obtuve:

 array(1) { [0]=> string(11) "Hello World" } 

PHP:

  

Esto debería funcionar:

 exec('"C:\\folder name with space\\program.exe" argument1 "argument2 with space"', $output, $return); var_dump($output); //"Hello World" var_dump($return); //0 

Tuve el mismo problema. Puede crear un archivo test.bat e ingresar ( fwrite() ) el comando en él. Luego ejecute ( exec('test.bat', $out, $ret) ) ese archivo bat.

test.bat contiene:

 C:\path\file.exe