Apache đang tải xuống các tệp php thay vì hiển thị chúng


92

Thông tin hệ điều hành và máy chủ:

  • CentOS 6.4 (Cuối cùng)
  • Apache 2.2.15
  • PHP 5.5.1

Trước đây tôi đã cài đặt php 5.3.x nhưng quyết định nâng cấp. Đầu tiên tôi gỡ cài đặt php 5.3.x và sau đó cài đặt php 5.5.1 nhưng sau khi cài đặt xong, apache không phân tích cú pháp các tệp php mà nó vừa tải xuống. Tôi đã kiểm tra các câu hỏi tương tự ở đây trong stackoverflow nhưng không có câu hỏi nào trong số chúng giúp được tôi cho đến nay.

Đối với bản ghi, tôi có các dòng sau trong httpd.conf và php.conf của tôi sẽ làm cho php hoạt động nhưng không được:

AddHandler application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php-source .phps
AddHandler php5-script .php

Tôi thực sự sẽ đánh giá cao bất kỳ sự giúp đỡ. Cảm ơn bạn.

BIÊN TẬP:

Tôi có những dòng này trong php.conf

<IfModule !worker.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

BIÊN TẬP:

Bằng cách loại bỏ

AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml

apache không tải xuống tệp nữa. Bây giờ apache đang hiển thị mã nguồn, nhưng không phải tất cả chỉ là một phần. Tôi đã thêm

AddType text/html .php

nhưng không có may mắn.


Vâng, như thế nào đã bạn cài đặt nó? SAPI nào? Xem thêm Cách kiểm tra mô-đun apache nào được bật / cài đặt?
mario

2
Mô-đun php của bạn không chạy.
Sithu

1
kiểm tra của bạn httpd.confnếu module php là nhận xét hay không
Maverick

1
Tôi đã chỉnh sửa các câu hỏi. Các module làm lối ra và họ đang được nạp rõ ràng
Anthony Gainor

Bạn có khởi động lại apache sau khi cài đặt không?
Ahmad

Câu trả lời:


79

AddType chính xác cho php là application / x-httpd-php

AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps

Đồng thời đảm bảo rằng mô-đun php của bạn đã được tải

LoadModule php5_module        modules/mod_php55.so

Khi bạn đang định cấu hình apache, hãy thử xem trang từ một trình duyệt khác - Tôi đã có những ngày chrome cố định lưu kết quả vào bộ nhớ cache và nó vẫn tiếp tục tải xuống mã nguồn trong khi ở một trình duyệt khác, nó vẫn ổn.


không có con đường module trong trường hợp của tôi
shamaseen

2
Bạn có thể thêm một số thông tin nơi đặt những dòng này?
Sören

6
Đối với những người đang tìm kiếm nơi đặt những dòng này. /etc/httpd/conf/httpd.conf
Siraj Alam

Trong trường hợp của tôi, trên Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

22

Tôi đã gặp vấn đề này hôm nay và không có giải pháp nào được mô tả phù hợp với tôi. Vì vậy, đây là một nguyên nhân có thể khác:

Nếu bạn có một cái gì đó giống như

AddHandler x-mapp-php6 .php3 .php4 .php .phtml

trong .htaccesstệp của thư mục nội dung web của bạn, nó có thể khiến các tập lệnh PHP của bạn ngừng hoạt động. Trong trường hợp của tôi, máy chủ không biết x-mapp-php6loại, vì .htaccesstệp đó là thứ tôi đã nhập từ một máy chủ web khác khi tôi chuyển nội dung trang web.

Chỉ cần xóa AddHandlerdòng khỏi .htaccesstệp đã giải quyết được vấn đề đó cho tôi.


Hoàn hảo. Trong trường hợp của tôi, nó AddHandler application/x-httpd-php54 .php54 .phpđã phải được loại bỏ.
Old McStopher

Tôi đã gặp sự cố nhưng đã tìm thấy tệp .htaccess thủ phạm trong thư mục chính (một thư mục phía trên thư mục web "public_html"). Nếu bất kỳ ai khác gặp vấn đề tương tự, hãy tìm kiếm .htaccess trong thư mục mẹ (phân tầng cài đặt).
Wireblue,

Tôi đã có một tệp .htaccess như thế này mà tôi đã lấy từ một máy chủ lưu trữ web. Nó buộc một phiên bản PHP không được cài đặt trên máy cục bộ của tôi. Do đó, máy chủ ảo không thực thi tệp PHP đúng cách.
BrightIntelDusk

Đây gần như chắc chắn là vấn đề nếu một số trang web hoạt động và những trang khác thì không. Joomla .htaccess có chứa AddHandler nhưng WordPress thì không.
Peter Wooster

Điều này hiệu quả với tôi, chỉ cần xóa dòng đó khỏi tệp công khai / .htaccess của tôi và chỉ mục đã được tải.
PA-GW

16

Sau khi đấu tranh rất nhiều cuối cùng tôi đã giải quyết được vấn đề.

Nếu bạn được nhắc tải xuống một .phptệp thay vì thực thi nó, thì đây là giải pháp hoàn hảo: Tôi giả sử rằng bạn đã cài đặt PHP5 rồi mà vẫn gặp lỗi này.

$ sudo su
$ a2enmod php5

Đây là nó.

Nhưng nếu bạn vẫn gặp lỗi:

Config file php5.conf not properly enabled: /etc/apache2/mods-enabled/php5.conf is a real file, not touching it

sau đó làm như sau:

Hóa ra các tệp không nên được lưu trữ trong mods-enabled, mà nên được lưu trữ trong mods-available. Sau đó, một liên kết tượng trưng sẽ được tạo trong các bản mod hỗ trợ trỏ đến tệp được lưu trữ trong các bản mod có sẵn.

Trước tiên, hãy xóa bản gốc:

$ mv /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/

Sau đó, tạo liên kết tượng trưng:

$ ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf

Tôi hy vọng vấn đề của bạn được giải quyết.


2
Lưu ý rằng điều này chỉ hoạt động trong Linux (và đặc biệt là Debian Linux).
Gwyneth Llewelyn

6

Vui lòng xem các chỉ thị addtype của bạn.

Đối với tôi, có vẻ như Apache đang nói với trình duyệt rằng nó đang gửi một loại tài liệu của ứng dụng / php cho các tập lệnh có phần mở rộng như .php5. Trên thực tế, Apache phải nói với trình duyệt rằng tập lệnh đang xuất ra văn bản / html.

Hãy thử cái này:

AddType text/html .php

Về đề xuất ở trên rằng bạn nên nói với trình duyệt rằng bạn đang xuất ra một tập lệnh PHP: Đó có vẻ là một ý tưởng khác thường đối với tôi. Tôi truy cập vào nó và thấy rằng có khá nhiều cuộc thảo luận về nó trên web. Rõ ràng có những trường hợp bạn có thể muốn nói rằng bạn đang gửi một tập lệnh PHP (mặc dù Apache được cho là thực thi tập lệnh và phát ra văn bản / html,) và cũng có những trường hợp trình duyệt chỉ đơn giản là không nhận ra Mime cụ thể đó Kiểu.

Xóa bộ nhớ cache của trình duyệt luôn là một ý kiến ​​hay.

Trong trường hợp hữu ích, đây là bản sao tệp /etc/httpd/conf.d/php.conf của tôi từ máy chủ chạy CentOS 5.9:

#        
# PHP is an HTML-embedded scripting language which attempts to make it                                             
# easy for developers to write dynamically generated webpages.                                                  
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

Điều này thật thú vị, nhưng trong trường hợp của tôi, nó chỉ xuất ra toàn bộ tập lệnh PHP, lần này được định dạng dưới dạng HTML (trái ngược với chỉ được định dạng bằng ASCII) - không hữu ích! Vấn đề ở đây là PHP không được chạy một cách chính xác bằng cách nào đó, hoặc các tiêu đề sai đang được gửi ...
Gwyneth Llewelyn

Lưu ý rằng chỉ thị AddType cuối cùng (được chú thích trong ví dụ trên,) khiến tệp .phps được in khá đẹp trong HTML. Có thể cấu hình Apache của bạn là các tệp .php in ấn đẹp không?
Sam Azer

5

Điều này có thể xảy ra do thiếu các mô-đun cần thiết cho php của bạn. Giả sử bạn đã cài đặt php7, hãy tìm kiếm các mô-đun php7 có sẵn bằng

sudo apt-cache search php7-*

Lệnh trên sẽ liệt kê tất cả các mô-đun PHP7 có sẵn để cài đặt. Bạn có thể bắt đầu cài đặt các mô-đun như,

sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json

4

Nếu .htaccess của bạn có bất kỳ điều gì giống như thế này ... Ứng dụng AddHandler / x-httpd-php53 .php .php5 .php4 .php3 thì hãy nhận xét và thử làm mới lại điều này đã làm việc cho tôi ...


3

Tôi có cùng một vấn đề. Apache không tải các tệp php từ một trang web nhất định mà chỉ cần tải xuống. Tôi đã đọc bài đăng này và các câu trả lời và tôi thấy rằng tôi đã đưa dòng này vào vị trí cuối cùng của tệp .htaccess:

AddHandler x-mapp-php5.5  .php

Tôi đã nhận xét nó và mọi thứ hoạt động tốt.

Cảm ơn tất cả !!!


2

Trước đây tôi đã gặp sự cố tương tự sau khi nâng cấp từ 5.3 lên 5.4. Nhưng thiết lập của tôi trông hơi khác một chút vì tôi đang chạy Debian và sử dụng fcgid để làm máy chủ các trang PHP chứ không phải mô-đun apache / cgi PHP5. Vì vậy, sau khi tôi nâng cấp, nó cũng đã cài đặt php5_cgi, điều này đã va chạm với thiết lập fcgid của tôi và sẽ không thực thi các tệp PHP nữa.

Tôi đã phải vô hiệu hóa Mô-đun Apache và khởi động lại Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

Khi mô-đun php5_cgi không hoạt động, fcgid có thể phục vụ lại các trang PHP.


Aww yeah, tên khốn cgi xảo quyệt này ^^ Đã giải quyết vấn đề của tôi sau khi cập nhật php từ 5.3 lên 5.4 từ dotdeb.
Emii Khaos

2

Tôi gặp các triệu chứng tương tự, nhưng một giải pháp khác: trong /etc/apache2/mods-enabled/php5.conf, có một lời khuyên hữu ích trong nhận xét mà tôi đã làm theo:

# 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.

2

Trong trường hợp ai đó đang sử dụng php7 trong môi trường Linux

Đảm bảo rằng bạn bật php7

sudo a2enmod php7

Khởi động lại dịch vụ mysql và Apache

sudo systemctl restart mysql
sudo systemctl restart apache2

2

Sau khi cập nhật PHP lên 7.3, các tập lệnh PHP chạy với www-data thay vì $ USER như trước đây.

Tôi cần cài đặt lại và kích hoạt PHP-FPM:

sudo apt-get install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo service apache2 restart
sudo a2enconf php7.3-fpm
sudo service apache2 restart

Để đảm bảo mọi thứ đều ổn cho Virtualmin , tôi đã sử dụng trình hướng dẫn Kiểm tra lại cấu hình/virtual-server/check.cgi , trong Vitualmin / Cài đặt hệ thống .

Sau đó, Apache / PHP đã tải xuống các tệp php thay vì chạy chúng. Vì vậy, tôi cần phải chỉnh sửa /etc/apache2/mods-available/php7.3.confđể nhận xét hàng SetHandler application/x-httpd-phpnhư dưới đây:

<FilesMatch ".+\.ph(ar|p|tml)$">
#    SetHandler application/x-httpd-php
</FilesMatch>

Sau khi khởi động lại Apache, nó đã giải quyết được sự cố của tôi, hy vọng điều này sẽ giúp ích cho bạn.

Chăm sóc cả bộ nhớ cache của trình duyệt.

Hệ thống của tôi:

Ubuntu          16.04.6 LTS
Webmin version      1.932
Usermin version     1.780
Virtualmin version  6.08
Apache version      2.4.41
PHP versions        7.3.12
PHP-FPM         7.3.12 Server

1

Tôi đã dành hai ngày để theo dõi điều này và phát hiện ra rằng tôi đã đặt các tập lệnh PHP của mình vào sai thư mục.

Trên bản cài đặt Ubuntu tiêu chuẩn của mình, tôi đã đưa các tập lệnh vào /var/www. Đáng lẽ họ phải vào /var/www/html.

Tôi mới bắt đầu làm việc với PHP, vì vậy tôi không biết giải pháp của mình có liên quan đến việc thay đổi phiên bản mà bạn đã trải qua hay không.


1

điều này đã giải quyết vấn đề cho tôi (tôi đã cài đặt php7):

sudo apt-get install libapache2-mod-php7.0

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


1

Tôi đã có vấn đề này. Hóa ra là tôi đã cài đặt cả nginx và apache và tự động khởi động khi khởi động. Vấn đề là nginx đã liên kết với cổng http trước, điều này đã ngăn không cho apache khởi động.


1

Cũng có thể bạn có nginx đang chạy nhưng php của bạn được thiết lập để chạy với apache. Để xác minh, hãy chạy service nginx statusservice apache2 statusđể xem cái nào đang chạy. Trong trường hợp nginx đang chạy còn apache thì không, chỉ cần chạy sudo service nginx stop; sudo service apache2 startvà máy chủ của bạn bây giờ sẽ phục vụ các tệp php như mong đợi.


1

Ok ... Tôi biết rằng đã có 1.000.000 câu trả lời cho câu hỏi này, - nhưng tôi đã dành ít nhất 6 giờ hiệu quả để tìm ra câu trả lời này; và tôi đã truy cập vào nó hàng trăm lần và không tìm thấy một bài đăng nào về nó. Vì vậy, tôi nghĩ rằng tôi sẽ thêm giải pháp cho vấn đề của mình ở đây.

Kết luận

Nếu tôi nhận xét hai dòng này trong tệp .conf của tôi trong /etc/apache2/[[SERVER-NAME].conf-tệp:

php_admin_value engine Off
IPCComTimeout 31

Tôi không biết họ làm gì hoặc bằng cách nào họ đến đó, nhưng điều đó nằm trong mỗi .conf-files của tôi . Và nếu tôi xóa những dòng đó và đảm bảo rằng có một liên kết tượng trưng trong- /etc/apache2/sites-enabled/thư mục, thì nó sẽ không tải xuống index.php - và mọi thứ đều hoạt động như bình thường.

Toàn bộ câu chuyện

Tôi đã cài đặt VirtualMin trên VPS Ubuntu 16.04. Tôi đã nâng cấp lên phiên bản PHP 7.2. Ngay sau đó, tôi đã cập nhật phiên bản Ubuntu và gặp lỗi 'Kernel Offset: Disabled'. Vì vậy, tôi phải xóa phiên bản Ubuntu mới nhất - và khi hệ điều hành của tôi khởi động lại: BOOM! Tôi đã gặp lỗi mà bài đăng của anh ấy nói về: Đối với mọi trang web trên VPS của tôi, nó chỉ cần tải xuống index.php thay vì hiển thị nó.

Tôi đã thử tất cả các loại:

  • Đã xóa PHP7.2 và cài đặt PHP5.6 (bây giờ tôi biết, phiên bản PHP không liên quan gì đến nó; đó là cấu hình apache cần hoạt động).
  • Đã thử bật và tắt các mô-đun apache, trên bản cài đặt hiện có, nhưng không thành công.
  • Sau đó, tôi đã gỡ bỏ hoàn toàn apache và cài đặt lại nó, vấn đề sau đó vẫn ở đó!
  • Đã thử chơi với thiết lập Máy chủ Virutal trong VirtualMin (Webmin >> Máy chủ >> Máy chủ web Apache).
  • Đã kiểm tra cấu hình trên một máy chủ ảo (Virtualmin >> Cài đặt hệ thống >> Kiểm tra lại cấu hình) ... Bước này khá hay, vì nó cho biết mô-đun nào trong Apache bị thiếu; ở đâu-sau khi tôi có thể kích hoạt nó với a2enmod [MODULE_NAME]. Và tôi đã tìm thấy tên mô-đun bằng cách sử dụng Google. Tôi đã phải kích hoạt khoảng 6-8 mô-đun, trước khi tôi vượt qua bước đó trong quá trình xác thực - và phải mất vài phút trước khi bộ nhớ cache hết, - vì vậy thực hiện điều này là một bước tẻ nhạt.
  • Và cuối cùng, tôi đã tìm ra kết luận được viết ở trên - cùng với các liên kết tượng trưng - và sau đó tôi bắt đầu làm việc. Tuy nhiên, tôi đã phải xem qua nó cho mọi trang web trên VPS của mình.

0

Tôi đã gặp sự cố tương tự với OP khi nâng cấp php5 từ phiên bản cũ hơn lên 5.5.9, là phiên bản được cài đặt với Mint 17.

Tôi đang chạy thiết lập LAMP trên một máy trong mạng cục bộ của mình, tôi sử dụng thiết lập này để xem trước các thay đổi đối với trang web trước khi tải những thay đổi đó lên máy chủ trực tiếp thực tế. Vì vậy, tôi duy trì một bản sao địa phương hoàn hảo của trang web thực tế.

Sau khi nâng cấp, các tệp chạy và hiển thị hoàn hảo trên trang web thực tế sẽ không hiển thị hoặc chỉ hiển thị html trên máy cục bộ. PHP không được phân tích cú pháp. Lệnh phpinfo () đã hoạt động, vì vậy tôi biết php đang hoạt động. Nhật ký không tạo ra lỗi. Xem nguồn trang cho tôi thấy mã php thực tế.

Tôi đã tạo một trang test.php chứa đoạn mã sau:

<?php phpinfo(); ?>

Điều này đã hiệu quả. Sau đó, tôi phát hiện ra khi tôi thay đổi <?phpsang <?lệnh không còn hoạt động. Tất cả các trang web php của tôi sử dụng <?thay thế <?phpcó thể không lý tưởng, nhưng đó là thực tế. Tôi đã khắc phục sự cố bằng cách truy cập / etc / php5 / apache2, tìm kiếm "short_open_tag" và thay đổi giá trị từ Tắt thành Bật.


0

Nếu không có cách nào ở trên hoạt động,

thử bình luận ra dòng

SetHandler ....

và khởi động lại apache bằng

/etc/init.d/httpd restart

Nó sẽ hoạt động!


0

PHP56

vim /etc/httpd/conf/httpd.conf

LoadModule php5_module        libexec/apache/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

0

Tôi có loại vấn đề này. Đây là cách tôi giải quyết nó. Sau khi cài đặt Apache, tôi đã cài đặt PHP bằng lệnh này.

sudo apt-get install php libapache2-mod-php

nó thực thi chính xác nhưng tôi yêu cầu tệp .php từ Apache, nó cung cấp mà không thực thi tập lệnh PHP .

Sau đó, tôi kiểm tra PHP được kích hoạt.

$ cd /etc/apache2
$ ls -l mods-*/*php*

nhưng nó không hiển thị bất kỳ kết quả. Tôi kiểm tra các gói PHP đã cài đặt.

$ dpkg -l | grep php| awk '{print $2}' |tr "\n" " "

Các loại phiên bản PHP khác nhau được cài đặt vào máy tính của tôi. Sau đó, tôi xóa một số gói PHP khỏi danh sách trước đó của mình bằng cách sử dụng apt-get purge .

sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json

Tôi cài đặt lại PHP

sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

Xác minh rằng mô-đun PHP đã được tải

$ a2query -m php7.0

nếu không được bật với:

$ sudo a2enmod php7.0

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

$ sudo systemctl restart apache2

Cuối cùng, tôi kiểm tra quy trình PHP trên Apache

tạo một tệp trống

sudo vim /var/www/html/info.php

Thêm nội dung này vào info.php và lưu.

<?php
  phpinfo();
?>

Kiểm tra trên trình duyệt:

http: //localhost/info.php

nó hiển thị chính xác. Tôi nghĩ điều này sẽ giúp ích cho bất kỳ ai.


0

Tôi có vấn đề này và nếu bạn thực sự không bao giờ chơi với các thiết lập cấu hình máy chủ của bạn, sau đó vấn đề của bạn là 90% trong bạn .htaccess tập tin

Bạn có thể sửa đổi tệp .htaccess ĐỊA ĐIỂM, xóa nó (ĐỊA ĐIỂM)


0

Nếu bạn có virtualmin, hãy cố gắng bình luận những dòng này trong cấu hình apache của bạn trong / etc / apache2 / sites-available

  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off

0

Khi tôi nâng cấp từ PHP 7.2 lên PHP 7.4, tôi cũng gặp vấn đề tương tự. Làm việc theo cách sau: -

  1. Trong [domain].conf file , đã nhận xét như sau:

    php_admin_value engine Tắt

Và thêm:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Tắt mod 7.2 và bật 7.4 bằng cách sau:

    a2dismod php7.2
    a2enmod php7.4

  2. Trong /etc/apache2/mods-enabled/php7.4.conf tệp, nhận xét sau:

    Ứng dụng SetHandler / x-httpd-php
    php_admin_flag engine Tắt


0

Đối với những người đã tìm thấy bài đăng này từ Google gần 6 năm trong tương lai (và hơn thế nữa!), Bạn có thể gặp sự cố này với Apache 2 và PHP 7 trong khi cũng sử dụng UserDir mô-đun.

Một nguyên nhân có thể khác của sự cố này có thể là bạn đang cố chạy tập lệnh trong "thư mục người dùng" từ UserDirmô-đun. Chạy các tập lệnh PHP trong thư mục người dùng bị tắt theo mặc định. Bạn sẽ gặp phải sự cố này nếu tập lệnh nằm trong public_htmlthư mục trong thư mục chính của bạn và bạn đang cố gắng truy cập từ đó http://localhost/~your_username.

Để khắc phục điều này, hãy mở ra /etc/apache2/mods-enabled/php7.2.conf. Bạn phải nhận xét hoặc xóa khối thẻ ở dưới cùng có nội dung

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

-1

Nếu .htaccess của bạn có bất cứ điều gì như thế này

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
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.