Назад | Перейти на главную страницу

Apache не интерпретирует файлы .PHP

Недавно я загрузил с сайта OpenSUSE OS версии 11.4, чтобы использовать ее в качестве сервера. Для этого я загрузил серверную версию, в которой по умолчанию загружены Apache / 2.2.17 и PHP5… Хорошо, до сих пор это хорошо

Теперь я успешно запустил Apache и поместил файл test.php в каталог documentRoot. test.php содержат только <?php phpinfo() ?>

Затем в браузере я набрал http://localhost/test.php и вот проблема: браузер не отображал то, что phpinfo() должен отображаться, вместо этого он спросил меня, хочу ли я открыть или сохранить test.php ... что сводит меня с ума .... Я много гуглил, но решения не было

Это /etc/apache2/conf.d/php5.conf

<IfModule mod_php5.c>
    AddHandler application/x-httpd-php .php4
    AddHandler application/x-httpd-php .php5
    AddHandler application/x-httpd-php .php
    AddHandler application/x-httpd-php-source .php4s
    AddHandler application/x-httpd-php-source .php5s
    AddHandler application/x-httpd-php-source .phps
    DirectoryIndex index.php4
    DirectoryIndex index.php5
    DirectoryIndex index.php
</IfModule>

Стоит попробовать убедиться, что ваш проект не находится в каталоге пользователя (папка public_html) или что конфигурация в php5.conf (/etc/apache2/mods-available/php5.conf для некоторой конфигурации) допускает такую ​​интерпретацию.

<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
    SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
    </FilesMatch>
    # 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>
</IfModule>

Вы можете проверить, что внутри

nano /etc/apache2/mods-available/php5.conf

также вы можете проверить

sudo dpkg -S php5 | grep libapache2-mod-php5 

который показывает, есть ли у вас php5.conf в модах

У меня там:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Обратите внимание, что это регулярное выражение соответствует .php5, но по какой-то причине не может соответствовать .php.

Решение

apt-get remove libapache2-mod-php5 ; apt-get purge libapache2-mod-php5; apt-get install libapache2-mod-php5

затем откройте

nano /etc/apache2/mods-enabled/php5.conf 
  1. и заменить

    <FilesMatch ".+\.ph(p[345]?|t|tml)$">
    

    с участием

    <FilesMatch ".+\.ph((p[345]?)|t|tml)$">
    
  2. или просто выполнить

    sudo perl -pe 's|\Q.ph(p[345]?\E|.ph((p[345]?)| if $. <= 3'  /etc/apache2/mods-available/php5.conf
    

и перезапустите apache

sudo service apache2 restart

Взгляните на документацию PHP и убедитесь, что конфигурация правильная.

http://www.php.net/manual/en/install.unix.apache2.php

Это должно быть в вашем httpd.conf

LoadModule php5_module modules/libphp5.so

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

похоже, что mod_php5 как-то отключен

попробуйте (как root)

a2enmod php5
service apache2 restart

Затем попробуйте снова получить доступ к страницам

Модули apache в suse / opensuse включаются из / etc / sysconfig / apache2, при необходимости включают модуль php, запускают SuSEconfig и перезапускают службу apache2 :)

http://wiki.apache.org/httpd/DistrosDefaultLayout#openSUSE_and_SLES_.28Apache_httpd_2.2.29:

Я придумал следующее решение той же проблемы. Измените следующую директиву в /etc/httpd/conf/httpd.conf. Мне все еще нужно понять, почему это изменило поведение Apache, но у меня это сработало.

Измените это:

<Directory />
  Options FollowSymLinks
  AllowOverride None
</Directory>

К этому:

<Directory />
  Options None
  AllowOverride None
</Directory>

я добавил php5 к строке, начинающейся с APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_user autoindex cgi dir env expires include log_config mime negotiation setenvif ssl userdir reqtimeout authn_core authz_core" в /etc/sysconfig/apache2.

Возможно, у вас не установлен apache2-mod_php. Пробовать zypper install apache2-mod_php5 или любое другое имя пакета zypper search apache | grep php показывает вам.