2013-12-23 93 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

我一点都不感到惊讶,你得到一个超时错误,你做的事情效率非常低。

话虽这么说,一招我用PHP中使用是刷新输出缓冲区:如果您刷新输出缓冲区后,每个回波那么它将给浏览器的一些数据和超时停止How to flush output after each `echo` call?

我之所以说效率低下的原因是因为您通常希望尽可能多地使用SQL来完成“工作” - 唯一性,排序顺序等应尽可能使用SQL而不是PHP来完成,因为SQL是建立的为了它。

+0

非常感谢FaddishWorn,是的,我知道这不是有效的,但它是我的第一个,我很匆忙。谢谢你的建议,我会试一试。 –