Получение пустой страницы 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.