Usa screencapture con PHP exec

0

Non riesco a far funzionare screencapture quando lavoro con il 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

Non sono sicuro di ciò che il messaggio $output sta cercando di trasmettere.

php.ini disable_functions è vuoto.

Ho la sensazione che si tratti di un problema di osx. Puoi indicarmi la giusta direzione per risolvere questo problema?

da screencapture uomo

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

Non sto usando nessun ssh. PID di quale processo dovrebbe essere usato in questo caso?

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

1 risposta

1

Tutto il merito va a patrix.

Il problema deriva da OSX che impedisce allo script php di eseguire il comando screencapture . OSX non ha alcun problema se si esegue lo script manualmente, ma se viene attivato come risposta a una richiesta GET o POST, allora si alza la bandiera rossa.

Per risolvere questo sono necessari 3 passaggi:

  1. Aggiungi permesso all'utente che sta eseguendo httpd (e php) per eseguire sudo launchctl senza password. Nel mio caso è daemon . L'ho preso da Activity Monitor. Modifica /etc/sudoers con

    daemon ALL=(ALL) NOPASSWD: /bin/launchctl
    
  2. ottieni il PID di loginWindow . puoi usare ActivityMonitor per questo. La PID è soggetta a modifiche in modo da utilizzare a prova di proiettili:

    pgrep loginwindow
    
  3. aggiorna il tuo comando screencapture :

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

Potrebbe valere la pena ricordare che il passaggio 1 aggiunge un leggero rischio per la sicurezza e probabilmente non dovrebbe essere usato in un ambiente rivolto verso Internet (specialmente con una soluzione PHP in cui tutti possono leggere facilmente il codice sorgente).

    
risposta data 04.12.2017 - 14:55
fonte

Leggi altre domande sui tag