2013-12-23 3 views
0

저는 phpSQL을 처음 사용합니다.PHP 요청이 너무 깁니다.

45000 행의 데이터베이스가 있는데, 나는 'udid'속성을 모두 추출해야하므로 많은 데이터가 필요합니다. 각 우udid에 대해 결과를 배열에 넣습니다. 파일이 존재하고 일부 데이터를 검색 한 다음 배열을 재정렬하면 udid.xml이 있는지 확인합니다.이 프로세스에서는 시간 초과 오류가 발생합니다. 내 스크립트 또는 내 인터넷 공급자의 504 오류를 호출합니다. 여기

내 PHP 코드입니다 :

include("myFunctions.php"); 

header('Content-type: application/json; charset=utf-8'); 

$handle = fopen('php://input','r'); 

// ---------- 

set_time_limit (0); 

$req_Push = $db->sql_query("SELECT * FROM utilisateurs"); 

echo("COUNT = " .$db->sql_numrows($req_Push). ""); 

$arrayBigTbl = array(); 

while ($row_Push = $db->sql_fetchrow($req_Push)){ // while udid ref fichier utilisateurs 

    $idUser = $row_Push['udid']; 

    $arrayBigTbl []= $idUser; 
} 

//print_r($arrayBigTbl); 

echo("</br>Count array global = " .count($arrayBigTbl). "--"); 

$arrayBigTbl = array_unique($arrayBigTbl); 

echo("</br>Count array global nettoyée = " .count($arrayBigTbl). " -- Fin2"); 

$arrayXMLDevice = array(); 


for ($i = 0; $i < count($arrayBigTbl) ; $i++) 
{ 
    if (deviceXMLExist($arrayBigTbl[$i])) 
    { 
      $UDIDFile = simplexml_load_file("./UDID/".$arrayBigTbl[$i].".xml");    
      foreach($UDIDFile->UDID as $item) 
      { 
       $valueTemp = $item->valueUDID; 
       $strig = "" .$valueTemp. ""; 
       $arrayXMLDevice[] = $strig; 
      } 
    } 
} 

//print_r($arrayXMLDevice); 
echo("COUNT ARRAY DEVICE XML = " .count($arrayXMLDevice). " --- Fin 3"); 

$arrayXMLDevice = array_unique($arrayXMLDevice); 

echo("COUNT ARRAY DEVICE XML = " .count($arrayXMLDevice). " --- Fin 3"); 

$arrayXMLDevice = array_values($arrayXMLDevice); 

$arraymerge = array_merge ( $arrayBigTbl,$arrayXMLDevice); 
echo("COUNT ARRAY MERGE = " .count($arraymerge). " --- </br>"); 

$arraymerge = array_unique($arraymerge); 

echo("COUNT ARRAY MERGE NETTOYEE = " .count($arraymerge). " --- Fin 3"); 

$arrayFinalPush = array(); 

for ($i = 0; i < count($arraymerge);$i=$i+1) 
{ 
    $aValue = $arraymerge[i]; 

    if(ctype_xdigit($deviceToken) && strlen($deviceToken)>60) 
    { 
     $arrayFinalPush[] = $aValue; 
    } 
} 

echo("COUNT ARRAY FINAL = " .count($arrayFinalPush). " ---"); 
내 요청이 완료됩니다 있도록

어떻게이 문제를 해결할 수 있습니까?

+0

이 줄의'$ strig = "". $ valueTemp. ";". 이게 뭐야? 나는 최근에 이런 종류의 일을보고 있었고 왜 이것이 이루어 졌는지 이해하지 못합니다. 문자열에 캐스팅하는 것이 어렵다고 생각할 것입니다 :'$ strig = (string) $ valueTemp; ' – hanzo2001

+0

아니요,하지만 저는 PHP에 익숙하지 않습니다, 팁을 주셔서 감사합니다. –

답변

0

매우 비효율적으로 일을하고있는 시간 초과 오류가 발생하는 것이 전혀 놀랍지 않습니다. 각각 다음 브라우저를 일부 데이터를주고 시간이 초과에서 중지됩니다 에코 후 출력 버퍼를 플래시하는 경우 How to flush output after each `echo` call?

:

내가 PHP를 사용하는 하나의 트릭 출력 버퍼를 플래시하는 것이라고되고있다.

내가 비효율적이라고 말하는 이유는 일반적으로 SQL로 가능한 한 "작업"을 많이하고 싶어하기 때문입니다. SQL이 내장되어 있기 때문에 독창성, 정렬 순서 등은 PHP가 아닌 SQL에서 가능해야합니다. 그것을 위해.

+0

대단히 고맙습니다 FaddishWorn, 그렇지 않으면 효율적이지는 않지만 내 첫 번째이며 서둘러 요. 조언을 주셔서 감사드립니다. –