Apache hiển thị mã PHP thay vì thực thi nó


107

Gần đây tôi đã cố gắng cài đặt PHP và Apache trên máy tính của mình. Sau nhiều giờ, chúng đã được cài đặt. Tôi đã sửa đổi các tệp httpd.conf và php.ini như mọi người nói. Sau đó, tôi đã tạo một tập lệnh PHP đơn giản:

<?php phpinfo(); ?>

Nhưng khi tôi cố gắng chạy nó với http://127.0.0.1/phpinfo.phpnó, nó chỉ hiển thị mã nguồn thay vì thực thi nó. Tôi đang sử dụng Apache 2, PHP 5 và Windows Vista.

CÁC DÒNG ĐÃ ĐƯỢC CHỈNH SỬA:

PHP.INI:

short_open_tag = On

HTTPD.CONF

LoadModule php5_module "C:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "C:/php"

trong phpinfo.php bạn đã thêm một số tiêu đề làm cho tệp .php có thể đọc được chưa?

@Peteris không toàn bộ kịch bản của tôi là trong câu hỏi của tôi
imulsion

hãy thử tập lệnh đơn giản: <?php echo "Hello world"; ?>nó có hiển thị Hello world không? nếu nó hiển thị mã thì cách @RabNawaz cho biết máy chủ của bạn không được định cấu hình chính xác!

Chỉ cần hiển thị lại mã :(
imulsion

1
Bạn đang truy cập tệp php của mình từ đâu? xin lưu ý rằng để thực thi tệp php bởi máy chủ của bạn, bạn cần đặt tệp của mình vào thư mục gốc của web thích hợp. và truy cập nó trong trình duyệt web của bạn như là http://localhost/hayhttp://127.0.0.1/
Ibrahim Azhar Armar

Câu trả lời:


90

Bạn phải kích hoạt php! Kiểm tra thư mục mods-enabledtrong thư mục Apache (mặc định /etc/apache2/:) để xem bạn có tìm thấy tệp có tên không php. Tôi không nhớ phần mở rộng nhưng tôi nghĩ là nó .so.

Đồng thời kiểm tra /var/log/apache2/error.logxem bạn có mắc phải lỗi nào khác không.


8
Bạn đã chạy: php5 a2enmod
Daniel Figueroa

6
theres không có mods_enabled thư mục trong thư mục apache của tôi
imulsion

@imulsion trong trường hợp của tôi nó đã được mods-enabled dưới / etc / apache2 /
Silveri

6
Trong trường hợp của tôi cho php7, tôi phải làm a2enmod php7.0và nó đã giải quyết được vấn đề của tôi. Mất cả ngày để đạt được bài đăng này bằng cách nào đó!
Rorschach

3
Không có tệp nào được gọi phpvào mods-enabled, làm gì bây giờ? Câu trả lời này không giải thích điều gì
Black

60

Chà, rất nhiều giải pháp ở đây! Đây là những gì tôi đã làm trên Ubuntu 16.04 :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart

Làm việc cho tôi bằng cách thêm --reinstallvào apt-get. Có thể cài đặt mô-đun php / apache bị bẩn.
Glastis

Điều này làm việc cho tôi trên Digital Dương của Ubuntu 16,04 máy chủ Cảm ơn
Sushant Bhargav

điều này mang lại cho tôi các lỗi sau: Considering conflict php5 for php7.0,, Considering conflict mpm_worker for mpm_preforkv.v. và khởi động lại apache2 không thành công
mrid

Nếu bạn Considering conflict php5 for php7.2truy cập /etc/apache2/mods-availablevà xóaphp5.*
Simon Epskamp

39

Đối với PHP 7 (Cũng có thể áp dụng cho các phiên bản trước), nhưng tôi phải làm điều này:

Thêm cái này vào cuối /etc/apache2/apache2.conf

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

Chạy điều này từ thiết bị đầu cuối:

sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7

Sau đó, đừng quên khởi động lại Apache để nó biết bạn đã thay đổi nội dung:

sudo service apache2 restart

Đây là bản tóm tắt từ: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/


3
Tôi đã phải làm điều này cho PHP 5.6 trên OSX El Capitan. (Sử dụng stock apache, nhưng homebrew php56)
rfay

1
Cũng hoạt động trên Windows (nghĩa là bạn không phải chạy các lệnh đầu cuối trên Windows) Cảm ơn bạn đã lưu cho tôi những tìm kiếm vô tận.
che-azeh

khi cài đặt từ nguồn, bắt buộc phải có tệp phù hợp này. (cấu hình và thực hiện, vv cho phép các module trong httpd.conf đối với tôi, nhưng didnt thêm thế này.)
user7296055

Có một tỷ nhận xét trong tệp httpd.conf mẫu; bất cứ ai có thể giải thích tại sao không có một cho php? Nó không phải là một thứ hiếm khi được sử dụng.
Danial

@Danial httpd.apache.org/support.html có một số phương pháp mà bạn có thể tìm tài liệu, báo cáo lỗi và đặt câu hỏi (chẳng hạn như tại sao không có ví dụ lành mạnh về việc sử dụng PHP trong httpd.conf?)
RyanNerd

24

Mở tập tin

/etc/apache2/httpd.conf

và thay đổi

#LoadModule php5_module libexec/apache2/libphp5.so

thành

LoadModule php5_module libexec/apache2/libphp5.so

Vì vậy, chỉ cần phát hiện tải mô-đun PHP trong httpd.conf


Trong trường hợp của tôi, dòng bắt đầu bằng php7_module - nhưng nếu không thì điều này có hiệu quả với tôi!
b0rgBart3 23/02/19


6

Một câu trả lời khác phù hợp với tôi. Đó là, để cài đặt[sudo] apt-get install libapache2-mod-php5.X


1
Của tôi cũng tương tự. Tôi đã thực hiện "sudo apt-cache search ^ libapache2 | grep php" tìm các gói có liên quan và sau đó cài đặt "sudo apt-get install libapache2-mod-php". libapache2-mod-php7.0 đã được cài đặt.
VectorVortec

3

Được thôi nếu bạn đã thử những gì bạn đã được nói ở trên hoặc trước đó (đó là những lý do có thể xảy ra) và nó vẫn hiển thị mã thay vì thực thi thì có một điều bạn đang làm sai chưa được giải quyết. Url bạn đã sử dụng để truy cập mã php của mình; một số người cố gắng thực thi mã php của họ bằng cách kéo tệp .php vào trình duyệt web. đây là thực hành sai và có thể dẫn đến loại vấn đề này. Nếu bạn đã lưu một tệp dưới dạng "test.php" trong thư mục C: // wamp / www thì bạn phải truy cập tệp này theo cách này: localhost: //test.php. loại lỗi này sẽ phát sinh khi bạn truy cập theo cách này: localhost: //wamp/www/test.php

Hy vọng tôi đã giúp một ai đó ngoài kia. o / ~ Daniel


3

Đăng những gì hiệu quả với tôi trong trường hợp giúp đỡ ai đó trên đường, mặc dù đó là một trường hợp bất thường.

Tôi đã đặt một trình xử lý để buộc máy chủ web của tôi sử dụng phiên bản php cao hơn phiên bản mặc định của chúng. Có 5.1, nhưng tôi muốn 5.6 nên tôi có cái này:

<FilesMatch \.php$>
    SetHandler php56-cgi
</FilesMatch>

trong tệp .htaccess của tôi.

Khi cố gắng chạy cục bộ trang web của tôi, có điều đó khiến mã php được xuất ra trình duyệt. Loại bỏ nó đã giải quyết được vấn đề.


3

Apache hiển thị mã php thay vì thực thi Sự cố đã được khắc phục

1. Đã mở conf php5.6 hoặc php7.x conf

# lệnh sau:

$ sudo vi /etc/apache2/mods-enabled/php5.6.conf

2. Nhận xét dòng sau

nhập mô tả hình ảnh ở đây

3. Khởi động lại máy chủ

khởi động lại dịch vụ $ sudo apache2

4 Thưởng thức :)


2

Bạn có thể xóa tệp .htaceess của mình và để hệ thống tạo một tệp mới (trống hoặc cơ bản). Có thể một số dòng bạn đã thêm là câu lệnh không chính xác hoặc có điều gì đó khác bên trong đang gây ra sự cố. Sau đó, bạn có thể thêm từng dòng từ tệp .htaccess cũ của mình để xem nguyên nhân gây ra sự cố.

Điều đó đã làm việc cho tôi. Trong trường hợp của tôi, các dòng thông báo cho máy không hiển thị phần mở rộng php ( RewriteCondRewriteRule ). Tệp .htaccess cũ của tôi hoạt động tốt trên máy chủ chia sẻ, nhưng vấn đề này xuất hiện khi tôi chuyển sang VPS.


Ngoài ra nếu bạn gặp phải sự ngu ngốc của CORS: hãy chạy sudo a2enmod headerssudo a2enmod rewrite(đừng quên khởi động lại Apache).
RyanNerd

2

Cảm ơn những người khác trên chủ đề này cho đề xuất của họ. Thực hiện theo các bước đã đề cập, tôi thấy rằng máy chủ apache không thể bắt đầu báo cáo lỗi cú pháp trong một loadtệp trong /etc/apache2/mods-enabled. Hóa ra cả php7.0 và php7.1 đều được kích hoạt.

a2dismod php7.0
systemctl restart apache2

và php được hiển thị lại chính xác.


1

nếu userdir của mô-đun được bật và trang web của bạn nằm trong userdir (~ / public_html), bạn phải kiểm tra /etc/apache2/mods-enabled/php5.conf. Phần sau làm cho nó hoạt động (trên Ubuntu 14.10 utopic):

# Running PHP scripts in user directories is disabled by default
# 
# 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_flag engine Off
#    </Directory>
# </IfModule>

1

Nếu bạn là người dùng ubuntu, sau khi cài đặt apache phải chạy lệnh sau trong cài đặt mới

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

Trong trường hợp của tôi hoạt động tốt.


1

Điều gì đã làm việc cho tôi:

Trong httpd.conf đang hoạt động, hãy tìm

<IfModule mime_module>
...
</IfModule>

Nó đã thiếu những điều sau đây

AddType application/x-httpd-php .php
AddHandler application/x-httpd-php .php

Sau khi khởi động lại apache, các tệp .php được phân tích cú pháp chính xác.


1

không có cách nào ở trên áp dụng hoặc làm việc cho tôi ... PHP7, Apache Httpd 2.2 trên CentOS 6

thực tế là, tôi đã cài đặt (tất cả bằng yum) php TRƯỚC Apache ... bạn phải làm ngược lại: luôn cài đặt Apache trước, sau đó đến PHP, và sau đó nó hoạt động ... Thật vậy, bạn có thể bị thiếu libphp7.solibphp7-zts.sotrong/etc/httpd/modules/

Tôi đã có thể khôi phục bằng mọi cách mà không cần cài đặt PHP. Tôi đã thêm dòng ma thuật vào /etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php Và sau đó chạy:yum install php php-mysql


1

Đối với PHP7 và Apache2.4, đây là tất cả những gì bạn cần làm:

sudo vim /etc/httpd/conf/httpd.conf

Đi tới cuối cùng và chèn những thứ sau (tất cả đều tự nó):

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

Apache bây giờ sẽ thực thi mọi thứ với PHP. Nếu tất cả những gì bạn có là các tệp html và php, thì điều này sẽ phù hợp với bạn. Nếu bạn có các loại tệp khác, thì bạn sẽ cần điều chỉnh tệp phù hợp với tình huống của mình. Tôi đã thử nghiệm điều này với phpMyAdmin và nó dường như không có vấn đề gì .... cho đến nay.

Không có thứ nào khác mà tất cả những người đang nói ở đây là cần thiết đối với tôi. Khi tôi đặt "AddType Application ....." vào đúng vị trí, Apache chỉ nói với tôi rằng mô-đun đó đã được tải và bỏ qua nó.

Bạn có thể tìm thêm thông tin tại đây: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

Cài đặt của tôi đã được thực hiện như sau:

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

Bạn cũng nên đọc phần này, nếu chưa: https://httpd.apache.org/docs/current/howto/htaccess.html#when


0

Điều này cũng xảy ra với tôi khi chạy $ _POST trong MAMP. Tất cả các tệp .ini và httpd của tôi đều được thiết lập chính xác. Nếu bạn đang xử lý biểu mẫu và bạn có tài liệu html và đăng thông tin lên trình xử lý biểu mẫu php đang chạy $ POST, hãy đảm bảo rằng bạn đang chạy tệp html từ localhost thông qua máy chủ của bạn chứ không chỉ cục bộ.

Đây là một phím tắt mà tôi đã thực hiện để chạy các tài liệu html, bằng cách chỉ cần nhấp vào tệp html trong thư mục của tôi và khởi chạy trong trình duyệt web của tôi, trong thực tế để kiểm tra xem php có đang được xử lý ở dạng của bạn hay không, bạn phải chạy html thông qua máy chủ của mình. Một giao thức rất đơn giản mà tôi đã bỏ qua.

Thí dụ:

Sai lầm: file:///Applications/MAMP/htdocs/form/form.html

Đúng: http://localhost:your port number/form/form.html

Bây giờ php sẽ được xử lý khi bạn nhấp vào nút gửi


0

Tôi đã gặp sự cố tương tự, do cấu hình mặc định của mô-đun Debian / Ubuntu gây ra suphp. Nó chứa suPHP_Engine offtoàn bộ / usr / share, dẫn đến các nguồn php được hiển thị trong trình duyệt. Vô hiệu hóa với a2dismod suphplà giải pháp tạm thời.


0

Tôi đã từng gặp vấn đề tương tự. Khi tôi chạy một tệp php, trình duyệt web đã hiển thị cho tôi mã php thay vì thực thi nó. Tôi đã thử nhiều lần: gỡ cài đặt / cài đặt lại wampserver64, làm việc xung quanh cài đặt / mô-đun PHP / Apache, v.v. Sau 2 ngày: Tôi nhận ra rằng khi tôi cố gắng chạy tệp php trong notepad ++ bằng cách nhấn tổ hợp mặc định "ctrl + alt + shift + R "cho chrome. Nó đang cố gắng thực thi tệp php của tôi như: "file /// C: / wamp64 / www / bla / bla .." trong thanh địa chỉ của chrome. Đó là vấn đề của tôi. Tôi đã thực hiện các thay đổi theo trang Định cấu hình Notepad ++ để chạy php trên localhost? . Vấn đề của tôi đã được giải quyết. Nhưng sau 2 ngày ..


0

Chạy Xampp (apache) với tư cách quản trị viên. Trong google chrome, gõ:

localhost/<insert folder name here>/<insert file name>

tức là nếu thư mục bạn tạo là "LearnPhp", tệp là "chapter1.php" thì gõ

localhost/LearnPhp/chapter1.php

Tôi đã tạo thư mục này trong thư mục xampp trong thư mục htdocs được tạo khi bạn tải xuống xampp.


0

Giải pháp Debian 9:

touch /etc/apache2/conf-available/php.conf 

Thêm vào tệp các dòng tiếp theo:

<IfModule mod_php5.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>
<IfModule mod_php.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>

Sau đó chạy:

a2enconf php && service apache2 restart

Điều này làm việc cho tôi, nhưng không phải ban đầu. Tôi đang chạy nội dung web trong thư mục người dùng, tính năng này bị tắt theo mặc định. Để kích hoạt điều đó, hãy xem phần cuối cùng trong/etc/apache2/mods-available/php7.2.conf
Tony Adams

0

Đôi khi nếu bạn có xung đột phiên bản php, nó sẽ xảy ra Để khắc phục điều đó, vui lòng làm theo các bước dưới đây

Bước 1: Đã cài đặt danh sách Yum | grep 'php'

nếu bạn có nhiều phiên bản php như php 5.6 và php 7.0 thì liên kết này sẽ xảy ra

Bước 2: Bạn xóa ** phiên bản php của bạn **

Bước 3: Sau đó khởi động lại apapche /etc/init.d/httpd restarthoặcservice apache2 restart


0

Giải pháp này đã làm việc cho tôi. Tôi đã xóa apache2 và cài đặt lại. Nó đã xảy ra sau khi thanh lọc và cài đặt. Nếu đó là lần cài đặt đầu tiên, bạn sẽ không gặp phải vấn đề này.


0

Tôi đã thử một số giải pháp ở trên nhưng cách khắc phục trong trường hợp của chúng tôi là cài đặt mô-đun fpm.

Chúng tôi đã cài đặt httpd trước php có thể có vấn đề gì đó, nhưng để giải quyết chúng tôi đã cài đặt những thứ sau:

yum mô-đun cài đặt php: 7.2

Điều này đã cài đặt mô-đun php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm mà sau đó chúng tôi đã bật bằng cách:

systemctl enable --now php-fpm

Từ thời điểm đó, chúng tôi để mặc định /etc/httpd/conf.d/php.conf và khởi động lại httpd

dịch vụ httpd khởi động lại

Sau đó, mọi thứ hoạt động.

Hy vọng điều này sẽ hữu ích, mất nhiều thời gian hơn nó phải tìm ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.