Dennis Wronka
Soulcollector
So, da ich ja hier im Buero eigentlich was anderes tun soll als private Scripts schreiben oder hier im Forum zu haengen schmeiss ich das einfach mal unkommentiert hier rein.
Ich denke anhand des Scripts sollte man einigermassen nachvollziehen koennen wie das HTTP-Protokoll mittels Funktionen wie fsockopen(), fwrite() und fread() in PHP implementiert werden kann.
Die beiden Funktionen am Anfang des Scripts (parseurl() und parsecontent()) sind dabei nicht so wichtig. Der fuer Dich wichtige Teil wird wohl am Ende des Scripts zu finden sein.
Der Vollstaendigkeit halber habe ich aber davon abgesehen das Scripts zu beschneiden.
webbrowser.php
Ich denke anhand des Scripts sollte man einigermassen nachvollziehen koennen wie das HTTP-Protokoll mittels Funktionen wie fsockopen(), fwrite() und fread() in PHP implementiert werden kann.
Die beiden Funktionen am Anfang des Scripts (parseurl() und parsecontent()) sind dabei nicht so wichtig. Der fuer Dich wichtige Teil wird wohl am Ende des Scripts zu finden sein.
Der Vollstaendigkeit halber habe ich aber davon abgesehen das Scripts zu beschneiden.
webbrowser.php
PHP:
<html>
<?php
define('WEBBROWSER','http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']);
function parseurl($url)
{
if (substr($url,0,7)=='http://')
{
$parsedurl['protocol']='http://';
$parsedurl['port']=80;
$slashpos=strpos($url,'/',7);
if ($slashpos!=false)
{
$parsedurl['host']=substr($url,7,$slashpos-7);
}
else
{
$parsedurl['host']=substr($url,7);
}
}
elseif (substr($url,0,8)=='https://')
{
$parsedurl['protocol']='https://';
$parsedurl['port']=443;
$slashpos=strpos($url,'/',8);
if ($slashpos!=false)
{
$parsedurl['host']=substr($url,8,$slashpos-8);
}
else
{
$parsedurl['host']=substr($url,8);
}
}
elseif (substr($url,0,6)=='ftp://')
{
$parsedurl['protocol']='ftp://';
$parsedurl['port']=21;
$slashpos=strpos($url,'/',6);
if ($slashpos!=false)
{
$parsedurl['host']=substr($url,6,$slashpos-6);
}
else
{
$parsedurl['host']=substr($url,6);
}
}
else
{
$parsedurl['protocol']='http://';
$parsedurl['port']=80;
$slashpos=strpos($url,'/');
if ($slashpos!=false)
{
$parsedurl['host']=substr($url,0,$slashpos);
}
else
{
$parsedurl['host']=$url;
}
}
$portpos=strpos($parsedurl['host'],':');
if ($portpos!=false)
{
$hostname=$parsedurl['host'];
$parsedurl['host']=substr($hostname,0,$portpos);
$parsedurl['port']=substr($hostname,$portpos+1);
}
$slashpos_first=$slashpos;
while ($slashpos!=false)
{
$slashpos_prev=$slashpos;
$slashpos=strpos($url,'/',$slashpos_prev+1);
}
if (isset($slashpos_prev))
{
$parsedurl['directory']=substr($url,$slashpos_first,$slashpos_prev-$slashpos_first);
$parsedurl['file']=substr($url,$slashpos_prev+1);
if (strpos($parsedurl['file'],".")==false)
{
$parsedurl['directory'].='/'.$file;
$parsedurl['file']='';
}
if (substr($parsedurl['directory'],-1)!='/')
{
$parsedurl['directory'].='/';
}
}
else
{
$parsedurl['directory']='/';
$parsedurl['file']='';
}
return $parsedurl;
}
function parsecontent($data,$url)
{
$newdata=$data;
$start=1;
$end=0;
while ($start!==false)
{
$start=strpos($data,'href="',$end);
$end=strpos($data,'"',$start+6);
$link=substr($data,$start+6,$end-($start+6));
if ((substr($link,0,4)=='http') || (substr($link,0,3)=='ftp'))
{
$newlink=$link;
}
elseif (substr($link,0,1)=='/')
{
$newlink=$url['protocol'].$url['host'].$link;
}
elseif (substr($link,0,2)=='./')
{
$newlink=$url['protocol'].$url['host'].$url['directory'].substr($link,2);
}
else
{
$newlink=$url['protocol'].$url['host'].$url['directory'].$link;
}
$newdata=str_replace('href="'.$link,'href="'.$newlink,$newdata);
}
$start=1;
$end=0;
while ($start!==false)
{
$start=strpos($data,'src="',$end);
$end=strpos($data,'"',$start+5);
$link=substr($data,$start+5,$end-($start+5));
if ((substr($link,0,4)=='http') || (substr($link,0,3)=='ftp'))
{
$newlink=$link;
}
elseif (substr($link,0,1)=='/')
{
$newlink=$url['protocol'].$url['host'].$link;
}
elseif (substr($link,0,2)=='./')
{
$newlink=$url['protocol'].$url['host'].$url['directory'].substr($link,2);
}
else
{
$newlink=$url['protocol'].$url['host'].$url['directory'].$link;
}
$newdata=str_replace('src="'.$link,'src="'.$newlink,$newdata);
}
$start=1;
$end=0;
while ($start!==false)
{
$start=strpos($data,'a href="',$end);
$end=strpos($data,'"',$start+8);
$link=substr($data,$start+8,$end-($start+8));
if ((substr($link,0,4)=='http') || (substr($link,0,3)=='ftp'))
{
$newlink=WEBBROWSER.'?url='.$link;
}
elseif (substr($link,0,1)=='/')
{
$newlink=WEBBROWSER.'?url='.$url['protocol'].$url['host'].$link;
}
elseif (substr($link,0,2)=='./')
{
$newlink=WEBBROWSER.'?url='.$url['protocol'].$url['host'].$url['directory'].substr($link,2);
}
else
{
$newlink=WEBBROWSER.'?url='.$url['protocol'].$url['host'].$url['directory'].$link;
}
$newdata=str_replace('a href="'.$link,'a href="'.$newlink,$newdata);
}
return $newdata;
}
if (empty($_REQUEST['url']))
{
echo '<head><title>PHP WebBrowser</title></head>';
}
?>
<body>
<div style="position:fixed;top:0;left:0;height:30px;width:100%;border:1px solid;background-color:#bbbbbb;z-index:2;padding:5px;">
<form method="post" action="webbrowser.php">
<input type="text" name="url">
<input type="submit" name="go" value="Go">
</form>
</div>
<div style="position:absolute;top:60px;left:0px;bottom:10px;width:100%;z-index:1;">
<?php
if (!empty($_REQUEST['url']))
{
$url=parseurl($_REQUEST['url']);
$socket=fsockopen($url['host'],$url['port']);
if ($socket!=false)
{
fwrite($socket,'GET '.$url['directory'].$url['file']."\r\n");
$data='';
while (!feof($socket))
{
$data.=fread($socket,128);
}
$data=parsecontent($data,$url);
echo $data;
fclose($socket);
}
}
?>
</div>
</body>
</html>