Pregunta

Tengo un pequeño problema con lo siguiente:

Cuando ejecuto esta línea:

echo exec(createDir($somevariable));

Me sale este error:

Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32

Cualquier idea.

Gracias.

¿Fue útil?

Solución

exec () espera un argumento de cadena, que pasaría a Su sistema operativo para ser ejecutado. En otras palabras, este es un portal a la línea de comandos del servidor.

No estoy seguro de qué función es createDir () , pero a menos que esté devolviendo una cadena de línea de comandos válida, probablemente esté fallando debido a eso.

En Linux, es posible que desee hacer algo como

exec('/usr/bin/mkdir '.$path);

... por otro lado, debe abstenerse de usar exec () a toda costa. Lo que puede hacer aquí, en cambio, es echar un vistazo a mkdir ()

Otros consejos

Con exec puede ejecutar llamadas al sistema como si estuviera utilizando la línea de comando. No tiene nada que ver con la ejecución de funciones PHP.

Para crear un directorio, puedes hacer lo siguiente:

exec( 'mkdir [NAME OF DIRECTORY]' );

Supongo que su función createDir () no devuelve nada. También podría valer la pena comprobar que $ somevariable también se establece en algo razonable

Estás malinterpretando el propósito de exec (). Si todo lo que desea hacer es crear un directorio, debe usar mkdir ().

Creo que he derivado de otras publicaciones y comenta qué es lo que realmente quieres hacer:

Creo que createDir () es una función PHP que ha escrito usted mismo. Hace más que solo crear un directorio: lo rellena y eso puede llevar algún tiempo.

Por alguna razón, usted cree que el siguiente comando se ejecuta antes de que createDir () haya terminado de funcionar, y pensó que al invocar createDir () usando exec () podría evitar esto.

Dígame en un comentario si esto está lejos, y eliminaré esta respuesta.

Parece poco probable que createDir () realmente siga funcionando después de que se devuelve (si lo hace, entonces lo llamamos 'asíncrono'). Se requeriría que el programador haga todo lo posible para hacerlo asíncrono. Así que comprueba esa suposición.

Aun así, exec () no es para invocar funciones PHP. Es para invocar comandos de shell (el tipo de cosa que se escribe en un indicador de comandos). Como muchos de nosotros hemos observado, debe evitarse a menos que sea muy cuidadoso; el riesgo es que permita que un usuario ejecute comandos de shell arbitrarios.

Si realmente tiene que esperar a que se complete una función asincrónica, hay un par de formas de hacerlo.

La primera forma requiere que la función asincrónica se haya escrito de manera adecuada. Algunas API le permiten iniciar un trabajo asincrónico, que le dará un "identificador", luego hará otras cosas y luego obtendrá el estado de retorno del identificador. Algo como:

handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);

getResults esperará hasta que finalice el trabajo.

La segunda forma no es tan buena, y puede usarse cuando la API es menos útil. Desafortunadamente, se trata de encontrar alguna pista de que el trabajo está terminado y sondear hasta que lo esté.

while( checkJobIsDone() == false ) {
    sleep(some time interval);
}

Supongo que createDir () no tiene un valor de retorno.

Pruebe exec (" mkdir $ somevariable ");

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top