如果我使用相对路径作为参数,是否有任何性能优势file_get_contents()
?
file_get_contents("../../mypage.php");
v/s
file_get_contents("http://.../mypage.php");
内部如何file_get_contents()
处理?
如果我使用相对路径作为参数,是否有任何性能优势file_get_contents()
?
file_get_contents("../../mypage.php");
v/s
file_get_contents("http://.../mypage.php");
内部如何file_get_contents()
处理?
使用本地文件和远程文件肯定会有明显的性能差异——即使“远程”文件在您的本地服务器上。
当您使用诸如 的本地/相对文件时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上的手册
如果有性能优势,它不依赖于php引擎。路径由您查询的 Web 服务器处理。
但是在这种情况下,在第一种情况下会有性能优势,因为您从本地 fs 获取文件,而在第二种情况下,您必须通过整个网络堆栈(http/tcp/ip)才能获得响应. 同样,第一种情况将返回 php 源代码,第二种情况 - 由 php 引擎处理的网页。
一个更清晰的例子:
file_get_contents('../../somefile.ext');
和
file_get_contents('/home/user/somefile.ext');
将同样快。