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