性能:file_get_contents(),相对和绝对URL

时间:2012-07-16 12:44:33

标签: php

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

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

v / s

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

file_get_contents()如何在内部处理?

2 个答案:

答案 0 :(得分: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()fread()的循环类似,然后以fclose()结束。然后,它返回文件中找到的所有内容的字符串。基本上,它提供了一个更友好的“从文件读取”界面。

要了解有关该方法的更多信息,请查看php.net/manual/en/function.file-get-contents.php

上的手册

答案 1 :(得分:4)

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

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

一个更清晰的例子:

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

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

同样会很快。