Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php fgets函数卡在服务器上_Php - Fatal编程技术网

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循环,甚至使用某些请求,操作成功。。。