Використовуйте скріншот із програмою PHP exec


0

Я не можу змусити екранізувати роботу, коли спрацьовує команда 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

Я не впевнений, що $outputповідомлення намагається передати.

php.ini disable_functionsпорожній.

У мене таке відчуття, що це проблема ОСХ. Чи можете ви вказати мене в правильному напрямку щодо вирішення цієї проблеми?

від екрана людини

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

Я не використовую жодного ssh. PID якого процесу слід використовувати у цьому випадку?

exec("sudo launchctl bsexec $PID screencapture -R 0,0,450,150 hehe.png");

Відповіді:


1

Весь кредит йде на патрикс.

Проблема пов'язана з тим, що OSX не дозволяє php-скрипту виконувати screencaptureкоманду. OSX не має проблем, якщо ви запускаєте свій скрипт вручну, але якщо він спрацьовує як відповідь на запит GET або POST, ніж він піднімає червоний прапор.

Для вирішення цього потрібно три кроки:

  1. Додайте дозвіл користувачеві, який працює з httpd (та php), щоб виконувати sudo launchctlбез пароля. У моєму випадку це так daemon. Я отримав це від Монітора активності. Редагувати за /etc/sudoersдопомогою

    daemon ALL=(ALL) NOPASSWD: /bin/launchctl
    
  2. отримати ПІД loginWindow. ви можете використовувати ActivityMonitor для цього. PID піддається змінам, таким чином, щоб самостійно застосовувати:

    pgrep loginwindow
    
  3. оновіть свою screencaptureкоманду:

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

Варто зазначити, що крок 1 додає незначний ризик для безпеки і, ймовірно, не повинен використовуватися в інтернетному середовищі (особливо з рішенням PHP, де кожен може легко прочитати вихідний код).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.