我有一個使用錯誤邏輯的全文搜索代碼,否則它將無法理解PHP的工作方式。首先,我有一個相當長的叫做* file_find *的函數,它返回一個數組。我有一個名爲文件的數組* all_files *中,我通過跑步步*的File_Find *每個,像這樣:PHP在前代函數完成之前繼續執行代碼
$allftsearch_results = array();
for ($i = 0; $i <= count($all_files); $i++) {
$current_file = $all_files[$i];
//Run one file
if (file_exists($current_file)) {
$search_result = file_find($current_file, $phpfilenames[$i], $num_ands, $keywords_core, $keywords_boolean, $phpfilenames, $ascii_limit);
//Add file results to allftsearch_results array
if (!empty($search_result)) {
foreach ($search_result as $keyfilename => $invpagevalue) {
array_push($allftsearch_results, $keyfilename);
}
}
}
}
如果我打印出$ current_file因爲它發送到*的File_Find *,它反映的是爲了它應該是:A的,然後是B的,然後是C的等等。但是當我在結果返回後打印出$ keyfilename時,它們落後於實際提供給函數的文件。我最終是這樣的:
- 當前文件:burnham.html
- 當前文件:burroughs.html
- 當前文件:burton.html
- 當前文件:busch.html
- 當前文件:busoni.html
- 當前文件:butler.html
- 返回的文件:阿爾比
- 當前文件:byrd.html
- 當前文件:byrnes.html
- 當前文件:byron.html
- 返回的文件: albeville 等
這一切都在同一如果file_exists語句,所以在* file_find *完成之前,代碼甚至不應該到達if foreach($ search_result ...)。但顯然它在後臺運行,並在其他幾個文件發送並堆疊後返回結果。如果我一次打印所有結果,這不會成爲問題,但我有AJAX一次發送100個批次的文件,並且它會將結果全部不按順序返回,A會在B之後進來並且結果會重複當他們不應該。
如何確保它等待代碼繼續執行,直到* file_find *完成?
這並不是在後臺運行`find_file`的問題。 PHP不會也不能在單獨的線程中意外地運行一些函數,即使它不會以某種方式將結果追溯地合併到函數的初始返回值中。你的算法在某種程度上被打破了,認爲很難從樣本代碼中知道如何。 `file_find`到底做了什麼?偶然修改'$ all_files`嗎? – meagar 2011-01-31 19:49:04