socktest.php

Datum: 20.10.2013   

Gedacht zum Testen des Verbindungsaufbaus unter PHP auf Linux-Plattformen, unter Windows müsste auf runtime_info verzichtet werden.

<?php
# script-name: socktest.php

# Achtung! Auf Produktivservern sollten die beiden Zeilen auskommentiert
# werden bzw. nur bei Bedarf und kürzest möglich aktiviert.
ini_set( "display_errors", 1 );
error_reporting( E_ALL );

$host = "flashcom.at";
$url = "index.html";

$info = "";
# Informationen über Benutzer, Gruppe und Prozess-ID.
# Funktioniert unter Windows NICHT.
$info .= runtime_info();
# Hostname auflösen.
$info .= "$host = " . gethostbyname( $host ) . "\n";

# Teste Verbindungsaufbau.
$info .= fetch_url_contents( $host, $url, false );

print nl2br( $info ) . "<br />\n";


function fetch_url_contents( $host, $url, $include_headers=true ){
	$fp = fsockopen( $host, 80, $errn, $errs, 30 );
	if( !$fp ){
		$errmsg =  "unable to connect to '$host':\n";
		$errmsg .= "message: $errs\n";
		$errmsg .= "errno: $errn\n";
		$errmsg .= "error_get_last:\n" . print_r( error_get_last(), true );
		return $errmsg;
	}

	$out  = "GET $url HTTP/1.1\r\n";
	$out .= "Host: $host\r\n";
	$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0\r\n";
	$out .= "Connection: close\r\n";
	$out .= "\r\n";
	fwrite( $fp, $out );

	$response = "";
	while( $line = fread($fp, 4096) ){ $response .= $line; }
	fclose( $fp );
	if( !$include_headers ){ $response = substr( $response, strpos($response, "\r\n\r\n") + 4 ); }

	return $response;
}

function runtime_info( $file=null ){
	$info .= "### RUNTIME INFO\n";
	$info .= "pid: " . getmypid() . "\n";
	$info .= "current_user: " . get_current_user() . "\n";
	$info .= "posix_uid: " . posix_getuid() . "\n";
	$info .= "posix_gid: " . posix_getgid() . "\n";
	$info .= "\n";
	if( $file !== null ){ file_put_contents( $file, $info ); }
	return $info;
}

?>

Fragen, Anmerkungen, Korrekturen zu diesem Artikel »