Получение пустой страницы PHP поверх Apache
В новом установочном облачном облачном сервере (CentOS) я установил php и Apache. Веб-сервер работает нормально:
[[email protected] httpd]# service httpd status
httpd (pid 11232) is running...
[[email protected] httpd]# php --version | head -1
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57)
Однако браузер покажет пустые страницы (белая страница), если я попытаюсь посетить любую php-страницу.
Вот что я сделал до сих пор для устранения неполадок:
- Создана страница со следующим содержимым:
<?php phpinfo(); ?>
. Он отображает пустую страницу при просмотре из браузера.
- Чтобы убедиться, что apache указывает на правильный каталог, разместил там статическую
.html
страницу и увидел, что в браузере это прекрасно, поэтому apache работает и каталог верен.
- В
/etc/php.ini
изменена директива display_errors
на On
. Все еще пустая страница.
- В конфигурационном файле Apache (
/etc/httpd/conf/httpd.conf
) найдена эта строка Include conf.d/*.conf
. Внутри каталога conf.d
есть файл php.conf
, содержащий строку:
LoadModule php5_module modules/libphp5.so
. Убедитесь, что этот .so файл действительно существует в этом месте.
- В том же файле у меня есть и эти две строки:
AddHandler php5-script .php
и AddType text/html .php
- Выполнение php-страницы из CLI, она отлично работает - поэтому php работает локально.
Тогда почему в браузере всегда отображается пустая/белая страница? Что еще мне не хватает?
ИЗМЕНИТЬ
Основываясь на предложениях @Nathan,
- Я проверил файл журнала ошибок Apache, не видел, чтобы какая-либо ошибка была
сообщили там.
- Мой
/etc/php.ini
говорит, что php error_log находится как syslog
. Поэтому я проверил /var/log/messages
, но не смог найти сообщение об ошибке PHP
- Затем я поместил обычный файл
HTML
в файл php, содержащий вызов phpinfo()
. Интересно, что я обнаружил, что даже обычные HTML-тексты также не приходят. Он по-прежнему создает пустую страницу.
- Затем я проверил Apache
access
log. Сюрприз! Нет запроса GET
для любого из файлов PHP, которые я пытался загрузить в браузере. Но запрос GET для всех не-php файлов есть с кодом возврата 200.
Apache не даже регистрирует любой запрос на доступ к файлам PHP. Любая идея, почему это произойдет?
Ответы
Ответ 1
Это было когда-то, но я хотел вернуться к этому вопросу, чтобы обновить информацию о том, что проблема связана с настройкой прав доступа к каталогу.
У пользователя FPM, которого я использовал, не было необходимых прав для index.php
файла index.php
в корневом веб-каталоге.
Чтобы избежать этих проблем в будущем, я создал автоматический скрипт bash, который будет автоматически создавать и настраивать веб-серверы в коробках DigitalOcean. Пожалуйста, посмотрите здесь https://github.com/akash-mitra/fairy
Этот скрипт будет автоматически,
- Устанавливает Nginx
- Создать виртуальный серверный блок для nginx
- Устанавливает PHP, PHP APC, PHP Curl и т.д.
- Поддерживает PHP Fast Process Manager (php-fpm)
- Устанавливает Memcached
- Устанавливает базу данных (MariaDB/MySQL)
- Опционально устанавливает PHP Composer и Laravel
- Настраивает и укрепляет SSH
- Активирует брандмауэр
- Опционально включает пространство SWAP на сервере DO и устраняет проблему локали
Ответ 2
проверьте свой phpinfo() script.
<?php
phpinfo();
?>
отсутствует "php" за первым "?" даст пустую страницу
Ответ 3
Я думаю, что ваша установка php с apache ошибочна. Вот почему вы не видите какую-либо страницу php на своем веб-сервере. Очистите удалите все существующие приложения, такие как httpd, php, php-fpm, php-cli и т.д. И попробуйте очистить isntall в этом порядке
yum install httpd -y
yum install php php-common php-cli php-gd php-curl php-fpm -y
затем убедитесь, что вы перезагрузили сервер httpd.
service httpd restart
Установите mod_fastcgi:
yum install mod_fastcgi
Запустите службу:
service php-fpm start
Перезапустить Apache:
service httpd restart
5. Конфигурация Apache с PHP-FPM
Откройте файл fastcgi.conf:
nano /etc/httpd/conf.d/fastcgi.conf
Добавьте это в конец файла:
<IfModule mod_fastcgi.c>
DirectoryIndex index.html index.shtml index.cgi index.php
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
</IfModule>
После этого поиска после "FastCgiWrapper" и убедитесь, что он установлен на "выключен", затем сохраните файл.
Каталог/usr/lib/cgi-bin/должен существовать, поэтому мы его создаем:
mkdir /usr/lib/cgi-bin/
Если mod_php установлен и включен, нам нужно отключить его, поэтому откройте конфигурацию в /etc/httpd/conf.d/php.conf:
nano /etc/httpd/conf.d/php.conf
Прокомментируйте строки AddHandler и AddType, чтобы они выглядели следующим образом:
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
#AddHandler php5-script .php
#AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
Сохраните файл и перезапустите Apache:
service httpd restart
Ответ 4
Вы напрямую переходите к файлу php? Или вы просто переходите к каталогу root?
Если позже, Apache может не распознавать .php как индекс каталога.
Чтобы протестировать, попробуйте создать файл .htaccess в корневом каталоге веб-сайта, содержащий следующую строку:
DirectoryIndex index.php
Ответ 5
У меня такая же проблема...
Проблема в iptables. (Это похоже на)
Попробуйте:
service iptables stop
## check if it stop...
service iptables status
Затем повторите попытку перезагрузки страницы.
Если у вас есть другое решение, поделитесь им.
[ изменить]
Перезагрузка службы iptables работает для меня.
Try:
service iptables restart
Ответ 6
Прежде всего, вы должны проверить разрешения своего файла.
Если вы не предоставляете доступ к чтению публике, Apache создает пустую страницу без каких-либо ошибок.
Ответ 7
Так как все выглядит по умолчанию, вы проверили эту часть только для подтверждения
cat /etc/php.ini | grep log_errors
Если log_errors отключен, включите его и проверьте этот ниже журнал после перезагрузки httpd.
/var/log/httpd/error_log
-
Также проверьте эту часть из конфигурации php.
cat /etc/php.ini | grep error_reporting
Это значение должно быть включено по умолчанию, чтобы display_errors работал.
error_reporting = E_ALL
Ответ 8
Извините, что отправил старый поток... это важно.
У меня также были эти проблемы, когда html-ответ не выводил
После двойной проверки php.ini или моих файлов apache conf и по-прежнему не получал никакого вывода, я позже выяснил, что я подавлял ошибку include/require класса, с @
, который был вложен в функция-конструктор. Во включенном файле произошла синтаксическая ошибка, которая полностью остановила весь вывод, когда были сброшены ошибки.
Итак, сначала проверьте свои обработчики.
Если вы сначала сохраняете весь свой вывод в vars, и вы включаете в себя различные сценарии, в первую очередь, вам не придется видеть эти ошибки. Если вы подавите ошибки обработчика файлов, вы получите пустой экран, если у вас есть синтаксическая ошибка в файле.
Найдите ваши файлы для всех экземпляров @
в вашем php-коде. Затем превратите @include "/path_to/script.php";
в include "/path_to/script.php";
или что-нибудь @$foo
в $foo
, так как такой var может ссылаться на зависимость, которая приводит к тому, что ваш script заканчивается тем, что отображается в журнале ошибок httpd или в ответе http.