linux — & quot; exec (‘sh foo.sh’) & quot; в PHP не работает

Я недавно настроил свой сервер Apache2 на моей машине с Linux. Теперь я хотел выполнить скрипт PHP (index.php), который запускает скрипт оболочки (foo.sh), который создает папку в моем домашнем каталоге, но каталог не был создан.

Это два оригинальных файла:

foo.sh:

#!bin/bash

mkdir /home/lorenzo/testDir

index.php:

<?php

exec('sh test.sh');

?>

Итак, я подумал, что, возможно, проблема возникает из-за привилегий или что-то, и действительно после того, как я изменил файлы на это:

foo.sh:

#!bin/bash

echo "Hello world"

index.php:

<?php

$temp=exec('sh test.sh');
echo $temp;

?>

Я видел выход Hello World на моем сайте.

Итак, PHP-скрипт выполняется и запускает скрипт оболочки. Но почему сценарий оболочки не может выполнить команду mkdir?

1

Решение

Это действительно, скорее всего, проблема разрешения.

Сначала вы должны выяснить, какой пользователь работает в Apache. Это обычно www-data (в Linux на Debian, таких как Ubuntu) или apache (в Linux с RedHat) или что-то в этом роде. ps -eF | grep apache раскроет пользователя.

После того, как вы это выясните, убедитесь, что у пользователя apache есть соответствующие права в вашем домашнем каталоге. Вы можете добавить его в свою группу пользователей (используя usermod -a -G ... а потом chmod g+w ~) или разрешить писать для все пользователи (chmod o+w ~).

Но, оба это плохой идея. Ваш php-скрипт (или что-либо еще, работающее от имени пользователя apache) может быть взломан и взломан, оставляя ваш домашний каталог открытым для злоумышленников, чтобы изменить и rm -rf,

Кроме того, если вы используете RedHat-ish Linux, вы будут запустить в SELinux, который по умолчанию предотвращает доступ apache к пользовательским каталогам apache. В этом случае вы также должны установить setsebool -P httpd_enable_homedirs on,

Вместо, Я бы порекомендовал вам использовать другой каталог и предоставить вашему пользователю полный доступ к нему. Нечто подобное /var/www/testDir с apache в качестве владельца и группы, и добавление себя в группу пользователей apache, вероятно, является разумной идеей.

1

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

Похоже, проблема с разрешением. Убедитесь, что у Apache есть разрешение на запись в этот каталог

0

У вас могут быть проблемы с разрешениями на сервере. Попробуй использовать chmod -R 775 <dirname>(or 777) в вашей командной строке SSH. Вы можете сделать это в PHP-код с chmod() тоже, но я не советую вам, потому что он будет запускаться каждый раз, когда запускается php-код, и менять его больше раз бессмысленно. Он может выводить на экран, но я уверен, что каталог, в котором скрипт хочет создать файл, имеет разрешение 755. Попробуйте проверить это.

-1