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.