Jump to content
php.lv forumi

file_get_contents() neaiziet līdz galam


SanchoZs

Recommended Posts

Sveiki!

Vēlējos lūgt palīdzību.

 

Man ir mysql kvērijs pēc kura notiek lapu satura savākšana ar file_get_contents.

Problēma slēpjas faktā, ka nets ir lēns un visas lapas netiek nolasītas. (Izmet - Fatal error: Maximum execution time of 200 seconds exceeded)

Laiku varētu dot vēl lielāku, bet tas nav risinājums. Ja lapu būs ļoti daudz, tad tas tāpat neies.

Galvā stāv risinājumu varianti, bet nespēju tos ielikt kodā.

v1 - Sadalīt lapu lasīšanu pa porcijām. (Ciks ciklā)

v2 - Čekot, ja 5s laikā nenotiek konekcija ar serveri, tad izlaist lapu.

 

Te ir daļa koda.

$q = mysql_query(kveerijs) or die(mysql_error());
while ($row = mysql_fetch_array($q, MYSQL_ASSOC)) 
{
if (file_get_contents($row["www"])!=false)
{	
	te notiek shis un tas
}
}

 

Vai kāds varētu man pamest kādu ideju? Būtu ļoti pateicīgs.

 

Paldiesjau iepriekš.

Link to comment
Share on other sites

Man arī reiz vajadzēja ko līdzīgu. Es gan darīju savadāk - to web lapu nokačāju kaut kur tmp folderī un tad laidu virsū file_get_contents().

function downloadFile ($file_source, $file_target) {
$rh = fopen($file_source, 'rb');
$wh = fopen($file_target, 'wb+');

if ($rh === false || $wh === false) 
	return false;

while (!feof($rh)) 
	if (fwrite($wh, fread($rh, 1024)) === false)
		return false;

fclose($rh);
fclose($wh);
return true;
}
$tmp = '/www/host/tmp/google.tmp';
downloadFile ('http://www.google.lv',$tmp);
$contents = file_get_contents ($tmp);
unlink($tmp);

 

un par ideju lasīt pa daļām moš šis palīdzēs:

Now you may use this code,to fetch the partial content like this:

<?php
$context=array('http' => array ('header'=> 'Range: bytes=1024-', ),);
$xcontext = stream_context_create($context);
$str=file_get_contents("http://www.fcicq.net/wp/",FALSE,$xcontext);
?>

 

http://lv.php.net/file_get_contents

Edited by NiTrino
Link to comment
Share on other sites

Par to 1. variantu jautājums.

Vai saglabāšana uz servera un nolasīšana pēc tam būs ātrāka par vnk file_get_contents() un satura noglabāšanu db? Jo lapu ir ļoti daudz un tur ir tas āķis.

2. Tas, manuprāt, nav tas, ko es vēlējos. Es gribētu teiksim paporcijāmdalīt tādā veidā, ka pirmās, piem, 10s tiek paņemtas 5 lapas un nākamajās 10 s nākamās 5 lapas. T.i. execution time ir 10s, kuru laikā jāpaņem 5 lapu porcija un jānočeko. Ja 10s laikā tas nenotiek, tad scripts ņem nākamās 5 lapas un čeko tālāk.

Jeb īsumā - kā būt pārliecinātam, ka tiek pieļauts minimāls zudums lapu pārbaudē, nevis no 100 lapām paspēj pārbaudīt pirmās 50 un uzmet fatālo erroru, bet ņem pa 5x20 porcijām un sliktākajā gadījumā 10 porcijās nepārbauda pēdējo lapu un zudums ir 10 nepārbaudītas lapas.

Ceru mans domu gājiens skaidrs.

Link to comment
Share on other sites

×
×
  • Create New...