PHP请求太长了

时间:2013-12-23 09:24:13

标签: php mysql mysqli request

我是phpSQL的新手。

我有一个包含45 000行的数据库,我需要提取所有'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). " ---"); 

如何解决此问题,以便我的请求完成?

1 个答案:

答案 0 :(得分:0)

我一点也不惊讶你得到超时错误,你做得非常低效。

据说我使用php的一个技巧是刷新输出缓冲区:How to flush output after each `echo` call?

如果在每个echo之后刷新输出缓冲区,那么它将为浏览器提供一些数据并阻止它超时。

我说它效率低下的原因是因为你通常希望用SQL做尽可能多的“工作” - 像唯一性,排序顺序等事情应该在SQL而不是PHP中尽可能地完成,因为SQL是为它