 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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 |
|
| |
|