4

如果我使用相对路径作为参数,是否有任何性能优势file_get_contents()

file_get_contents("../../mypage.php");

v/s

file_get_contents("http://.../mypage.php");

内部如何file_get_contents()处理?

4

2 回答 2

6

使用本地文件和远程文件肯定会有明显的性能差异——即使“远程”文件在您的本地服务器上。

当您使用诸如 的本地/相对文件时file_get_contents("../../mypage.php");,它会直接加载到服务器上,无需使用网络流量。对于远程负载,例如file_get_contents("http://localhost/mypage.php");file_get_contents("http://example.org/mypage.php");,建立到远程主机的连接(即使是“本地”)。此外,本地读取将导致函数准确返回文件中的内容;远程读取将导致远程主机在返回之前呈现内容(如果是 PHP)。

默认情况下,本地/相对文件的性能会比远程文件快。尝试从连接速度较慢的网络加载远程文件时,可以看到最大的显着性能优势。

的内部实现file_get_contents()类似于您编写fopen()一个循环 for fread(),然后用fclose(). 然后,它返回文件中所有内容的字符串。基本上,它提供了一个更友好的“从文件中读取”界面。

要阅读有关该方法的更多信息,您可以查看php.net/manual/en/function.file-get-contents.php上的手册

于 2012-07-16T12:53:49.843 回答
5

如果有性能优势,它不依赖于php引擎。路径由您查询的 Web 服务器处理。

但是在这种情况下,在第一种情况下会有性能优势,因为您从本地 fs 获取文件,而在第二种情况下,您必须通过整个网络堆栈(http/tcp/ip)才能获得响应. 同样,第一种情况将返回 php 源代码,第二种情况 - 由 php 引擎处理的网页。

一个更清晰的例子:

file_get_contents('../../somefile.ext');

file_get_contents('/home/user/somefile.ext');

将同样快。

于 2012-07-16T12:51:14.753 回答