Jump to content
php.lv forumi

Recommended Posts

Posted

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š.

Posted (edited)

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
Posted

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.

Posted

nekad neesmu pieredzējis ka skriptiem cronā traucētu max_execution_time. varbūt kāds cits par tādiem ierobežojumiem zin?

Posted

Nu es ar cronosu neesmu darbojies. Vnk es taisu scriptu, kas būs uz cronos.

Bet pēc idejas - ja lapas kontentu nevar savākt, tad cikls apstājas. Uz cronos vai tad tas būtu savādāk?

Posted

crons vienk ir tā kā windowsā task scheduler, kas noteiktā laikā izpildā kādu komandu. un php skriptiem, kas tiek laisti no konsoles, daudzi ierobežojumi nedarbojas.

×
×
  • Create New...