Tengo que solucionar este pequeño error. En primer lugar, vamos a hablar de un pequeño hecho: En CLI en Windows, no se puede ejecutar un programa con un espacio en su camino, a menos que se escapó:Error extraño en PHP, espacios en las rutas y Windows
C:\>a b/c.bat
'a' is not recognized as an internal or external command,
operable program or batch file.
C:\>"a b/c.bat"
C:\>
estoy usando proc_open ... proc_close en PHP para ejecutar un proceso (programa), ejemplo:
function _pipeExec($cmd,$input=''){
$proc=proc_open($cmd,array(0=>array('pipe','r'),
1=>array('pipe','w'),2=>array('pipe','w')),$pipes);
fwrite($pipes[0],$input);
fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]); // max execusion time exceeded ssue
fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]);
fclose($pipes[2]);
$rtn=proc_close($proc);
return array(
'stdout'=>$stdout,
'stderr'=>$stderr,
'return'=>(int)$rtn
);
}
// example 1
_pipeExec('C:\\a b\\c.bat -switch');
// example 2
_pipeExec('"C:\\a b\\c.bat" -switch');
// example 3 (sounds stupid but I had to try)
_pipeExec('""C:\\a b\\c.bat"" -switch');
ejemplo 1
- RESULTADO: 1
- STDERR: 'C: \ a' no se reconoce como un comando interno o externo, programa operable o archivo por lotes.
- STDOUT:
Ejemplo 2
- RESULTADO: 1
- STDERR: 'C: \ a' no se reconoce como un comando interno o externo, programa operable o lote archivo.
- STDOUT:
Ejemplo 3
- RESULTADO: 1
- STDERR: La sintaxis de etiqueta de nombre de archivo, nombre de directorio, o el volumen es incorrecta.
- STDOUT:
Como puede ver, cualquiera de los casos (entre comillas dobles o no) el código falla. ¿Soy yo o me estoy perdiendo algo?
tiro en la oscuridad, pero puede que trate de cambiar los tipos de cotización? ('" 'to' '') –
No tengo experiencia en esto, pero en el símbolo del sistema ejecutas" ab/c.bat "y en PHP llamas" C: \ ab \ c.bat "incluyendo el camino dentro las citas. ¿Tal vez llamar a C: \ "ab \ c.bat" funciona? –
@Pekka, me sale igual que el Ejemplo 3, parece que las comillas simples no son caracteres de contenedor como comillas dobles. – Christian