使用 PHP 的网络服务器如何异步解析文件


How does a webserver using PHP resolve files asynchronously?

我知道,如果我们使用像nodejs这样的异步网络服务器,我们有API调用来异步检索文件而不锁定文件。PHP 如何处理这个问题?例如,如果同时有 1000 个请求传入,fopen不会锁定文件吗?

当有一个 HTTP 请求并且响应将是一个文件时,
不应使用 fopen()fread() 检索文件。

即使 fopen 和 fread 不会阻止对文件的多次访问,最好使用单个命令来完成:

简单和文件打开时间最短

示例 1(固定文件名)

<?php 
readfile('/home/user/file_to_read');
?> 

示例 2(传递的文件名

<?php 
readfile($_POST['filename']);
?> 

这会读取文件并将其回显给调用方。 它也是二进制安全的。

如果文件仅包含字符串数据,则可以使用 file_get_contents()。

<?php 
echo file_get_contents($_POST['filename']);
?>
fopen()

文件加载到内存中,从而允许其他请求也对其进行修改。

您混淆了它被锁定到流程中。 fopen()会阻止其他进程打开该文件。