2

我正在尝试使用 php 来读取单独的 php 文件的源代码。我正在尝试以下列方式使用 file_get_contents

file_get_contents('http://www.example.com/someFile.php');

不幸的是,上面的代码试图执行 php 代码,而不是像读取任何其他文件那样仅仅读取文本。

我遇到了一篇似乎可以解决该问题的文章,这使我得到了以下代码:

file_get_contents('php://filter/convert.base64-encode/resource=http://www.example.com/someFile.php');

但是,此代码具有相同的效果;它尝试执行 php 代码。

如何在不尝试执行文件中的 php 的情况下使用 php 读取另一个 php 文件的源代码?

4

6 回答 6

1

如果远程服务器没有“按原样”为您提供 php 文件的来源,您将永远无法自己获得它。远程服务器将始终(当然,配置错误的情况除外)为其运行 php 引擎并返回脚本的输出。想象一下,如果您能够获得任何远程 php 文件的源代码会发生什么。

于 2012-03-01T00:21:06.177 回答
1

不幸的是,上面的代码试图执行 php 代码,而不是像读取任何其他文件那样仅仅读取文本。

不,它没有。

这里发生的是对file_get_contents发出常规 HTTP 请求http://www.example.com/someFile.php,并且“example.com”上的远程服务器正在解释 PHP 代码。它提供的结果与您在浏览器中导航到的完全一样http://www.example.com/someFile.php。您的脚本正在下载该输出。

file_get_contents在检索文件后,绝对不会执行文件的内容。您的脚本对“someFile.php”的唯一访问权限是远程服务器愿意提供的服务;file_get_contents无法以某种方式获取底层 PHP 源代码,就像您使用浏览器以某种方式查看 PHP 源代码一样。

于 2012-03-01T00:21:52.843 回答
1

如前所述,如果您尝试通过 http url 读取文件,则该请求将由该服务器上的网络服务器处理并执行 php 文件。

如果文件与您的 php 代码位于同一服务器上,请尝试使用相对或绝对文件路径,例如file_get_contents('/dir/dir/yourfile')file_get_contents('dir/file.php')

于 2012-03-01T00:24:22.820 回答
0

当您请求远程文件时,它的呈现方式取决于另一端的服务器。如果远程主机配置为在提供 PHP 文件之前执行它,您可以期望得到返回的输出。

如果您拥有另一端的服务器,您可以指示它.php在将文件发回之前不要解析文件。对于 Apache,您可能需要阅读mod_mimehttp ://httpd.apache.org/docs/2.0/mod/mod_mime.html

于 2012-03-01T00:22:43.230 回答
0

就我而言,我能够通过使用 htmlentities 读取服务器中文件的 php 源: $Filedata=file_get_contents('myfile.php'); 回声 htmlentities($Filedata);

但是这种方法不适用于远程文件。如上所述,可能取决于服务器配置(提供 php 时)。

于 2014-08-07T01:06:09.597 回答
-1

您无法使用 URL 读取 php 文件的内容,因为如果您使用的是 http://,那么它会通过您的 apache 服务器进行处理,而 apache 会给出 php 文件的输出而不是内容。如果您可以使用 http:// 读取 php 文件,那么这是一个安全问题,您也可以从其他服务器读取文件的内容。所以答案是你做不到,就这么简单!!

如果您尝试从不属于您的其他服务器访问 php 文件,那么它很简单是非法的!

于 2012-03-01T00:25:00.390 回答