如何将上传的php文件显示为纯文本而不是在wordpress中执行?

scr*_*apy 7 php wordpress file-upload

编辑testme.php/ tmp中的文件.

<?php
echo  "test";
?>
Run Code Online (Sandbox Code Playgroud)

编辑一个标题为" test上传文件"的新帖子/tmp/testme.php,并使用网址将其发布http://home.local/wp/?p=4785.
在此输入图像描述

我想看看testme中的内容,点击它,在wordpress中弹出新窗口. 在此输入图像描述

继续点击它.test在网页中显示.

我的期望:1.
只需点击testme测试帖一次.
2.显示testme.php 纯文本,

<?php
echo  "test";
?>
Run Code Online (Sandbox Code Playgroud)

而不是执行的结果testme.php.

test
Run Code Online (Sandbox Code Playgroud)

我根据一些材料进行配置show php file as plain text in apache.

sudo vim /etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    ServerName www.home.local
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
        <Directory /var/www/html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            allow from all
            php_flag engine off
            AddType text/plain php
        </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

重启apache2(在debian中构建).

sudo systemctl restart apache2
Run Code Online (Sandbox Code Playgroud)

要打开帖子http://home.local/wp/?p=4785,我在网页上得到以下输出:

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
Run Code Online (Sandbox Code Playgroud)

Sal*_* CJ 3

您已经有了正确的代码 - AddType text/plain php,这将使 Apache 将 PHP 文件(或名称以 结尾的文件.php)视为纯文本文件。

但假设以下情况:

  • 您已将 WordPress 安装在该/var/www/html目录中。

  • PHP 文件上传到uploadsWordPress 中的默认文件夹 ( wp-content/uploads)。

如果您将目录设置为/var/www/html/wp-content/uploads

<Directory /var/www/html/wp-content/uploads>
  AddType text/plain php
</Directory>
Run Code Online (Sandbox Code Playgroud)

您将得到您想要的结果 - 只有该uploads文件夹中的 PHP 文件才会被视为纯文本文件,而不是该目录中的所有 PHP 文件/var/www/html这解释了“要打开帖子http://home.local/wp/?p=4785,我得到以下输出”的问题,其中该输出是文件中的代码/var/www/html/index.php。我的意思是,您使用了<Directory /var/www/html>,这使得 Apache 将index.php文件视为纯文本文件,而不是执行文件中的 PHP 代码。

替代方法:使用该.htaccess文件。

特别是如果您无法编辑或无法访问 Apache 的配置 ( .conf) 文件。

  1. 如果该文件夹尚不存在,请.htaccess在该文件夹中创建。uploads

  2. 然后添加AddType text/plain php到该文件中。

补充笔记

我想看里面的内容testme.php,点击它,弹出新窗口

我确信您可以做到这一点,或者已经有了代码/解决方案,但一个简单的方法就是添加target="_blank"到附件/文件链接。或者使用 JavaScript,您可以使用window.open().

并且您必须采取全面的安全措施,因为允许人们上传 PHP 文件可能会损害您的网站和/或网站用户。