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