Я работаю на Mac OS X 10 Yosemite, поэтому мне интересно, сталкиваются ли другие с такой же проблемой. Этот код дает вам представление о проблеме. Создайте файл index.php, и это внутри:
<?php
$exec = "diskutil list";
echo $exec;
$output = shell_exec($exec);
echo $output;
Это при использовании встроенной версии Apache + PHP. При использовании XAMPP или Nightrain без проблем запускается указанная выше команда. Поэтому мне интересно, блокирует ли версия OSX для Apache или PHP определенные команды shell_exec?
Мой опыт до сих пор:
Когда я набираю в командной строке следующую команду:
diskutil info /dev/disk1s1
Я получаю полный обзор информации о диске.
Но когда я использую shell_exec()
выполнить ту же команду в PHP на OSX я получаю сообщение об ошибке:
Не удалось найти диск: / dev / disk1s1
Apache настроен на использование того же владельца, что и мой пользователь (User: staff) — и все остальные команды работают.
Также, когда я использую следующую команду в командной строке:
diskutil list
Я получаю полный обзор. Но затем снова shell_exec()
ничего не возвращает, и в журнале ошибок Apache я вижу:
Не удалось запустить сеанс DiskManagement
Я гуглил и нашел ноль результатов.
Во-первых, ваша команда командной строки — это одно, а команда в вашем PHP-скрипте — другое. Это означает, что ваши примеры командной строки:
diskutil info /dev/disk1s1
Но команда в вашем PHP-скрипте оставляет диск /dev/disk1s1
как это:
diskutil list
Так непонятно, что ты делаешь, что не работает. Кроме того, часто в сценариях PHP вам необходимо указать полный путь для любых вызываемых двоичных файлов. Итак, вместо этой строки:
$exec = "diskutil info";
Измени это на это; примечание я добавил /dev/disk1s1
так что команда имеет диск для действия:
$exec = "/usr/sbin/diskutil info /dev/disk1s1";
И это место diskutil
на моем Mac OS X 10.9.5. Чтобы убедиться, что он будет в том же пути, используйте which
как это:
which diskutil
Что бы вернуть что-то вроде этого:
/usr/sbin/diskutil
И когда я запускаю его из командной строки, я делаю это так; при условии, что тестовый файл назван shell_exec_test.php
:
php ./shell_exec_test.php
Других решений пока нет …