estrazione dati da DB tramite PHP errore time out

gabriele79

Nuovo Utente
20 Set 2014
3
0
1
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, 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!


Codice:
<IfModule mod_dtimeout.c>
<Files ~ ".php">
SetEnvIf Request_URI "*.php" DynamicTimeout=3000
</Files>
</IfModule>[CODE]


Lo script PHP è il seguente:


[PHP]<?
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();
?>[/PHP]
 
Ciao, non ho mai provato ma protresti testare qualcosa di simile
PHP:
<?php

$sql = new mysqli("localhost", "root", "", "database");
$query = "SELECT * FROM articoli";
$result = $sql->query($query);

$xml = new SimpleXMLElement('<root/>');
while ($row = $result->fetch_assoc()) {
    $job = $xml->addChild("job");
    foreach ($row as $key => $value) {
        $job->addChild($key, $value);
    }
}
print $xml->asXML();
 

Discussioni simili