PHP-код не виконується, натомість код відображається на сторінці


319

Я намагаюся виконати деякий 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, хоча з цього часу явно змінилося. Проблема все ще існує в тому, що багато серверів відключили їх, що робить ваш код значно менш портативним. Це не стосується коротких тегів ехо (<?= ), які повинні працювати нормально на php 5.4+, незалежно від налаштувань сервера.
мопсид

3
нерозумно говорити про короткі теги. Довгі теги смокчуть і вони некрасиві. У мене ніколи не було проблем за 10 років програмування php. Вони майже ніколи не є проблемою
Даніал

Відповіді:


417

Здається, що у вашій конфігурації щось не так, ось кілька речей, які ви можете перевірити:

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

  2. Переконайтеся, що вказаний модуль PHP та не коментований всередині httpd.conf вашого Apache. Це має бути щось на зразок LoadModule php5_module "c:/php/php5apache2_2.dll"файлу. Знайдіть LoadModule phpі переконайтесь, що ;перед ним немає коментарів ( ).

  3. Переконайтесь, що в httpd.conf-файлі Apache є тип 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
ulkas

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
Хоча цей фрагмент коду може вирішити питання, включаючи пояснення, як і чому це вирішує проблему , справді допоможе покращити якість вашої публікації. Пам’ятайте, що ви відповідаєте на запитання читачів у майбутньому, а не лише про людину, яка зараз запитує! Будь ласка, відредагуйте свою відповідь, щоб додати пояснення та вказати, які обмеження та припущення застосовуються.
Toby Speight

4
Ця відповідь стосується Linux, тематичний запуск чітко використовує Windows.
Raymond Nijland

3
@RaymondNijland правда, але це канонічно, і я знайшов це питання, і це врятувало мене після більш ніж години усунення несправностей.
Гуска

Як і чому: Це відбувається, коли PHP7 не налаштовує службу швидкого 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 .., щоб знайти рішення, мені знадобилося певний час, тому я подумав, що поділюсь цим із вами, хлопці:

Крім того, переконайтеся, що жоден з файлів конфігурації вашого веб-сайту, пов’язаних із цим конкретним хостом або virtualhost, не має в них 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
Генрі ван Меген

16

Ви просто відкриваєте файл php у браузері. Ви повинні відкрити його за допомогою URL-адреси localhost. якщо ви відкриєте файл безпосередньо зі свого каталогу, він ні в якому разі не виконуватиме 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) у php 5.6
zond

Це була моя проблема, моя конфігурація virtualmin / apache була для 127.0.0.2, але я ставив свою зовнішню ip адресу в браузері, я просто оновив свою v / a config і тепер її працює
Hayden Thring

Мені просто не вистачало libapache2-mod-php7.3.
dxvargas

8

Я знаю, що це повинно звучати нерозумно ... але рідко це трапляється.

Перевірте, чи намагаєтесь ви виконати php з

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

а не від

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

ps> Ви можете помітити, що якщо ви пишете з оболонки

php info.php 

він відповідає з кодом (це означає функції php) ..


PHP працює нормально (перевірено за допомогою командного рядка). але, коли я отримую доступ до файлу за допомогою URL-адреси, він показує PHP-код.
muaaz

8

Це знову трапилося зі мною, разом із завантаженням html-файлів сервером, а не обробкою. Я деякий час не використовував апаш для веб-сервера на комп’ютері, а тим часом 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

Я вирішив це шляхом видалення XAMPP та встановлення WAMP. Дякую за допомогу.


Я xampp, але це працює чудово. Ви виявили, чому він показував php-код @Gui
Pie

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 версії тієї ж помилки. Шлях папки /etc/apache2/httpd.conf у wamp 3. немає @ @amirR
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

3

У мене були подібні проблеми, але в моєму випадку рішення було іншим. мій файл, який тримав код PHP був названий «somename.html» змінив його на «somename.php» працювали штраф


Це також вирішило це для мене. Хто-небудь знає, чи sever виконуватиме php у файлі .html чи закінчення файлу завжди має бути змінено на .php, коли слід виконати рядок php?
full_prog_full

залежить від налаштувань сервера, у більшості випадків виконується php-код, який існує у anyfile.html. а якщо це не так, його можна змінити, хоча idk how: 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 .


3

Переконайтеся, що сценарій містить

<?php

перед кодом, який слід виконати. Між ними не повинно бути місця<? іphp цим .


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
Raymond Nijland

1

У мене був випадок, що я випадково почав викручувати каталог файлів у root. Він додав файл .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 . Зверніть увагу на написання та точний шлях модуля через останню відповідь у цій нитці апачелоунжу 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

і зараз все працює добре.


0

Іншою можливою причиною цієї проблеми може бути те, що ви намагаєтеся запустити скрипт у "директорії користувача" з 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.