shell exec — Apache + PHP Mac OS X 10.0 — блокирует ли он использование диска в shell_exec ()?

Я работаю на 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

Я гуглил и нашел ноль результатов.

-1

Решение

Во-первых, ваша команда командной строки — это одно, а команда в вашем 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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]