2011-01-31 2 views
1

오류가있는 논리를 사용하는 전체 텍스트 검색 코드가 있거나 그렇지 않으면 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 *가 완료 될 때까지 코드를 계속 진행하려면 어떻게해야합니까?

+0

이것은 백그라운드에서 실행중인'find_file '에 문제가되지 않습니다. PHP는 의도하지 않게 일부 함수를 별도의 스레드에서 실행하지 않으며 실수로 함수의 초기 반환 값에 결과를 병합하지 않습니다.알고리즘이 어떤 식 으로든 손상되었으므로 샘플 코드와 구별하기가 어렵다고 생각했습니다. 'file_find'는 정확히 무엇을합니까? 우연히'$ all_files'를 수정합니까? – meagar

+0

'$ all_files' 배열을 생성하기 위해 당신은 무엇을하고'find_file()'함수의 소스는 무엇입니까? – KyleWpppd

답변

0

잘 모르겠지만 (file_find 함수가 무엇을하고 있는지 알지 못하기 때문에), 아마도 array_push 아래 다른 함수의 인수로 file_find 함수 ($ search_result)의 결과를 채울 수 있습니다. 이것은 기능이 정상적으로 작동하지 못하게 막을 수 있습니다.

for ($i = 0; $i <= count($all_files); $i++) { 
    $current_file = $all_files[$i]; 
    if (file_exists($current_file)) { 
     filterReturn(file_find($current_file, $phpfilenames[$i], $num_ands, $keywords_core, $keywords_boolean, $phpfilenames, $ascii_limit)); 
    } 
} 

function filterReturn($search_result){ 
    if (!empty($search_result)) { 
     foreach ($search_result as $keyfilename => $invpagevalue) { 
      array_push($allftsearch_results, $keyfilename); 
     } 
    } 
} 
0

기능이 제대로 작동하지 않을 수도 있다는 것을 알았 기 때문에 나는 어리석은 느낌이 들었습니다. 문제는 실제로 파일 이름의 두 배열이 Javascript를 통과하고 하나는 수정되었고 다른 하나는 반복적으로 전송 된 것입니다. 변경되지 않은 것은 결과를 인쇄하고 있던 것입니다.

"현재 파일 : 버틀러, 반환 된 파일 : albee"라고 말하면 albee는 수정되지 않은 배열의 값으로, 올바르게 수정 된 버틀러 값에 해당합니다.

관련 문제