Oto mój kłopot:
<?
class HTTPRequest
{
var $_fp; // HTTP socket
var $_url; // full URL
var $_host; // HTTP host
var $_protocol; // protocol (HTTP/HTTPS)
var $_uri; // request URI
var $_port; // port
// scan url
function _scan_url()
{
$req = $this->_url;
if($pos === false)
$host = substr($req, 0
, $pos);
if(strpos($host, ':') !== false) {
list
($this->_host
, $this->_port
) = explode(':', $host); }
else
{
$this->_host = $host;
$this->_port = ($this->_protocol == 'https') ? 443 : 80;
}
$this->_uri
= substr($req, $pos); if($this->_uri == '')
$this->_uri = '/';
}
// constructor
function HTTPRequest($url)
{
$this->_url = $url;
$this->_scan_url();
}
// download URL to string
function DownloadToString()
{
$crlf = "\r\n";
$response='';
// generate request
$req = 'GET ' . $this->_uri . ' HTTP/1.0' . $crlf
. 'Host: ' . $this->_host . $crlf
. $crlf;
// fetch
$this->_fp
= fsockopen(($this->_protocol
== 'https' ?
'ssl://' : '') . $this->_host
, $this->_port
, $errno, $errstr, 4
); $response .= fread($this->_fp
, 1024
);
// split header and body
$pos = strpos($response, $crlf . $crlf); if($pos === false)
return($response);
$header = substr($response, 0
, $pos);
// parse headers
foreach($lines as $line)
if(($pos = strpos($line, ':')) !== false)
// redirection?
if(isset($headers['location'])) {
$http = new HTTPRequest($headers['location']);
return($http->DownloadToString($http));
}
else
{
return($body);
}
}
}
// class END ================================
ob_start(); // wlaczamy buforowanie wyjscia ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-2">
<META NAME="Language" CONTENT="pl">
<META NAME="robots" CONTENT="none">
<META HTTP-EQUIV="Refresh" CONTENT="10">
<!-- poniższy skrypt był użyty jako jeden ze sposobów odswiezenia -->
<script language="Javascript">
var time=15;
function timer(name){
time--;
document.formularz.zegar.value=time;
if(time>0){
timeout=setTimeout("timer('next')",1000);
}
else{
setTimeout('location.reload(true)',3000);
document.execCommand('Stop');
window.stop();
}
}
</script>
</HEAD>
<BODY>
<!--
<img src="gfx/fwd.gif" onLoad="timer('next')">
Do odświeżenia pozostało: <form name="formularz"><INPUT TYPE="TEXT" NAME="zegar" size="3" READONLY></FORM>
-->
<?
$katalog_nowe_tresci = '_nowe_tresci';
$error_log='error_logs/'.date('Y-m-d').'.htm'; // ==========================================================================
$sql="SELECT id,url FROM urls AND czy_skanowano=0 ORDER BY id LIMIT 100 ";
exit('Brak adresów do przetworzenia - koniec skanowania.'); };
// przechodzimy przez wynik zapytania
$plik_zawartosc = $katalog_nowe_tresci.'/'.$bip['id'].'.htm';
echo 'Przetwarzam: ('.$bip['id'].') <a href="'.$adres.'" target="_blank">'.htmlspecialchars($adres).'</a><br>';
$r= new HTTPRequest($adres);
$s= $r->DownloadToString();
if(count($z)==0
|| $z==FALSE){ echo '<b>Problem z ściągnięciem:</b> <a href="'.$adres.'" target="_blank">'.htmlspecialchars($adres).'</a><br>'; continue;
}
// zapis strony do pliku
if(($fp=fopen($plik_zawartosc,'w'))===FALSE){ echo '<b>Błąd otwarcia pliku strony:</b> <a href="'.$adres.'" target="_blank">'.htmlspecialchars($adres).'</a><br>'; exit('Błąd otwarcia pliku strony'); }
foreach($z as $l){
// usunac wszystkie PHPSESSID itp
if(fwrite($fp,"$l\n")===FALSE){ //zapisywanie linia po linii echo '<b>Błąd zapisu pliku strony:</b> <a href="'.$adres.'" target="_blank">'.htmlspecialchars($adres).'</a><br>'; exit('Błąd zapisu pliku strony'); }
}
echo '<b>Błąd zamknięcia pliku strony:</b> <a href="'.$adres.'" target="_blank">'.htmlspecialchars($adres).'</a><br>'; exit('Błąd zamknięcia pliku strony'); }
echo '<b>Problem z zapisem:</b> <a href="'.$adres.'" target="_blank">'.htmlspecialchars($adres).'</a><br>'; continue;
}
} // END OF while($bip=mysql_fetch_array($result_bipy))
?>
</BODY>
</HTML>
poprawiam
---
nospor@darekpe: wyglada na to że set_time_limit() jest zablokowane na serwerze na którym biega ten skrypt
@hwao:
ustawiłem:
<?php
fsockopen(($this->_protocol
== 'https' ?
'ssl://' : '') . $this->_host
, $this->_port
, $errno, $errstr, 4
); ?>
"zawiecha" polega na tym że:
albo strona się pozornie dalej wczytuje (Trwa wczytywanie... w belce)
albo jest status "Zakończono", ale pasek postępu ładowania ciągle jest widoczny (jak i klepsydra)