Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Problema citire fisier XML la timp executie
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
IDCatalin



Data înscrierii: 13/Iul/2005
Mesaje: 11

Trimis: Mie Iul 13, 2005 10:53 am    Titlul subiectului: Problema citire fisier XML la timp executie  

Am un fisier XML de 14 MEGA care contine o lista de hoteluri.
Si am un script in php care parseaza fisierul XML si introduce datele parsate intr o tabela.
Problema apare la parsarea fisierului.
Deoarece timpul de executie este foarte mare scriptul se opreste dupa primele 400-450 inregistrari.
In total sunt 4000.
Aici am o parte din cod care nu face decat sa mi afiseze pe ecran id-urile hotelurilor si timpul este la fel de mare.
Imi poate da cineva o solutie pentru o parsare rapida a unui fisier XML?

<?php
$link=mysql_connect('localhost','root','');
cauta_eroare();
mysql_select_db("test");
error_reporting(E_ALL);
function cauta_eroare()
{
if (mysql_errno())
{
die("<BR>".mysql_errno().": ".mysql_error()."<BR>");
}
}



$filename = "files/AH.xml";
$handle = fopen($filename, "r");
if ($handle)
{
$contents =fread($handle, filesize($filename));
$lungime =strlen($contents);
}
else die("XML FILE OPEN FAIL");

$interogare="DELETE FROM holiday_at_home_products";
mysql_query($interogare);
cauta_eroare();
$interogare="ALTER TABLE holiday_at_home_products AUTO_INCREMENT = 1";
mysql_query($interogare);
cauta_eroare();


$contor=0;
$hotelid="abcdefghi";
while (trim($hotelid)!="")
{
$start=strpos($contents,"<Hotel ");
$end =strpos($contents,"</Hotel>");
$rest=substr($contents,$start+6,$end);//si de aici te apuci si citesti fiecare linie si iei campurile
$contents=substr($contents,$end+8);

$posstart=strpos($rest,"hotelid=\"");
$posend =strpos($rest,"\"",$posstart+10);
$hotelid=substr($rest,$posstart+9,$posend);//elimin
$rest=substr($rest,$posend+1);//elimin
echo("start=".$posstart." end=".$posend.' si id='.$hotelid."<BR>");
$contor++;
Sus  
johnny



Data înscrierii: 31/Iul/2004
Mesaje: 904
Locație: Bucuresti

Trimis: Mie Iul 13, 2005 11:27 am    Titlul subiectului:  

an style="color: #000000"><?php set_time_limit(300) //timp de executie script = 5 minute 

o optimizare:
$contents =fread($handle, filesize($filename));
in loc sa citesti tot fisierul in memorie, citeste-l pe bucati/linii
fread($handle, 4096);

poate http://ro.php.net/manual/en/ref.xml.php te ajuta mai mult...
Sus  
Ropiku



Data înscrierii: 12/Ian/2005
Mesaje: 54
Locație: Bucuresti

Trimis: Mie Iul 13, 2005 11:37 am    Titlul subiectului:  

Problema este timpul de executie al scriptului. in php.ini ai max_execution_time mareste-l si tu, asta daca ai acces la php.ini.
Vezi daca cu simplexml merge mai repede scriptul.
la http://zend.com/php/beginners/php101-15.php este un tutorial despre cum sa vezi feeduri RSS. Incearca sa adaptezi si tu sa folosesti functiile simplexml.
Nu cred ca asta o sa rezolve problema deoarece la dimensiunea fisierului totusi dureaza mult.
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community