2012-09-10 49 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);

的代碼工作。