Я установил Debian 6 VPS для размещения нескольких небольших сайтов, и он прекрасно работает для одного из них по умолчанию.
Затем я создал нового пользователя, скопировал / вставил файл vhost по умолчанию и включил его с помощью a2ensite и только скорректированные пути для этого нового пользователя, но по какой-то причине файлы PHP не анализируются, и отображается только их источник.
Итак, резюмируем: идентичные настройки vhost, модуль PHP включен, короткие теги включены (но не используются)
Чтобы прояснить: я искал и нашел кучу «решений» здесь и в Интернете, но ни одно из них, похоже, не помогло мне.
Только что заметил эту строку в логах:
PHP Fatal error: Unknown: Failed opening required '/home/tester/public_html/index.php' (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0
[Thu Mar 21 20:28:55 2013] [error] [client xxx.xxx.xxx.xxx] PHP Warning: Unknown: open_basedir restriction in effect. File(/home/tester/public_html/index.php) is not within the allowed path(s): (/home/user/public_html:/tmp) in Unknown on line 0
И это содержимое моего файла vhost по умолчанию:
<VirtualHost *:80>
ServerAdmin user@mail.com
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /home/user/public_html/
ErrorLog /home/user/logs/error.log
CustomLog /home/user/logs/access.log combined
<Directory "/home/user/public_html">
AllowOverride All
php_admin_flag engine on
php_admin_value open_basedir "/home/user/public_html:/tmp"
</Directory>
</VirtualHost>
Может ли PHP open_basedir быть виновником этой проблемы?
Ура! Все заработало!
Проверены настройки конфигурации модуля PHP Apache в /etc/apache2/mods-enabled/php5.conf:
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Order Deny,Allow
Deny from all
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
Order Deny,Allow
Deny from all
</FilesMatch>
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_value engine Off
</Directory>
</IfModule>
Здесь четко сказано:
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.)
Я так и сделал, затем перезапустил Apache и вуаля:
Да, open_basedir может быть корнем этой проблемы. У вас должен быть путь / home / tester / public_html / и / home / user.
Похоже, он пропускает синтаксический анализ PHP и не блокирует доступ к странице, как я жестко - я нашел аналогичную проблему здесь: https://bbs.archlinux.org/viewtopic.php?id=57877 .
/ Первая версия с запросом разъяснений удалена как не соответствующая политикам ServerFault, как мне сказали. /