- Apache HTTP Server 2.2.21 с VirtualHosts под SuExec
- PHP 5.3.8 через fcgid
- Арх Линукс 2011.08.19
Нахожусь в процессе перехода с виртуального хостинга на VPS. Код, который у меня работал нормально до переноса, но теперь не работает в этой строке:
require_once($_SERVER['DOCUMENT_ROOT'] . 'includes/content/header.php');
Журнал ошибок говорит:
Неустранимая ошибка PHP: require_once(): Не удалось открыть требуемый '/srv/www/hostname/public/includes/content/header.php' (include_path='.:/usr/share/pear') в /srv/www/hostname /public/index.php в строке 3
Я попробовал ту же строку без корневой части документа, с ./
и без нее и т. д., но безуспешно. Никакой разницы с require
, include_once
или include
тоже нет. Тем не менее, я могу убедиться, что файл существует именно в этом месте, скопировав его из журнала ошибок и cd
записав в него…
Но чтобы быть абсолютно уверенным, я проверил возвращаемые значения include
s, а также file_exists
— все они возвращают false. Тем не менее, все файлы отбираются пользователем/группой SuExec, и никакая комбинация разрешений не помогает (для каталогов или файлов); пробовал с 644 по 777. Что тут происходит?
Изменить:
- Тот же результат с файлами в том же каталоге.
- Журналы ошибок Apache и SuExec ничего не сообщают.
- Безопасный режим отключен в
php.ini
. dirname(__FILE__)
иexec('pwd')
возвращают то же самое, что и$_SERVER['DOCUMENT_ROOT']
, но без завершающей косой черты.fread
,file_get_contents
иrealpath(dirname(__FILE__))
все возвращают false.set_include_path()
не действует.- Запуск
require
черезphp-cgi
непосредственно из командной строки возвращает внутреннюю ошибку сервера, аinclude
возвращает пустой вывод; запуск черезphp
возвращает пустой вывод.
Вот моя конфигурация vhost:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/srv/www/hostname/public/"
ServerName hostname.com
ServerAlias www.hostname.com
SuexecUserGroup hostname hostname
ErrorLog "/srv/www/hostname/logs/error.log"
LogLevel debug
CustomLog "/srv/www/hostname/logs/access.log" combined
<Directory /srv/www/hostname/public>
Order allow,deny
Allow from all
</Directory>
# http://www.linode.com/forums/viewtopic.php?t=2982
<IfModule !mod_php5.c>
<IfModule !mod_php5_filter.c>
<IfModule !mod_php5_hooks.c>
<IfModule mod_actions.c>
<IfModule mod_alias.c>
<IfModule mod_mime.c>
<IfModule mod_fcgid.c>
AddHandler php-fcgi .php
Action php-fcgi /fcgid-bin/php-fcgid-wrapper
Alias /fcgid-bin/ /srv/www/hostname/fcgid-bin/
<Location /fcgid-bin/>
SetHandler fcgid-script
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
ReWriteEngine On
ReWriteRule ^/fcgid-bin/[^/]*$ / [PT]
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</IfModule>
</VirtualHost>
php.ini
. - person Hugh Guiney   schedule 29.10.2011fread
иfile_get_contents
оба возвращают false. - person Hugh Guiney   schedule 29.10.2011