В работе PHP можно столкнуться с ситуацией, когда один и тот же скрипт нормально работает в одной папке и не запускается при перемещении в другую папку. Либо при установке веб приложения на сервере Linux оно может не работать, хотя веб сервер настроен правильно и другие сайты работают.
Либо проблема может следующая: PHP не может создать файл, открыть файл или записать в файл в папке, для которой у него достаточно привилегий или даже в папку, открытую для всех.
В логах веб-сервера могут быть примерно следующие сообщения:
[Wed Apr 1 13:11:34 2020] PHP Warning: Unknown: open_basedir restriction in effect. File(/usr/share/seeker/template/nearyou/php/info.php) is not within the allowed path(s): (/srv/http/:/etc/webapps/:/usr/share/webapps/:/tmp/:/home/mial/) in Unknown on line 0 [Wed Apr 1 13:11:34 2020] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0 [Wed Apr 1 13:11:34 2020] PHP Fatal error: Unknown: Failed opening required '/usr/share/seeker/template/nearyou/php/info.php' (include_path='.:') in Unknown on line 0 [Wed Apr 1 13:11:34 2020] 127.0.0.1:33906 [200]: POST /php/info.php - Unknown: Failed opening required '/usr/share/seeker/template/nearyou/php/info.php' (include_path='.:') in Unknown on line 0 [Wed Apr 1 13:11:34 2020] 127.0.0.1:33906 Closing
В сообщениях упоминается open_basedir. Директива open_basedir указывается в конфигурационном файле PHP (php.ini) и устанавливает директории, к которым может иметь доступ PHP. Более подробную информацию о данной директиве вы найдёте в статье «Для чего нужна и как использовать open_basedir».
Для исправления этой ошибки откройте конфигурационный файл PHP, в Linux он расположен по пути /etc/php/php.ini.
Найдите в этом файле директорию open_basedir и добавьте папку, в которой вам нужно запустить PHP скрипт, либо в которой PHP должен иметь доступ к файлам. В Windows разделяйте директории символом ; (точкой с запятой). На всех остальных системах, разделяйте директории символом : (двоеточием). При работе в качестве модуля Apache, пути open_basedir автоматически наследуются от родительских директорий.
Если скрипт запускаете через веб-сервер, то перезапустите веб-сервер, чтобы он использовал новые настройки.
По этой же причине могут быть проблемы в работе phpMyAdmin, подробности смотрите в статье «$Cfg[‘TempDir’] (./tmp/) недоступен в phpMyAdmin (РЕШЕНО)».
Связанные статьи:
- $Cfg['TempDir'] (./tmp/) недоступен в phpMyAdmin (РЕШЕНО) (100%)
- Переход с устаревшего расширения mcrypt на openssl_encrypt (55.1%)
- Ошибка «Cannot load modules/libphp7.so» (РЕШЕНО) (55.1%)
- Ошибка phpMyAdmin «Incorrect format parameter» при импорте базы данных (55.1%)
- Как в PHP 8 показать все ошибки (54.6%)
- Как создать сертификаты SSL (TLS) (RANDOM - 50%)