오류가있는 논리를 사용하는 전체 텍스트 검색 코드가 있거나 그렇지 않으면 PHP가 작동하는 방식을 무시합니다. 첫째, 배열을 반환하는 * file_find *라는 다소 긴 함수가 있습니다. 나는라는 파일의 배열을 가지고 * all_files 내가 실행 단계별 것을 * * file_find * 각, 다음과 같이 :이전 함수가 완료되기 전에 코드에서 PHP가 계속됨
이 * file_find의 *에 보낸 것 같이 내가 $의 current_file을 인쇄 할 경우$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);
}
}
}
}
, 그것은 순서를 반영하는 것이 다음과 같이해야합니다 : 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 *가 끝날 때까지 foreach ($ search_result ...)에 도달하지 않아야합니다. 하지만 분명히 다른 여러 파일을 보낸 후 결과를 반환하고 백그라운드에서 실행 중입니다. 한 번에 모든 결과를 인쇄하는 것이 문제가되지는 않지만 한 번에 100 개의 파일을 전송하는 AJAX가 있고 결과가 모두 잘못되어 B가 나오고 결과가 반복되는 경우 그들이해서는 안되는 때.
* file_find *가 완료 될 때까지 코드를 계속 진행하려면 어떻게해야합니까?
이것은 백그라운드에서 실행중인'find_file '에 문제가되지 않습니다. PHP는 의도하지 않게 일부 함수를 별도의 스레드에서 실행하지 않으며 실수로 함수의 초기 반환 값에 결과를 병합하지 않습니다.알고리즘이 어떤 식 으로든 손상되었으므로 샘플 코드와 구별하기가 어렵다고 생각했습니다. 'file_find'는 정확히 무엇을합니까? 우연히'$ all_files'를 수정합니까? – meagar
'$ all_files' 배열을 생성하기 위해 당신은 무엇을하고'find_file()'함수의 소스는 무엇입니까? – KyleWpppd