Web Tip #6
Lees andere websites met PHP
Een weining bekende mogelijkheid van PHP is dat het met de gewone file I/O commando's mogelijk is om http urls te lezen. Dat kan op meerdere manieren, afhankelijk van uw server- en netwerksituatie.Een website lezen met fopen
Dat gaat bijvoorbeeld zo:
<?php
$f=fopen('http://www.open-t.nl',r);
while (!feof($f)) {
$s=fgets($f);
echo $s;
}
fclose($f);
?>
Dit lezen van url's met fopen kan echter worden uitgezet met een php.ini setting
allow_url_fopen. Om deze aan te zetten is de volgende setting in php.ini nodig:
allow_url_fopen = OnPas op, er worden soms meerdere php.ini's gebruikt (voor commandline en voor Apache bijvoorbeeld. Om er achter te komen welke php.ini in uw situatie gebruikt wordt kan phpinfo gebruikt worden in een heel kort script:
<?php phpinfo(); ?>
Een website lezen met fsockopen
Als uw hosting bedrijf of systeembeheerder het lezen van url's met fopen niet toelaat kunt u ook fsockopen gebruiken. Hiermee opent u direct een TCP/IP verbinding, u kunt hier dan ook veel meer mee doen dan met fopen. Een nadeel is wel dat u het HTTP communicatieprotocol met de server zelf moet verzorgen. Gelukkig is dat niet zo ingewikkeld:
<?php
$host='www.open-t.nl';
$f=fsockopen($host,80);
fwrite($f,"GET / HTTP/1.0\r\nHost:$host\r\n\r\n");
while (!feof($f)) {
$s=fgets($f,128);
echo $s;
}
fclose($f);
?>
Een website lezen achter een proxy
Als laatste kan het ook nog zo zijn dat het verkeer naar buiten geblokkeerd wordt door een proxy server. Ook hier biedt fsockopen uitkomst:
<?php
$proxy='10.0.0.1';
$url="http://www.open-t.nl";
$f=fsockopen($proxy,3128);
fwrite($f,"GET $url HTTP/1.0\r\nHost:$proxy\r\n\r\n");
while (!feof($f)) {
$s=fgets($f,128);
echo $s;
}
fclose($f);
?>
In de GET request naar eem prpxy server is altijd het gehele url aamwezig.
Met een van de bovenstaande scripts kunt u eenvoudig informatie van een website verzamelen, een pagina van een site in uw site embedden, of een RSS feed lezen. Zorg er wel voor dat u toestemming heeft van de site die u gebruikt.
Met dezelfde techniek kunt u ook automatisch controleren of uw eigen site nog functioneert.
J:)st