Formular auf anderem Server bei Homepage besucher ausführen ..

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
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>
 
Danke, sobald ich von der Bunderwehr wieder mal zurück bin werde ich das Script mal direkt ausprobieren :), bin mir aber absolut sicher das es laufen wird :).
 
Das Script hab ich in der Form bei mir laufen. Es kann natuerlich nicht alles was ein normaler Web-Browser so kann. Hab im Grunde nur die grundlegensten Funktionen implementiert.
Aber Du willst ja auch keinen PHP-Browser nutzen sondern nur ein wenig HTTP ueber fsockopen() machen.

Ich wuensche Dir noch viel Erfolg.
Wenn Du noch Fragen haben solltest dann meld Dich einfach.
Und noch viel Spass bei Deutschlands groesstem Trachtenverein.
 
Zurück