estrarre migliaia di record da mysql con php errore timeout

Ciao ragazzi, per favore avrei bisogno di un aiuto. Io estraggo gli annunci con il seguente script php e poi salvo la pagina in xml come nomefeed.xml. Il problema è che devo estrarre circa 60.000 annunci (probabilmente aumenteranno a 70-80K), ma riesco ad estrarre solo 40.000 annunci inserendo LIMIT 0,40000. Se provo ad estrarre per esempio 45.000 o tutti gli annunci lo script va in time out. Premetto che ho un VPS (su Siteground) ed ho impostato il tempo di esecuzione script php a 3000 secondi, inoltre nel file .htaccess Sitegroup ha inserito il codice che riporto in basso. Lo script va in time out molto ma molto prima di 3000 secondi. Il sito è basato su Wordpress... Cosa dovrei fare? Come posso ottimizzare lo script? 

Grazie infinite!

<IfModule mod_dtimeout.c>
<Files ~ ".php">
SetEnvIf Request_URI "*.php" DynamicTimeout=3000
</Files>
</IfModule>


Lo script PHP è il seguente:

<?
set_time_limit(0);

/* dichiariamo alcune importanti variabili per collegarci al database */
$DBhost = "";
$DBuser = "";
$DBpass = "";
$DBName = "";

/* specifichiamo il nome della nostra tabella */
$table = "wp_awpcp_ads";

/* Connettiamoci al database */
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database");
mysql_query("SET CHARACTER SET utf8");

/* impostiamo la query in base alle esigenze di ricerca, WHERE disabled='0', LIMIT 0,40000 - */
$sqlquery = "SELECT * FROM $table ORDER BY ad_id DESC";
$result = mysql_query($sqlquery);
$number = mysql_numrows($result);

$i = 0;
if ($number < 1) {

    print "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";

}else{
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<jobs>\n";
    while ($number > $i) {
    $id = mysql_result($result,$i,'ad_id');
    $title = stripslashes(mysql_result($result,$i,'ad_title'));
    $country = mysql_result($result,$i,'ad_country');
    $state = stripslashes(mysql_result($result,$i,'ad_state'));
    $city = stripslashes(mysql_result($result,$i,'ad_city'));
    $company = stripslashes(mysql_result($result,$i,'ad_contact_name'));
    $description = stripslashes(mysql_result($result,$i,'ad_details'));
    $postdate = date('m/d/Y', strtotime(mysql_result($result,$i,'ad_postdate')));
    $enddate = date('m/d/Y', strtotime(mysql_result($result,$i,'ad_enddate')));

    $description = str_replace('>', '', strip_tags($description));

    print "<job>
<id><![CDATA[ $id ]]></id>
<link><![CDATA[ http://www.miosito.com/?id=$id ]]></link>
<name><![CDATA[ $title ]]></name>
<region><![CDATA[ $country, $state, $city ]]></region>
<company><![CDATA[ $company ]]></company>
<description><![CDATA[ $description ]]></description>
<expire><![CDATA[ $enddate ]]></expire>
<updated><![CDATA[ $postdate ]]></updated>
</job>\n";
    $i++;
  }
}
echo "</jobs>";

// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);
// chiudo la connessione a MySQL
mysql_close();
?>
inviato 2 anni fa
gabriel79
RISPONDETE UNO ALLA VOLTA PER FAVORE NON VI ACCALCATE!!!gabriel79 2 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda