PHP-код не выполняется, вместо этого код отображается на странице


320

Я пытаюсь выполнить некоторый код PHP в проекте (используя Dreamweaver), но код не запускается.

Когда я проверяю исходный код, код PHP появляется в виде HTML-тегов (я вижу его в исходном коде). Apache работает правильно (я работаю с XAMPP), страницы PHP открываются правильно, но код PHP не выполняется.

Есть ли у кого-то предложение о том, что происходит?

Примечание: файл уже назван какfilename.php

Изменить: код ..:

<?
include_once("/code/configs.php");
?>

Печать


44
Вы используете короткие теги <?вместо <?php?
Дэн Гроссман

28
Никогда не используйте короткие теги. ( <?). Они устарели, на самом деле не работают во многих местах, и в остальном совершенно не нужны. Сохранение трех нажатий клавиш не является веской причиной возможного сбоя вашего кода, вероятно, на половине серверов, на которых он может работать.
mopsyd

10
@mopsyd Где говорится, что короткие теги устарели? Обратите внимание, что короткие теги не совпадают с короткими эхо-тегами , и короткие эхо-теги поддерживаются по умолчанию начиная с PHP 5.4, независимо от short_open_tagнастроек.
Кайл Андерсон

5
Я знаю, что короткие теги не являются короткими эхо-тегами, поэтому я указал, о чем я говорил в комментарии. На момент написания статьи короткие ярлыки были помечены как устаревшие для версии php 6, хотя с тех пор она, видимо, изменилась. Проблема все еще существует в том, что на многих серверах они отключены, что делает ваш код значительно менее переносимым. Это не относится к коротким тегам echo ( <?=), которые должны нормально работать на php 5.4+ независимо от настроек сервера.
Мопсид

3
глупо говорить о коротких тегах. Длинные метки отстой и они безобразны У меня никогда не было проблем за 10 лет программирования php. У них почти никогда не бывает проблем
Даниал

Ответы:


418

Похоже, что с вашей конфигурацией что-то не так, вот несколько вещей, которые вы можете проверить:

  1. Убедитесь, что PHP установлен и работает правильно. Это может звучать глупо, но вы никогда не знаете. Простой способ проверить это запустить php -vиз командной строки и посмотреть, возвращает ли информацию о версии или какие-либо ошибки.

  2. Убедитесь, что модуль PHP указан и не прокомментирован внутри httpd.conf вашего Apache. Это должно быть что-то вроде LoadModule php5_module "c:/php/php5apache2_2.dll"файла. Найдите LoadModule phpи убедитесь, что ;перед ним нет комментариев ( ).

  3. Убедитесь, что файл Apache httpd.conf имеет тип PHP MIME. Это должно быть что-то вроде AddType application/x-httpd-php .php. Это говорит Apache запускать .phpфайлы как PHP. Найдите AddType, а затем убедитесь, что есть запись для PHP, и что она не закомментирована .

  4. Убедитесь, что у вашего файла есть .phpрасширение или какое-либо расширение, указанное в определении MIME в пункте # 3, иначе оно не будет выполняться как PHP.

  5. Убедитесь, что вы не используете короткие теги в файле PHP ( <?), они не включены на всех серверах по умолчанию и их использование не рекомендуется. Используйте <?phpвместо этого (или включить короткие теги в вашем php.ini с , short_open_tag=Onесли у вас есть код , который полагается на них).

  6. Убедитесь, что вы обращаетесь к своему файлу через веб-сервер, используя URL-адрес, а http://localhost/file.phpне через локальный доступ к файлу.file://localhost/www/file.php

И, наконец, проверьте руководство PHP для дальнейших советов по настройке .


14
Не знаю почему, но установщик PHP 5.3.15 не добавляет строку AddType application/x-httpd-php .php. Большое спасибо!!
MatuDuke

7
@shmeeps: Где вы видели, что короткие теги устарели? Я провел некоторые поиски и могу только найти рекомендации против них, ничего об устаревании. Предоставляется для приложений, которые должны распространяться, лучше использовать <? Php в случае, если на хост-сервере они не включены, но для приложений, где у вас есть полный контроль над сервером, они будут включены. увидеть любую причину не использовать их.
ClarkeyBoy

3
пункт № 6 работал для меня .. локальный доступ не использует сервер Apache
KawaiKx

6
пункт 2 сработал для меня безопасным способом -apt-get purge apache2; apt-get install apache2 libapache-mod-php5
Улкас

1
@full_prog_full Попробуйте загрузить файл с .phpрасширением с содержимым <?php echo("Success"); ?>и посмотреть, если при доступе к файлу через веб-браузер отображается «Успех» без соответствующего PHP-кода.
shmeeps

61

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart

24
Хотя этот фрагмент кода может решить вопрос, включая объяснение того, как и почему это решает проблему , действительно можно улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, а не только для того, кто спрашивает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются.
Тоби Спейт

4
Этот ответ связан с Linux, темой для стартера темы явно являются окна.
Рэймонд

3
@RaymondNijland верно, но это канонично, и я нашел этот вопрос, и он спас меня после более чем часа поиска неисправностей.
Гусь

Как и почему: это происходит, когда PHP7 не настраивает службу fast-CGI по умолчанию в скрипте make. Аналогичным образом sudo a2enmod proxy_fcgi setenvifсоздает три новых мода /mods-available/proxy.conf proxy_fcgi.load proxy.load, sudo a2enconf php7.0-fpmсоздает файл конфигурации. /conf-available/php7.0-fpm.confПосле этого Apache2 может запустить модуль PHP7 как сервис быстрой CGI.
Талви

33

Я использую Apache в Ubuntu, и моя проблема заключалась в том, что в /etc/apache2/mods-available/php5.confфайле не было этого:

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

Я добавил его обратно и php правильно разбирал php файлы.


31

Примечание для пользователей php 7, добавьте это в ваш файл httpd.conf:

# PHP 7 specific configuration
<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>

4
Просто чтобы помочь другим людям с этим вопросом. httpd.confФайл находится в /etc/apache2/httpd.confслучае , если вы используете Ubuntu, это было бы apache2.confв том же каталоге , что нужно изменить , для PHP7.
Ахмед Сагарвала

23

Я нашел другую проблему, вызывающую эту проблему, и уже решил ее. Я случайно сохранил свой скрипт в UTF-16кодировке. Похоже, что PHP5 не может распознать <?phpтег в 16-битной кодировке по умолчанию.


18

Я публикую этот ответ, потому что мой интерфейс администратора Virtualmin / Webmin решил, что было бы неплохо отключить мой PHP-движок. Мне потребовалось некоторое время, чтобы найти решение, поэтому я решил поделиться им с вами, ребята:

Также убедитесь, что ни в одном из файлов конфигурации вашего сайта, относящихся к этому конкретному хосту или виртуальному хосту, нет php_admin_value, которые отключают PHP, например так:

php_admin_value engine Off

Если вы сомневаетесь, прокомментируйте это ...

# php_admin_value engine Off

И перезапустите свой веб-сервер.


1
Где именно эти настройки конфигурации?
cronoklee

2
@cronoklee В настройках vHost httpd.conf. Для существующих хостов вам нужно отредактировать конфигурацию apache в webmin. Для будущих хостов перейдите на virtualmin> шаблон сервера> веб-сайт apache. В любом случае, это не так безопасно, как fastcgi - virtualmin по умолчанию. Таким образом, правильный подход должен заключаться в устранении неполадок, почему fcgi не работает, например, это может быть вызвано правами доступа к файлам.
Sheepy

Если вы используете версию Apache, в которой нет httpd.conf, посмотрите /etc/apache2/mods-enabled/php7.confилиphp5.conf
Sam Malayek

Если вы сомневаетесь в местонахождении определенного параметра конфигурации, вы всегда можете использовать grep, чтобы найти то, что ищете, набрав (например, в данном случае):sudo grep php_admin_value /etc/* -R
Генри ван Меген,

17

Вы просто открываете свой php файл в браузер. Вы должны открыть его, используя локальный URL-адрес. если вы откроете файл прямо из вашего каталога, он не будет выполнять код php в любом случае.

использовать: http://locahost/index.phpилиhttp:127.0.0.1/index.php

Включить короткий код php. В вашем случае вы используете <?короткий код php для<?php . По умолчанию короткие коды php отключены.

Также используйте: sudo apt-get install php5 libapache2-mod-php5 php5-mcryptесли вы пользователь Ubuntu.


1
Почему mcrypt требуется, когда я просто включаю файл? Вы должны заметить, что этот вопрос старый и проблема с короткими тегами упоминалась 16 раз, также в верхнем комментарии моего вопроса.
Ги

1
Я просто поделился своим решением, я также столкнулся с той же ошибкой, и после выполнения этой команды mcrypt моя проблема решена. Вы также можете попробовать.
Хасан Бэйг

по умолчанию короткие коды php включены. short_open_tag = On (значение по умолчанию = ON) в php 5.6
zond

Это была моя проблема, моя конфигурация virtualmin / apache была для 127.0.0.2, но я помещал свой внешний IP-адрес в браузер, я только что обновил свою конфигурацию v / a, и теперь она работает
Hayden

Я просто скучал по libapache2-mod-php7.3.
dxvargas

8

Я знаю, это должно звучать глупо ... но редко это случается.

Проверьте, пытаетесь ли вы запустить php из

**http://localhost/info.php**

а не из

file:///var/www/info.php

ps> вы можете заметить, что если вы пишете из оболочки

php info.php 

это ответ с кодом (это означает, что функции PHP) ..


PHP работает нормально (проверено с помощью командной строки). но когда я получаю доступ к файлу с помощью URL, он показывает код PHP.
Муааз

8

Это снова случилось со мной, когда сервер загружал HTML-файлы, а не обрабатывал их. Некоторое время я не пользовался веб-сервером apache на компьютере, а Ubuntu обновлялся, как две новые версии с изначально установленной LTS. Теперь это

$ cat /etc/issue
Ubuntu 16.04 LTS

Так что PHP работал после так:

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

Веб-сервер теперь разбирает php. Возможно, теперь нужно обновить некоторые веб-сайты, так как php7.0 теперь работает там, где он был до запуска php5. Ну что ж.



5

Я столкнулся с этой проблемой на php 7.1, который поставляется с High Sierra (OS X 10.13.5), /etc/apache2/httpd.confпомогло редактирование со следующими изменениями:

  1. Раскомментируйте эту строку

    LoadModule php7_module libexec/apache2/libphp7.so
  2. Вставить следующее в конце

    <IfModule php7_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        <IfModule dir_module>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>

Как то же самое вы можете предложить Wamp 3 версии ту же ошибку. В wamp 3 нет пути к папке /etc/apache2/httpd.conf. @AamirR
Gem

Это сработало для меня! У меня была более странная проблема. Некоторые файлы рендеринга PHP, а другие нет и просто отображается код.
sjw0525

4

на моем Ubuntu 14.04, apache 2.4, php 5.5.9 установить, я попытался с sample.php в / var / www / html (корень документа по умолчанию), и он работал нормально. Так что проблема была в моей конфигурации виртуальных серверов. Решением было включить в директорию def, содержащую .php, следующую строку:

    php_admin_flag engine on

и где я должен добавить эту строку в файле Apache в httpd.conf моего виртуального сервера? и я использую Webmin
suresh pareek

4

Убедитесь, что скрипт содержит

<?php

перед кодом, который должен быть выполнен. Там не должно быть места между <?и phpв этом.


3

У меня была похожая проблема, но в моем случае решение было другим. мой файл, державший код PHP был назван «somename.html» изменил его на «somename.php» работали штраф


Это также решило это для меня. Кто-нибудь знает, будет ли сервер выполнять php в файле .html или окончание файла всегда нужно менять на .php, когда нужно выполнить строку php?
full_prog_full

зависит от настроек сервера, в большинстве случаев будет выполняться код php, существующий в anyfile.html. и если это не так, его можно изменить, хотя idk как: P
Netrus

3

Для новой настройки LAMP, работающего с php 7, отредактируйте файл /etc/httpd/conf/httpd.conf Примечание: обязательно сделайте резервную копию для него, прежде чем что-либо менять.

Вставьте это в самом низу файла:

<IfModule php7_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

Затем найдите LoadModule и вставьте следующую строку:

LoadModule php7_module modules/libphp7.so

Эта строка просто попросит httpd загрузить модуль php 7

Затем перезапустите httpd


3

Проверьте все пакеты, которые вы установили для php, используя:

yum list installed | grep remi

Установите все соответствующие пакеты php , особенно php-devel на вашем компьютере.


2

Это было в моем .htaccess

DirectoryIndex index.html index.htm

index.html содержит код PHP. По умолчанию PHP не обрабатывает файлы с такими расширениями, как htm *, как код PHP.

Вы можете переопределить это, добавив следующее в .htaccess:

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

1

Я думаю, что проблема в том, что он показывает код вместо результата в том, что он не собирается на локальный хост. перепроверьте, по какому адресу вы идете. Собираетесь ли вы в локальный файловый каталог или на локальный хост.

от скриншота, который вы послали, он собирается на ваш компьютер, а не на localhost.

"file: ///" это должно быть "localhost /"


1

Переустановка mcryptмодуля у меня сработала.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt

Честно говоря, возможно, потому что я не настроил PHP должным образом в своей системе. Но поскольку вопрос, который я задал относительно той же проблемы, был помечен как дубликат этого вопроса, я мог ответить только здесь. Интересно, почему проголосовало против.
BG

Этот ответ имеет отношение к Linux, так как администратор темы явно использует Windows
Рэймонд

1

У меня был случай, когда я случайно начал распаковывать каталог с файлами в корне. Он добавил файл .htaccess из моей папки с файлами, который будет блокировать все php

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

В итоге проверьте файл .htaccess в корневом каталоге.


1

Если у вас есть такая конфигурация:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Раскомментируйте следующие строки в вашем httpd.conf

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

Меня устраивает


1

Добавьте AddType application/x-httpd-php .phpв ваш файл httpd.conf, если вы используете Apache 2.4


1

Просто потратил часы, пытаясь заставить PHP 5 работать с Apache 2.4 на Windows 10 . Наконец для меня это была опечатка в httpd.conf LoadModule . Обратите внимание на написание и точный путь модуля через последний ответ в этой ветке apachelounge от denny2018 . Спасибо!

После двух ночей я обнаружил ... Мой каталог был написан c:(строчные буквы)

Я имел, LoadModule php5_module "c:/php/php5apache2.dll"но правильно для Apache 2.4 является:

LoadModule php5_module "C:/php/php5apache2_4.dll"

Так что я тоже пропустил _4раньше (для apache 2.4 ). Полный фрагмент, который работал для меня:

# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Только что попробовал PHP 7 . Там читается LoadModuleстрока в httpd.conf для Apache 2.4

LoadModule php7_module "C:/php/php7apache2_4.dll"

В настоящее время руководство php показывает, c:/php/php5apache2.dll что, конечно, нужно настроить.


1

в моем случае (Apache / 2.4.34),

после раскомментирования конкретного модуля

«LoadModule php7_module libexec / apache2 / libphp7.so»

из

"/Etc/apache2/httpd.conf"

моя проблема исчезла


1

Если мы находимся на той же странице, сделайте следующее

sudo apt-get install php -y sudo apt-get install php-{bcmath,bz2,intl,gd,mbstring,mysql,zip,fpm} -y

Чтобы включить PHP 7.2 FPM в Apache2, сделайте:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

обновление 2: Apache загружает .php файл вместо рендеринга

После этого я столкнулся с вышеуказанным вопросом. Есть похожие вопросы, как это .

Я не знаю почему, но это произошло только для моих файлов .php в /var/www/html/корневой папке. все было хорошо для подкаталогов. (например WordPress и phpmyadmin работал нормально)

Так вот мое решение. Я решил включить модуль php. поэтому я запустил эту команду:

a2enmod php7.2

но я получил эти ошибки:

Рассматривая зависимость mpm_prefork для php7.2: Рассматривая конфликт mpm_event для mpm_prefork: ОШИБКА: Модуль mpm_event включен - не может продолжаться из-за конфликтов. Сначала нужно отключить! Учитывая конфликт mpm_worker для mpm_prefork: ОШИБКА: не удалось включить зависимость mpm_prefork для php7.2, прерывание

поэтому я решил отключить mpm, выполнив следующие команды:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

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

systemctl restart apache2

затем включите php7.2 (моя установленная версия):

sudo a2enmod php7.2

и сейчас все отлично работает.


1

Другой возможной причиной этой проблемы может быть то, что вы пытаетесь запустить скрипт в «пользовательском каталоге» из UserDirмодуля. Запуск PHP-скриптов в пользовательских каталогах по умолчанию отключен. Вы столкнетесь с этой проблемой, если скрипт находится в public_htmlкаталоге в вашей домашней папке, и вы пытаетесь получить к нему доступ изhttp://localhost/~your_username .

Чтобы это исправить, откройте /etc/apache2/mods-enabled/php7.2.conf. Вы должны прокомментировать или удалить блок тегов внизу, который читает

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

-1

файл, который вы помещаете в / var / www / html /, должен иметь .php forexample example.php, если это пример, он не работает, но если вы измените его на example.php, он будет работать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.