Usar captura de pantalla con exec PHP

0

No puedo hacer que funcione la captura de pantalla cuando se activa con el comando exec ().

$output = exec("/usr/sbin/screencapture -R 0,0,450,150 hehe.png"." 2>&1");
echo $output; //  in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO

No estoy seguro de qué intenta transmitir el mensaje $output .

php.ini disable_functions está vacío.

Tengo la sensación de que este es un problema de osx. ¿Me puede indicar la dirección correcta para resolver este problema?

de man screencapture

SECURITY CONSIDERATIONS
     To capture screen content while logged in via ssh, you must launch
     screencapture in the same mach bootstrap hierarchy as loginwindow:

     PID=pid of loginwindow
     sudo launchctl bsexec $PID screencapture

No estoy usando ningún ssh. PID de qué proceso se debe utilizar en este caso?

exec("sudo launchctl bsexec $PID screencapture -R 0,0,450,150 hehe.png");
    
pregunta sanjihan 04.12.2017 - 00:24

1 respuesta

1

Todo el crédito va a patrix.

El problema se debe a que OSX evita que el script php ejecute el comando screencapture . OSX no tiene ningún problema si ejecuta su secuencia de comandos manualmente, pero si se activa como respuesta a una solicitud GET o POST, el indicador rojo se enciende.

Para resolver estos 3 pasos son necesarios:

  1. Agregue permiso al usuario que ejecuta httpd (y php) para ejecutar sudo launchctl sin contraseña. En mi caso es daemon . Lo obtuve de Activity Monitor. Editar /etc/sudoers con

    daemon ALL=(ALL) NOPASSWD: /bin/launchctl
    
  2. obtener el PID de loginWindow . puedes usar ActivityMonitor para eso. El PID está sujeto a cambios, por lo que puede utilizarlo para pruebas de balas:

    pgrep loginwindow
    
  3. actualiza tu comando screencapture :

    sudo launchctl bsexec PIDNUMBERHERE screencapture [options] path/image.png
    

Puede que valga la pena mencionar que el paso 1 agrega un ligero riesgo de seguridad y probablemente no debería usarse en un entorno orientado a Internet (especialmente con una solución PHP donde todos pueden leer fácilmente el código fuente).

    
respondido por el sanjihan 04.12.2017 - 14:55

Lea otras preguntas en las etiquetas