2012-07-16 72 views
3

如果我在file_get_contents()中使用相对路径作为参数,是否有任何性能优势?性能:file_get_contents(),相对和绝对URL

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

V/S

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

如何file_get_contents()内部处理?

+1

有多少包括位于内路径您的应用程序和文件手动这要看情况。但可能不是......最可能的是微型优化。 – 2012-07-16 12:46:33

+0

你的两个例子展示了两种不同的包装 - 第一种是本地文件系统,第二种是HTTP。 – nickb 2012-07-16 12:47:44

+1

肯定会得到处理的PHP和其他不会?我的意思是一个会被解析,另一个则不会。 – Pete 2012-07-16 12:48:00

回答

4

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

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

更明确的例子:

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

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

将是同样快。

5

即使“远程”文件位于本地服务器上,使用本地文件和远程文件的性能差别肯定会很大。

当您使用本地/相对文件(如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()fread()的循环,然后以fclose()关闭。然后,它返回一个包含文件中所有内容的字符串。基本上,它提供了一个非常友好的“从文件读取”界面。

要了解更多有关该方法的,你可以检查出在php.net/manual/en/function.file-get-contents.php