Ik probeer een proxy te maken, maar wanneer ik naar nu.nl ga duurt het laden heel lang. Weten jullie hoe dat zou kunnen komen.

Mijn code (ingekort):

<?php
if(!isset($_SERVER['REDIRECT_URL']))
	$file = '/index.php';
else
	$file = $_SERVER['REDIRECT_URL'];
	
$host = $_SERVER['SERVER_NAME'];

$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
	echo "$errstr ($errno)<br />\n";
} else {
	$out = "GET ".$file." HTTP/1.1\r\n";
	foreach (apache_request_headers() as $header => $value) {
		$out .= str_replace('Proxy-', '', $header).': '.$value."\r\n";
	}
	$out .= "Connection: Close\r\n\r\n";
	fwrite($fp, $out);
	$header = true;
	while (!feof($fp)) {
		$line = fgets($fp, 128);
		if($line == "\r\n" && $header)
		{
			$header = false;
			continue;
		}
			
		if($header)
		{
			header($line);
		}
		if(!$header)
		{
			echo $line;
			ob_flush();
			flush();
		}
	}
	fclose($fp);
}
?>

Ik heb dat ob_flush er al bijgezet, maar dat helpt ook niet.
Kan je niet beter cURL gebruiken?
Meer nieuwsgierigheid dan een oplossing, maar hoe roep je dit script aan, of stel je het in als proxy?

Ik denk dat je die 128 bij fgets mag weglaten. Stel dat er een langere header voorbij komt, dan komt die niet in één keer langs header(), en gaat 'ie mis.

Iedere regel ob_flush & flush aanroepen werkt eerder averechts dan mee denk ik. Die operaties zijn voor Apache relatief intensief.
Bedankt voor de reacties.
Ik zal eerst wel eens jelmer's oplossing proberen, als dat niet lukt ga ik cURL uitproberen, maar momenteel heb ik geen toegang tot de proxy.
@jelmer ik stel het in als een proxy.
Karl, zou je een simpel voorbeeld kunnen geven hoe je dat met cURL doet?
Want ik heb fgets al op 8192 gezet, maar het werkt nog steeds traag bij bepaalde sites.

Edit: Bumpen nog steeds verboden? Zo ja, is dit bumpen?
Edit2: Zelfs length parameter weghalen werkt niet.
(Over je edit; in princiepe is het bumpen, maar omdat het tegen de 24 uur aan zit denk ik niet dat er veel mensen erover zullen beginnen.)

Kijk hier eens trouwens ;-)

Reageren