php fgets函数卡在服务器上
我有一个函数php fgets函数卡在服务器上,php,Php,我有一个函数build_-additional_-docs,它调用另一个只执行很少操作的函数,但首先是调用函数read_-all_-file,它将文件提取到字符串变量并返回它 当从另一个函数调用函数create\u file\u node时,它工作得非常好 但是,当从构建附加文档调用它时,客户端将等待服务器直到超时。。。 我认为函数在fgets()上失败 附加注释:当我使用相同的文件调用函数create\u file\u node时,不同的是文件名是静态字符串,我没有foreach循环,代码再次
build_-additional_-docs
,它调用另一个只执行很少操作的函数,但首先是调用函数read_-all_-file
,它将文件提取到字符串变量并返回它
当从另一个函数调用函数create\u file\u node
时,它工作得非常好
但是,当从构建附加文档调用它时,客户端将等待服务器直到超时。。。
我认为函数在fgets()
上失败
附加注释:当我使用相同的文件调用函数create\u file\u node
时,不同的是文件名是静态字符串,我没有foreach循环,代码再次工作
这是我的密码:
function build_additional_docs($dir_name, $addDocsArr){
foreach ($addDocsArr as $doc) {
if($summery != ''){
$fileName = $dir_name . '\\' . $doc;
create_file_node($fileName);
}
}
function create_file_node($fileName){ global $base_url;
try{
$text = read_all_file($fileName);
}
catch (Exception $ex){
// some message here
}
return 0;
}
function read_all_file($file_name){
$file_handle = fopen($file_name, "r");
while (!feof($file_handle)) {
$line[] = fgets($file_handle);
}
fclose($file_handle);
return implode('',$line);
}
发现了错误!
$addDocsArr变量是explode()函数的返回值,用于将字符串拆分为单独的文件名。返回的数组包含无法看到的带有空间字符的文件名字符串。。。
因此,当我添加代码时:
$fileName=$dir\u name.\\”。substr($doc,0,strlen($doc)-1)代码>
代码运行正常。使用set\u time\u limit(0)提高执行率如果文件太多,php时间限制不够(不能总是使用set\u time\u limit()
)提高执行率。您可以使用要扫描的文件路径构建一个数组,将其写入会话变量,然后逐个执行。每隔30秒左右(取决于时间限制),您可以重定向到同一页面,并从会话变量执行下一批文件。通过这种方式,你甚至可以显示一个排序的进度条,用户在等待时知道发生了什么。顺便说一句,你的函数read\u all\u file()
似乎是php函数file\u get\u contents
的重新实现,我认为这与时间限制无关。当我使用foreach循环中的两个调用调用create_file_node时,操作成功。但是,当我从foreach循环调用创建_file_节点时,使用的文件非常相同,操作失败。。。只有两个文件。一个几乎是空的,一个有一些内容。我甚至尝试使用其他文件,但都不起作用…当我从另一个函数调用创建_node_file()时,使用更大的文件,大约49个文件使用嵌套文件夹,使用while循环,甚至使用某些请求,操作成功。。。