2012-09-10 110 views
0

我有功能build_additional_docs调用另一个功能,做很少的行动,但首先它调用函数read_all_file,它将文件提取到字符串变量并返回它。php fgets功能卡住服务器

当功能create_file_node被另一个函数调用时,它的工作很完美。

,但是当它从build_additional_docs调用,客户端等待服务器,直到超时...... 我认为功能上fgets()失败。

附加注释:当我打电话功能create_file_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); 
} 
+0

使用set_time_limit(0)增加执行 – shail

+0

如果你有太多的文件,php timelimit不够(不能总是用'set_time_limit()'增加),你可以建立一个包含你的文件路径的数组想要扫描,将其写入会话变量并逐个执行。每隔30秒左右(取决于时间限制),您可以重定向到同一页面,并从会话变量中执行下一批文件。通过这种方式,您甚至可以显示各种进度条,并且用户在等待时知道发生了什么。 –

+0

顺便说一句,你的函数'read_all_file()'似乎是重新实现的PHP函数'file_get_contents' –

回答

1

发现错误! $ addDocsArr变量是从explode()函数返回的值,用于将字符串拆分为分离的文件名。返回的数组包括与空间字符不能看到... 文件名的字符串,这样当我添加代码: $fileName = $dir_name . '\\' . substr($doc, 0,strlen($doc) - 1);

的代码工作。