如果我使用相对路径作为参数,是否有任何性能优势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()和循环fread(),然后关闭fclose().然后,它返回文件中找到的所有内容的字符串.基本上,它提供了更友好的"从文件读取"界面.
要了解有关该方法的更多信息,可以访问php.net/manual/en/function.file-get-contents.php查看手册.
如果有性能优势,不依赖php引擎。路径由您查询的 Web 服务器处理。
但是在这种情况下,在第一种情况下会有性能优势,因为您从本地 fs 获取文件,而在第二种情况下,您必须通过整个网络堆栈(http/tcp/ip)才能获得响应. 第一种情况将返回 php 源代码,第二种情况将返回一个网页,由 php 引擎处理。
一个更清晰的例子:
file_get_contents('../../somefile.ext');
Run Code Online (Sandbox Code Playgroud)
和
file_get_contents('/home/user/somefile.ext');
Run Code Online (Sandbox Code Playgroud)
将同样快。