Estoy intentando ejecutar el siguiente comando en PHP (en Ubuntu):

<?php
 if (exec("/home/johnboy/ffmpeg/ffmpeg -i test1.mp4 -acodec aac -ab 128kb -vcodec mpeg4 -b 1220kb -mbd 1 -s 320x180 final_video.mov")) 
      { echo "Success"; }
      else { echo "No good"; }

Y siempre me sale «No bueno» se hizo eco de la espalda, y no hay ningún archivo creado.

Curiosamente, si puedo ejecutar el mismo comando en el Shell, funciona, sin problemas.

También, cuando ejecuta el mismo código anterior, pero a sustituir «whoami» en lugar de la ffmpeg cosas, funciona. (Se repite el «Éxito»)

Alguna idea de por qué esto no estaría de trabajo? Gracias.

Lo imaginé. Al parecer, el directorio era legible, pero no de escritura. Como resultado, ffmpeg no se pudo crear el nuevo archivo. He creado una salida diferente y directorio chmod 777, ¡voila!

OriginalEl autor Dodinas | 2010-03-09

8 Comentarios

  1. 2

    Puede el apache/usuario de la web de alcanzar /home/johnboy/ffmpeg/ffmpeg? Esa es, tal vez /home/johnboy es 0700 lugar de 0755?

    Tal vez no son los límites de los recursos que afectan a la carga de un gran programa y todas sus bibliotecas?

    Si ejecuta el script php cli sapi, se comporta correctamente? Incluso cuando se ejecuta como el usuario de apache?

    ¿Qué strace -ff mostrar cuando el servidor web apache, el usuario ejecuta el script de php a través de php cli?

    Gracias por su respuesta. ¿Me aseguré de que ffmpeg y johnboy fueron chmod a 755. También, me encontré con el php test.php comando de shell, y funcionó bien. Así que yo sé que el script funciona. Simplemente no ejecutar desde el navegador web. No estoy seguro de lo strace -ff, o donde me había necesidad de ejecutarlo?
    habría que escribir strace -ff php file.php > log.txt 2>&1 y cargar el registro de algún lugar (después de mirarlo detenidamente) También, si php está en modo seguro cuando se ejecuta desde el servidor apache, la secuencia de comandos no funcionen; revise su registro de errores de apache.
    Hace apache tener acceso de escritura al directorio /var/www?

    OriginalEl autor geocar

  2. 4

    obtener la stderr dará el resultado

    intentar

    ffmpeg -i inputfile [more_params] 2>&1

    OriginalEl autor user432864

  3. 2

    Utilizar este

    $ffmpeg = "ffmpeg Installed path";
    $flvfile = "source video file with root path";
    $png_path " "Destination video file with root path and file type";
    
    
    exec("$ffmpeg -y -i $flvfile -vframes 1 -ss 00:01:60 
         -an -vcodec png -f rawvideo -s 110x90 $png_path");

    OriginalEl autor karthi

  4. 1

    Está utilizando rutas relativas a los nombres de archivo. Está usted seguro de que son de ejecutar el comando en el directorio correcto?

    Sí, porque en shell, cd /var/www (la ubicación del archivo php) y ejecutar el comando que hay. Como resultado, se crea correctamente el final_video.mov en el director /var/www/

    OriginalEl autor Lukáš Lalinský

  5. 1

    Habría algunos problemas si se desea ejecutar algo de esa manera.

    1. Tal vez usted tiene algún problema de permisos, el servidor web tiene limitación para manejar algunas de ejecución para el sistema.

    2. Tal vez su ruta de acceso del archivo es incorrecto.

    3. puedes probar a utilizar shell_exec para realizar la ejecución del sistema.

    De todos modos, lo que yo haría para hacer mi ejecución iría como la seda son,
    Voy a escribir 2 programas con el paso de mensajes entre ellos, por ejemplo de servidor de cliente de programa.
    El servidor podría esperar algunos mensajes desde el cliente para ejecutar algunos comandos (todos los comandos, no hay problemas de permisos). Todo lo que tienes que hacer en tu web es para llamar a su cliente de la aplicación.

    Lo que quiero enfatizar es que construir una interfaz de web y el sistema. Se podría resolver un montón de problemas con problemas de permisos.

    espero que esta ayuda.

    OriginalEl autor deddihp

  6. 0

    La función exec() sólo devuelve la última línea de salida, sospecho que la última línea de comando que está en blanco. si desea que el contenido completo del comando que debe usar shell_exec().

    También siguen la pista de que el comando se ejecuta, intenta lo siguiente: print(shell_exec("pwd"));

    gracioso puedo obtener una matriz de exec

    OriginalEl autor rook

  7. 0
    $output = shell_exec('/home/person/www/ffmpeg 2>&1');
    echo "<pre>$output</pre>";

    Aviso de la 2>&1 parte …

    OriginalEl autor Mark

Dejar respuesta

Please enter your comment!
Please enter your name here