#php #macos #shell #terminal
#php #macos #оболочка #терминал
Вопрос:
Я экспериментировал с shell_exec и командами, и, похоже, у меня не получается это сделать. Я использую функцию php shell_exec () и запускаю команду захвата экрана, чтобы сделать снимок рабочего стола. При локальном запуске скрипта через coda он работает нормально. Затем я запустил его через свою установку apache через htdocs, и он запускается, но изображение нигде не сохраняется? Для браузеров нужно ли вообще менять каталог? вот как выглядит мой супер простой скрипт. Возможно ли это вообще?
<?
$command = "screencapture -iWP ~/Random/test.png";
shell_exec($command);
?>
Ответ №1:
В настоящее время у меня нет доступа к Mac для тестирования, но я был бы крайне удивлен и более чем немного обеспокоен, если бы это сработало.
На сервере apache должен быть запущен под другим идентификатором пользователя, отличным от зарегистрированного пользователя, что означает, что попытка захватить фреймбуфер должна завершиться неудачей.
Если оно хотя бы записало (или пыталось записать) изображение, то оно будет ~/ Random/test.png; например, если apache запускается от имени пользователя с именем apache, целевое имя файла ~apache / Random/test.png
OSX — это в основном UNIX, и ключевой особенностью UNIX-подобных операционных систем является безопасность. Видеофрагментный буфер должен быть доступен только процессам, запущенным под UID зарегистрированного пользователя (или root). Демонические процессы, такие как apache httpd, должны выполняться под своим собственным, некорневым UID.
Комментарии:
1. очевидно, что это было бы огромной проблемой безопасности, если бы это сработало на стороне пользователей, но команда все еще выполняется, поэтому я понятия не имею, где она сохраняет файл (если он вообще есть). Я использую установку apache XAAMP, поэтому корневая папка localhost находится в htdocs, но все равно замечаю. Однако, если бы у меня был запущен сервер Mac, могло бы это действительно сработать? Это сделало бы скриншот экрана сервера, а не пользователей, верно?
2. Я отредактирую свой ответ; на сервере httpd и сеансе рабочего стола должны быть разные UID.
Ответ №2:
Вероятно, вам придется указать полный путь к исполняемому файлу. Кроме того, указание полного пути к выходному PNG также помогло бы, потому что это разные пользователи.
Запустите команду
which screencapture
Чтобы найти путь, по которому находится исполняемый файл. Выходной файл должен находиться в каталоге, доступном для записи, для пользователя, под которым запущен apache (обычно apache). Вы можете проверить пользователя, под управлением которого запущен apache, заглянув в конфигурацию apache или просто запустив «top» (от имени root).
Надеюсь, это поможет.
Комментарии:
1. извините, я немного новичок, я открыл файл конфигурации, где в нем я могу найти пользователя?
2. каждый дистрибутив отличается… если вы запустите «grep -rin «user» .» в каталоге с конфигурацией вы можете увидеть строки, содержащие директиву apache «User» … в Ubuntu файлы конфигурации фактически разделены на множество файлов… просто попробуйте найти директиву «User»…