Webspace-Support unglaublich...

Hier ist Platz für alle Themen, die Produkte, Verträge und Allgemeines im Zusammenhang mit Internet und Telefonie via Vodafone Kabel Deutschland, Vodafone West, der Vertriebsmarke „eazy“ bzw. O2 betreffen.
Forumsregeln
Forenregeln


Bitte gib bei der Erstellung eines Threads im Feld „Präfix“ an, ob du Kunde von Vodafone Kabel Deutschland („[VFKD]“), von Vodafone West („[VF West]“), von eazy („[eazy]“) oder von O2 über Kabel („[O2]“) bist.
doddie
Newbie
Beiträge: 32
Registriert: 29.12.2009, 10:39

Webspace-Support unglaublich...

Beitrag von doddie »

Hallo liebe Community,

ich bin auf dieses Forum gestossen in der Welt von Google.

Ich bin echt sauer im Moment, also so eine Frechheit...

Kurz mal erklären worum es denn geht:

Ich habe mir vor einer Weile das Webspace-Paket Power bestellt.

Dies habe ich auch bekommen mit der PhP-Version 4.4.4-8.

So, nun habe ich aber festgestellt, das ich die PhP-Version 5.0.5 benötige und diese laut Kabel Deutschland inbegriffen ist.

Somit habe ich heute Morgen bei der Support-Hotline angerufen, die mich aber zur Technik-Hotline weiterreichte, da sie nach eigenen Angaben nichts daran ändern könnten, daher die Weiterleitung zur Technik-Hotline.

Ok, nun gut, also Hörer gegriffen und die Technik-Hotline angerufen, und ihnen mein Anliegen erläutert. Sie jedoch meinten, sie wären nicht dafür zuständig, da müsse ich mich an die Firma D-Link wenden, die würden das dann umstellen und mit mir koordinieren. Also habe ich die Nummer dieser Firma dankend entgegen genommen.

Also nun die D-Link-Hotline angerufen, in der ich aber sehr schnell auf Widerstand gestossen bin, da sie sich nur mit den Endgeräten, also den Routern, Switchs etc. auseinandersetzen würden. Somit rieten sie mir, das ich mich doch mit der Kabel Deutschland Support-Hotline in Verbindung setzen solle.

Gesagt, getan. Also wieder die Support-Hotline angerufen, und ihnen geschildert, das ich weder beim Technischen Support, noch bei der Weiterleitung zur Firma D-Link auf brauchbare Hilfe stossen konnte. Diese wiederum beteuerte wieder, das sie nichts tun könne, als mich an den Technischen Support weiterzuleiten und schon war ich in der Warteschleife...

"Schönen guten Tag, ... mein Name..." was ich ja nun schon mehrere mal sagen durfte, und erläuterte nun auch diesem Mitarbeiter, was mein Problem sei, und auch von diesem Mitarbeiter (In den Hotlines war stets ein anderer Mitarbeiter, womit ich stets alles von vorn erklären musste.) abgewimmelt worden bin, da dies nicht in ihren Zuständigkeitsbereich fallen würde.

Toll, wieder zum technischen Support geleitet worden. Und wieder hieß es, mit der der Firma D-Link in Verbindung setzen, da die Techniker sich nur mit "Störungen" beschäftigen würden. Ich sagte ihnen, das ich weder bei der Firma D-Link, noch in der Support-Hotline etwas erreichen konnte, sondern nur willkürlich von A nach B, und von B nach C weiter geleitet werde. Daraufhin meinte er, ich solle es genau so der Support-Hotline schildern, da die Technik da nichts machen könne.

*Ich brodelte mittlerweile...*

Und wieder die Support-Hotline angerufen, weil es so viel Spaß macht... Und wow... mal eine weibliche Stimme am Ohr. Ich dachte... "Naja wenn die Männer hier schon stets versagen, dann wird mir eine Frau da sicherlich mal weiterhelfen können.". Haha, falsch gedacht, sie würgte mich so schnell ab, so schnell konnte ich gar nicht schauen, sie war scheinbar maßlos überfordert und schwuppdiwupp war ich wieder in der Warteschleife für die Technische Hotline.

*Geduldsfaden gleich reisst*

Und wieder ein anderer Mitarbeiter am Ohr, und schilderte ihm meinen Verlauf bis jetzt, und sagte auch, das ich mich ziemlich veralbert vorkomme, denn normal ist es nicht, das man von einer Hotline zur nächsten geschickt wird und wieder zurück. Ich mahnte ihn an, jetzt endlich mal konkrete Angaben zu machen, womit ich auch etwas anfangen könne.

Und was kam? Genau, er wüsste nicht, was er tun solle. Ich sagte gleich, das ich mich nicht nochmal an die Support-Hotline wenden werde und schon bekam ich die nächste Firma aufgebrummt. Name klang wie "Lumes". Der Anruf würde ja nur 1,86€ die Minute kosten und die würden auf jeden Fall wissen was zu tun ist.

So, ich bin ja nun auch kein Rockefäller. Ich gehe zwar arbeiten, aber deswegen schieße ich mein Geld sicher nicht zum Fenster raus und schon gar nicht, um am Ende wieder abgewimmelt zu werden oder gar weitergeleitet zu werden.
Er meinte ich könne die Firma auch über Google finden, was ich aber leider nicht gefunden habe, und könne da ja den E-Mail-Support in Anspruch nehmen.

Apropo E-Mail... ich habe bereits vor einigen Tagen an Kabel Deutschland eine E-Mail versandt mit meiner Bitte was die PhP-Version betreffe. Aber natürlich noch immer keine Antwort. Ich bin sicher, das meine E-Mail wie meine Telefonate, vom Support zu Technik zu D-Link zu Support zu Technik zu Support zu Technik und letzten Endes bei einer Firma "Lumes" (Wenn sie denn so heißt) weitergeleitet wird.

So, nun zum Fazit.

Habe ich dadurch jetzt irgendetwas erreichen können außer ein paar Euro mehr auf der Telefon-Rechnung? Nein!

Nun stehe ich wieder im Dunkeln und weiß nicht weiter...

Weiß von euch jemand vielleicht, was ich da noch tun kann?

Liebe Grüße Doddie
EdeVau
Kabelfreak
Beiträge: 1835
Registriert: 05.08.2009, 12:33
Wohnort: D-67117

Re: Webspace-Support unglaublich...

Beitrag von EdeVau »

Moin,
sehr ärgerlich und wenig tröstlich, aber ich glaube, Du hast die studentischen Aushilfen an der Hotline überfordert.

Die Homepage-Funktion wird wohl nicht von KDG selber, sondern von einer Fa. Loomes AG realisiert.
Passender Thread :fingerzeig: http://www.kdgforum.de/viewtopic.php?f= ... 0&p=115560


Mein Rat für die Zukunft:
Suche Dir einen von Deinem Provider völlig unabhängigen Hoster. Billig ist eben nur billig, in jeder Hinsicht.
Grüße von EdeVau

KDG 6000 - THG540K - 7170 - Euracom 182 - Euracom P4 , PC-Fritzfax , 8 analoge | KDG-Telefonie ungenutzt.
doddie
Newbie
Beiträge: 32
Registriert: 29.12.2009, 10:39

Re: Webspace-Support unglaublich...

Beitrag von doddie »

Oh wow, ein Lichtblick, und das so schnell? Gott muss einen Engel geschickt haben. :lol:

So aber mal im Ernst, erstmal danke für Deine Mühe, ok der Name der Firma wurde mir nicht buchstabiert, was ich vielleicht hätte tun sollen.

Was mich jetzt noch irritiert, ist, das auf der Website der Firma Loomes eine Service-Hotline (01805...) angegeben wird und die Kabel Deutschland Technik-Hotline angegeben hat, sie hätten eine 0900er Nummer.

Bin ich da bei dieser Firma auch richtig?

Wenn ja, macht es dann eher Sinn eine Mail zu schreiben oder auf gut Glück dort auch noch anzurufen?

Liebe Grüße Doddie
Benutzeravatar
cpt. crunch
Fortgeschrittener
Beiträge: 385
Registriert: 21.11.2009, 18:52

Re: Webspace-Support unglaublich...

Beitrag von cpt. crunch »

Hi!

Also warum du auf die Frage nach PHP5 zu D-Link geschickt wirst von der Hotline, mußt du noch einmal genauer erklären... :)

Also im Paket-Vergleich der Homepage-Produkte von Kabel Deutschland steht beim Power-Paket tatsächlich PHP5 mit drin.

In den FAQs der Loomes AG habe ich zwei Einträge dazu gefunden:

Wie kann ich PHP 5 Dateien mit Endung .php anstatt .php5 nutzen?

Problem: Sie wollen PHP 5 nutzen, Ihre Dateien aber nicht mit .php5 benennen.
Lösung: Einsatz einer .htaccess wie beschrieben.

Um PHP 5 nutzen zu können, müssen die Dateinen .php5 heisen. Dateien mit der Endung .php werden als php4 Dateien interpretiert. Sie können aber mittels einer .htaccess mit folgendem Inhalt dieses Verhalten beeinflussen.

Tragen Sie bitte folgendes in die .htaccess ein:

AddHandler php5-script .php

Es können auch .html-Dateien als durch PHP geparst werden. Hierfür muss die Endung dann .html heißen. Die Einstellung gilt in dem aktuellen Verzeichniss und allen Unterverzeichnissen. Das Verhalten kann also pro Verzeichniss konfiguriert werden. Alternativ zu php5-script gibt es noch:

AddHandler php4-script .php


Welche PHP-Versionen sind installiert?

Windows Server werden in Zukunft auf PHP 5 umgestellt. Aktuell PHP 4.

Linux Server sind mit PHP 5 ausgestattet.
(Wobei sich das wohl eher auf richtige Server bezieht, die man bei Loomes mieteen kann, nicht auf die Webhosting-Pakete)
Samsung 37" LED TV D6510
Digitaler Empfang über KDG (gekündigt)
DVB-IP (IPTV) über Alice DSL
doddie
Newbie
Beiträge: 32
Registriert: 29.12.2009, 10:39

Re: Webspace-Support unglaublich...

Beitrag von doddie »

Hey,

auch an Dich erstmal ein großes Dankeschön für Deine Mühe.

Also ich bin kein großer "Technik-Freak" aber warum ich zur Firma D-Link weitergeleitet worden bin, habe ich selbst nicht verstanden, denn ich weiß selbst, das sie eigentlich nur Router und dergleichen anbieten, und ich mich nicht entsinnen kann das sie auch Webspace oder so anbieten.

Ich bin aber der Bitte des Kabel Deutschland Technik-Hotline Supporters nachgegangen und hatte dort angerufen, weil ich mir dachte, ok, sie werden es wohl eher wissen als ich. Das es dann doch ein Reinfall war... konnte ich leider nicht ahnen.

Ich werde dein geschriebenes jetzt nochmal in Ruhe anschauen und durchgehen und melde mich nochmal, sobald es funktioniert, bzw. es etwas neues gibt.

Liebe Grüße Doddie



:Edit:

cpt. crunch hat geschrieben: Wie kann ich PHP 5 Dateien mit Endung .php anstatt .php5 nutzen?

Problem: Sie wollen PHP 5 nutzen, Ihre Dateien aber nicht mit .php5 benennen.
Lösung: Einsatz einer .htaccess wie beschrieben.

Um PHP 5 nutzen zu können, müssen die Dateinen .php5 heisen. Dateien mit der Endung .php werden als php4 Dateien interpretiert. Sie können aber mittels einer .htaccess mit folgendem Inhalt dieses Verhalten beeinflussen.

Tragen Sie bitte folgendes in die .htaccess ein:

AddHandler php5-script .php



Also das funktioniert schon einmal, also ich bin schon mal sehr erfreut, das es doch noch vernünftige Menschen gibt, die wissen, wie man hilft.

Ich bedanke mich recht herzlich bei Dir.

Liebe Grüße Doddie
doddie
Newbie
Beiträge: 32
Registriert: 29.12.2009, 10:39

Re: Webspace-Support unglaublich...

Beitrag von doddie »

Hmm dennoch ein weiteres Problem.

Es ist zwar gut, das ich mittels der Endung .php5 zum Beispiel eine Foren-Installation in Gang setzen kann, jedoch brich sie dann gleich wieder ab, da die anderen Dateien ja nicht auf PhP5 sind.

Laut deinen Angaben habe ich eine .htacess mit dem Inhalt:

Code: Alles auswählen

AddHandler php5-script .php
gemacht, jedoch hilft dies nicht.

Auf der Website von Loomes kann ich aber leider auch nichts genaueres finden, was ich reinschreiben soll.

Die .htacess habe ich in das von mir benötigte Verzeichnis getan, aber wie schon erwähnt, leider ohne Erfolg.

Liebe Grüße Doddie
Benutzeravatar
cpt. crunch
Fortgeschrittener
Beiträge: 385
Registriert: 21.11.2009, 18:52

Re: Webspace-Support unglaublich...

Beitrag von cpt. crunch »

Welches Forum willst du denn überhaupt installieren?

Über die .htaccess werden jetzt eigentlich alle PHP-Dateien auf PHP5 umgestellt, ich schätze es liegt an einem anderen Fehler dann.

Wird irgendeine Fehlermeldung ausgegeben überhaupt? Ansonsten bei Loomes mal nachfragen, ob das Forum auf dem Webspace läuft.
Samsung 37" LED TV D6510
Digitaler Empfang über KDG (gekündigt)
DVB-IP (IPTV) über Alice DSL
doddie
Newbie
Beiträge: 32
Registriert: 29.12.2009, 10:39

Re: Webspace-Support unglaublich...

Beitrag von doddie »

Es geht um dieses Board.

Ich kann es nur starten, wenn ich die install.php5 nutze, aber nicht wenn ich normal die install.php nutzen möchte.

Das heißt, sobald ich anfangen möchte mit installieren, meldet er:

Code: Alles auswählen

Parse error: syntax error, unexpected T_STRING in /home/rootverzeichnis/website/install.php on line 38
da er da wieder auf die normale install.php zurückgreifen will.

Laut der .htacess dürfte er es ja nicht, bzw. müsste sie als .php5 ansehen, macht er jedoch nicht.

Liebe Grüße Doddie
Zuletzt geändert von doddie am 29.12.2009, 13:02, insgesamt 1-mal geändert.
Benutzeravatar
cpt. crunch
Fortgeschrittener
Beiträge: 385
Registriert: 21.11.2009, 18:52

Re: Webspace-Support unglaublich...

Beitrag von cpt. crunch »

"Parse error" deutet aber erst einmal eher auf eine fehlendes Semikolon, Anführungszeichen oder Klammer hin.

http://www.php-faq.de/q-fehler-parse.html

Was steht in der Zeile 38 und davor im Script so drin?

WoltLab Burning Board 2 benötigt nicht zwingend PHP 5, empfohlen wird PHP 4.1.2 und höher.

http://www.woltlab.com/de/documentation/2.php#faq81
Zuletzt geändert von cpt. crunch am 29.12.2009, 13:06, insgesamt 1-mal geändert.
Samsung 37" LED TV D6510
Digitaler Empfang über KDG (gekündigt)
DVB-IP (IPTV) über Alice DSL
doddie
Newbie
Beiträge: 32
Registriert: 29.12.2009, 10:39

Re: Webspace-Support unglaublich...

Beitrag von doddie »

Code: Alles auswählen

<?php
/**
 * This script tries to find the temp folder and unzip all setup files into.
 * 
 * @author	Marcel Werk
 * @copyright	2001-2007 WoltLab GmbH
 * @license	GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
 */
// define constants
define('INSTALL_SCRIPT_DIR', dirname(__FILE__).'/');
define('SETUP_FILE', INSTALL_SCRIPT_DIR . 'WCFSetup.tar.gz');
define('NO_IMPORTS', true);

// set exception handler
set_exception_handler('handleException');
// set php error handler
set_error_handler('handleError', E_ALL);

// define list of needed file
$neededFilesPattern = array(
	'!^setup/.*!',
	'!^install/files/lib/data/.*!',
	'!^install/files/lib/acp/package/PackageArchive\.class\.php!',
	'!^install/files/lib/acp/package/Package\.class\.php!',
	'!^install/files/lib/system/.*!',
	'!^install/files/lib/util/.*!',
	'!^install/files/acp/images/setup.*!',
	'!^install/lang/.*!',
	'!^install/packages/.*!');
	
// define needed functions and classes
/**
 * WCF::handleException() calls the show method on exceptions that implement this interface.
 * 
 * @package	com.woltlab.wcf.system.exception
 * @author	Marcel Werk
 */
interface PrintableException {
	public function show();
}

// define needed classes
// needed are:
// SystemException, PrintableException, BasicFileUtil, Tar, File, ZipFile
/**
 * A SystemException is thrown when an unexpected error occurs.
 * 
 * @package	com.woltlab.wcf.system.exception
 * @author	Marcel Werk
 */
class SystemException extends Exception implements PrintableException {
	protected $description;
	protected $information = '';
	protected $functions = '';
	
	/**
	 * Creates a new SystemException.
	 * 
	 * @param	message		string		error message
	 * @param	code		integer		error code
	 * @param	description	string		description of the error	
	 */
	public function __construct($message = '', $code = 0, $description = '') {
		parent::__construct($message, $code);
		$this->description = $description;
	}
	
	/**
	 * Returns the description of this exception.
	 * 
	 * @return 	string
	 */
	public function getDescription() {
		return $this->description;
	}
	
	/**
	 * Prints this exception.
	 * This method is called by WCF::handleException().
	 */
	public function show() {
		?>
<html>
<head>
<title>Fatal error: <?php echo htmlspecialchars($this->getMessage()); ?></title>
<style type="text/css">
body {
	font-family: Verdana, Helvetica, sans-serif;
	font-size: 0.8em;
}
div {
	border: 1px outset lightgrey;
	padding: 3px;
	background-color: lightgrey;
}

div div {
	border: 1px inset lightgrey;
	padding: 4px;
}

h1 {
	background-color: #154268;
	padding: 4px;
	color: #fff;
	margin: 0 0 3px 0;
	font-size: 1.15em;
}
h2 {
	font-size: 1.1em;
	margin-bottom: 0;
}

pre, p {
	margin: 0;
}
</style>
</head>
<body>
	<div>
		<h1>Fatal error: <?php echo htmlspecialchars($this->getMessage()); ?></h1>
	
		<div>
			<p><?php echo $this->getDescription(); ?></p>
			<?php if ($this->getCode()) { ?><p>You get more information about the problem in our knowledge base: <a href="http://www.woltlab.com/help/?code=<?php echo intval($this->getCode()); ?>">http://www.woltlab.com/help/?code=<?php echo intval($this->getCode()); ?></a></p><?php } ?>
			
			<h2>Information:</h2>
			<p>
				<b>error message:</b> <?php echo htmlspecialchars($this->getMessage()); ?><br />
				<b>error code:</b> <?php echo intval($this->getCode()); ?><br />
				<?php echo $this->information; ?>
				<b>file:</b> <?php echo htmlspecialchars($this->getFile()); ?> (<?php echo $this->getLine(); ?>)<br />
				<b>php version:</b> <?php echo htmlspecialchars(phpversion()); ?><br />
				<b>wcf version:</b> <?php if (defined('WCF_VERSION')) echo WCF_VERSION; ?><br />
				<b>date:</b> <?php echo gmdate('r'); ?><br />
				<b>request:</b> <?php if (isset($_SERVER['REQUEST_URI'])) echo htmlspecialchars($_SERVER['REQUEST_URI']); ?><br />
				<b>referer:</b> <?php if (isset($_SERVER['HTTP_REFERER'])) echo htmlspecialchars($_SERVER['HTTP_REFERER']); ?><br />
			</p>
			
			<h2>Stacktrace:</h2>
			<pre><?php echo htmlspecialchars($this->getTraceAsString()); ?></pre>
		</div>
		
		<?php echo $this->functions; ?>
	</div>
</body>
</html>

<?php
	}
}

/**
 * Loads the required classes automatically.
 */
function __autoload($className) {
	// test whether the file exist
	if (!file_exists(TMP_DIR . TMP_FILE_PREFIX . $className . '.class.php')) {
		throw new SystemException('Unable to find class ' . $className . ' in temp folder');
	}

	// include file
	require_once(TMP_DIR . TMP_FILE_PREFIX . $className . '.class.php');
}

/**
 * Escapes strings for execution in sql queries.
 */
function escapeString($string) {
	return WCF::getDB()->escapeString($string);	
}

/**
 * Calls the show method on the given exception.
 * 
 * @param	Exception	$e	
 */
function handleException(Exception $e) {
	if ($e instanceof PrintableException) {
		$e->show();
		exit;
	}
	
	print $e;
}

/**
 * Catches php errors and throws instead a system exception.
 * 
 * @param	integer		$errorNo
 * @param	string		$message
 * @param	string		$filename
 * @param	integer		$lineNo
 */
function handleError($errorNo, $message, $filename, $lineNo) { 
	if (error_reporting() != 0) {
		$type = 'error';
		switch ($errorNo) {
			case 2: $type = 'warning';
				break;
			case 8: $type = 'notice';
				break;
		}
		
		throw new SystemException('PHP '.$type.' in file '.$filename.' ('.$lineNo.'): '.$message, 0);
	}
}

/**
 * BasicFileUtil contains file-related functions.
 * 
 * @package 	com.woltlab.wcf.util
 * @author	Marcel Werk
 */
class BasicFileUtil {
	/**
	 * Tries to find the temp folder.
	 * 
	 * @return	string
	 */
	public static function getTempFolder() {
		// use tmp folder in document root by default
		if (!empty($_SERVER['DOCUMENT_ROOT'])) {
			if (strpos($_SERVER['DOCUMENT_ROOT'], 'strato') !== false) {
				// strato bugfix
				// create tmp folder in document root automatically
				if (!@file_exists($_SERVER['DOCUMENT_ROOT'].'/tmp')) { 
					@mkdir($_SERVER['DOCUMENT_ROOT'].'/tmp/', 0777);
					@chmod($_SERVER['DOCUMENT_ROOT'].'/tmp/', 0777);
				}
			}
			if (@file_exists($_SERVER['DOCUMENT_ROOT'].'/tmp') && @is_writable($_SERVER['DOCUMENT_ROOT'].'/tmp')) {
				return $_SERVER['DOCUMENT_ROOT'].'/tmp/';
			}
		}
		
		if (isset($_ENV['TMP']) && @is_writable($_ENV['TMP'])) {
			return $_ENV['TMP'] . '/';
		}
		if (isset($_ENV['TEMP']) && @is_writable($_ENV['TEMP'])) {
			return $_ENV['TEMP'] . '/';
		}
		if (isset($_ENV['TMPDIR']) && @is_writable($_ENV['TMPDIR'])) {
			return $_ENV['TMPDIR'] . '/';
		}
		
		// workaround for a bug in php 5.1.2 that returns true for is_writable('/tmp/') with safe_mode = on
		if (!preg_match('/^5\.1\.2(?![.0-9])/', phpversion())) {
			if (($path = ini_get('upload_tmp_dir')) && @is_writable($path)) {
				return $path . '/';
			}
			if (@file_exists('/tmp/') && @is_writable('/tmp/')) {
				return '/tmp/';
			}
			if (function_exists('session_save_path') && ($path = session_save_path()) && @is_writable($path)) {
				return $path . '/';
			}
		}
		
		$path = INSTALL_SCRIPT_DIR.'tmp/';
		if (@file_exists($path) && @is_writable($path)) {
			return $path;
		}
		else {
			if (ini_get('safe_mode')) $reason = "due to php safe_mode restrictions";
			else $reason = "due to an unknown reason";
			throw new SystemException('There is no access to the system temporary folder '.$reason.' and no user specific temporary folder exists in '.INSTALL_SCRIPT_DIR.'! This is a misconfiguration of your webserver software! Please create a folder called '.$path.' using your favourite ftp program, make it writable and then retry this installation.', 10000);
		}
	}
}

/**
 * Opens tar or tar.gz archives.
 * 
 * Usage:
 * ------
 * $tar = new Tar('archive.tar');
 * $contentList = $tar->getContentList();
 * foreach ($contentList as $key => $val) {
 * 	$tar->extract($key, DESTINATION);
 * }
 */
class Tar {
	protected $archiveName = '';
	protected $contentList = array();
	protected $opened = false;
	protected $read = false;
	protected $file = null;
	protected $isZipped = false;
	protected $mode = 'rb';
	
	/**
	 * Creates a new Tar object.
	 * archiveName must be tarball or gzipped tarball
	 * 
	 * @param 	string 		$archiveName
	 */
	public function __construct($archiveName) {
		$match = array();
		if (!is_file($archiveName)) {
			throw new SystemException("unable to find tar archive '".$archiveName."'", 11002);
		}
		
		$this->archiveName = $archiveName;
		$this->open();
		$this->readContent();
	}
	
	/**
	 * Destructor of this class, closes tar archive.
	 */
	public function __destruct() {
		$this->close();
	}
	
	/**
	 * Opens the tar archive and stores filehandle.
	 */
	public function open() {
		if (!$this->opened) {
			if ($this->isZipped) $this->file = new ZipFile($this->archiveName, $this->mode);
			else {
				// test compression
				$this->file = new File($this->archiveName, $this->mode);
				if ($this->file->read(2) == "\37\213") {
					$this->file->close();
					$this->isZipped = true;
					$this->file = new ZipFile($this->archiveName, $this->mode);
				}
				else {
					$this->file->seek(0);
				}
			}
			$this->opened = true;
		}
	}

	/**
	 * Closes the opened file.
	 */
	public function close() {
		if ($this->opened) {
			$this->file->close();
			$this->opened = false;
		}
	}
	
	/** 
	 * Returns the table of contents (TOC) list for this tar archive.
	 * 
	 * @return 	array 		list of content
	 */
	public function getContentList() {
		if (!$this->read) {
			$this->open();
			$this->readContent();
		}
		return $this->contentList;
	}
	
	/**
	 * Returns an associative array with information
	 * about a specific file in the archive.
	 *
	 * @param 	mixed 	$fileindex	index or name of the requested file
	 * @return 	array 	$fileInfo
	 */
	public function getFileInfo($fileIndex) {
		if (!is_int($fileIndex)) {
			$fileIndex = $this->getIndexByFilename($fileIndex);
		}
		
		if (!isset($this->contentList[$fileIndex])) {
			throw new SystemException("Tar: could find file '$index' in archive", 11013);
		}
		return $this->contentList[$fileIndex];
	}
	
	/**
	 * Searchs a file in the tar archive
	 * and returns the numeric fileindex.
	 * Returns false if not found.
	 *
	 * @param 	string 		$filename
	 * @return 	integer 			index of the requested file
	 */
	public function getIndexByFilename($filename) {
		foreach ($this->contentList as $index => $file) {
			if ($file['filename'] == $filename) {
				return $index;
			}
		}
		return false;
	}
	
	/**
	 * Extracts a specific file and returns the content as string.
	 * Returns false if extraction failed.
	 * 
	 * @param 	mixed 		$index		index or name of the requested file
	 * @return 	string 				content of the requested file
	 */
	public function extractToString($index) {
		if (!$this->read) {
			$this->open();
			$this->readContent();
		}
		$header = $this->getFileInfo($index);
		
		// can not extract a folder
		if ($header['type'] != 'file') {
			return false;
		}
		
		// seek to offset
		$this->file->seek($header['offset']);
		
		// read data
		$content = '';
		$n = floor($header['size'] / 512);
		for($i = 0; $i < $n; $i++) {
			$content .= $this->file->read(512);
		}
		if(($header['size'] % 512) != 0) {
			$buffer = $this->file->read(512);
			$content .= substr($buffer, 0, ($header['size'] % 512));
		}
		
		return $content;
	}
	
	/**
	 * Extracts a specific file and writes it's content
	 * to the file specified with $destination.
	 * 
	 * @param 	mixed 		$index		index or name of the requested file
	 * @param 	string 		$destination
	 * @return 	boolean 	$success
	 */
	public function extract($index, $destination) {
		if (!$this->read) {
			$this->open();
			$this->readContent();
		}
		$header = $this->getFileInfo($index);
		
		// can not extract a folder
		if ($header['type'] != 'file') {
			return false;
		}
		
		// seek to offset
		$this->file->seek($header['offset']);
		
		$targetFile = new File($destination);
		
		// read data
		$n = floor($header['size'] / 512);
		for ($i = 0; $i < $n; $i++) {
			$content = $this->file->read(512);
			$targetFile->write($content, 512);
		}
		if (($header['size'] % 512) != 0) {
			$content = $this->file->read(512);
			$targetFile->write($content, ($header['size'] % 512));
		}
		
		$targetFile->close();
		if (function_exists('apache_get_version') || !@$targetFile->is_writable()) {
			@$targetFile->chmod(0777);
		}
		else {
			@$targetFile->chmod(0755);
		}	
		
		if ($header['mtime']) {
			@$targetFile->touch($header['mtime']);
		}
		
		// check filesize
		if (filesize($destination) != $header['size']) {
			throw new SystemException("Could not untar file '".$header['filename']."' to '".$destination."'. Maybe disk quota exceeded in folder '".dirname($destination)."'.", 11015);
		}
		
		return true;
	}	
	
	/**
	 * Reads table of contents (TOC) from tar archive.
	 * This does not get the entire to memory but only parts of it.
	 */
	protected function readContent() {
		$this->contentList = array();
		$this->read = true;
		$i = 0;
		
		// Read the 512 bytes header
		while (strlen($binaryData = $this->file->read(512)) != 0) {
			// read header
			$header = $this->readHeader($binaryData);
			if ($header === false) {
				continue;	
			}
			$this->contentList[$i] = $header;
			$this->contentList[$i]['index'] = $i;
			$i++;
			
			$this->file->seek($this->file->tell() + (512 * ceil(($header['size'] / 512))));
		}
	}
	
	/**
	 * Unpacks file header for one file entry.
	 *
	 * @param 	string 		$binaryData
	 * @return 	array 		$fileheader
	 */
	protected function readHeader($binaryData) {
		if (strlen($binaryData) != 512) {
			return false;	
		}

		$header = array();
		$checksum = 0;
		// First part of the header
		for ($i = 0; $i < 148; $i++) {
			$checksum += ord(substr($binaryData, $i, 1));
		}
		// Calculate the checksum
		// Ignore the checksum value and replace it by ' ' (space)
		for ($i = 148; $i < 156; $i++) {
			$checksum += ord(' ');
		}
		// Last part of the header
		for ($i = 156; $i < 512; $i++) {
			$checksum += ord(substr($binaryData, $i, 1));
		}

		// Extract the values
		$data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $binaryData);
		
		// Extract the properties
		$header['checksum'] = OctDec(trim($data['checksum']));
		if($header['checksum'] == $checksum) {
			$header['filename'] = trim($data['filename']);
			$header['mode'] = OctDec(trim($data['mode']));
			$header['uid'] = OctDec(trim($data['uid']));
			$header['gid'] = OctDec(trim($data['gid']));
			$header['size'] = OctDec(trim($data['size']));
			$header['mtime'] = OctDec(trim($data['mtime']));
			if(($header['typeflag'] = $data['typeflag']) == '5') {
				$header['size'] = 0;
				$header['type'] = 'folder';
			}
			else {
				$header['type'] = 'file';
			}
			$header['offset'] = $this->file->tell();
			
			return $header;
		}
		else {
			return false;
		}
	}
}

/**
 * The File class handles all file operations.
 * 
 * Example:
 * using php functions:
 * $fp = fopen('filename', 'wb');
 * fwrite($fp, '...');
 * fclose($fp);
 * 
 * using this class:
 * $file = new File('filename');
 * $file->write('...');
 * $file->close();
 * 
 * @author	Marcel Werk
 */
class File {
	protected $resource = null;
	protected $filename;
	
	/**
	 * Opens a new file.
	 * 
	 * @param 	string		$filename
	 * @param 	string		$mode
	 */
	public function __construct($filename, $mode = 'wb') {
		$this->filename = $filename;
		$this->resource = fopen($filename, $mode);
		if ($this->resource === false) {
			throw new SystemException('Can not open file ' . $filename, 11012);
		}
	}
	
	/**
	 * Calls the specified function on the open file.
	 * Do not call this function directly. Use $file->write('') instead.
	 * 
	 * @param 	string		$function
	 * @param 	array		$arguments
	 */
	public function __call($function, $arguments) {
		if (function_exists('f' . $function)) {
			array_unshift($arguments, $this->resource);
	       		return call_user_func_array('f' . $function, $arguments);
		}
		else if (function_exists($function)) {
			array_unshift($arguments, $this->filename);
	       		return call_user_func_array($function, $arguments);
		}
		else {
			throw new SystemException('Can not call file method ' . $function, 11003);
		}
	}
}

/**
 * The File class handles all file operations on a zipped file.
 *  
 * @author	Marcel Werk
 */
class ZipFile extends File {
	/**
	 * Opens a new zipped file.
	 * 
	 * @param  	string		$filename
	 * @param 	string		$mode
	 */
	public function __construct($filename, $mode = 'wb') {
		$this->filename = $filename;
		if (!function_exists('gzopen')) {
			throw new SystemException('Can not find functions of the zlib extension', 11004);
		}
		$this->resource = @gzopen($filename, $mode);
		if ($this->resource === false) {
			throw new SystemException('Can not open file ' . $filename, 11012);
		}
	}
	
	/**
	 * Calls the specified function on the open file.
	 * 
	 * @param 	string		$function
	 * @param 	array		$arguments
	 */
	public function __call($function, $arguments) {
		if (function_exists('gz' . $function)) {
			array_unshift($arguments, $this->resource);
	       		return call_user_func_array('gz' . $function, $arguments);
		}
		else if (function_exists($function)) {
			array_unshift($arguments, $this->filename);
	       		return call_user_func_array($function, $arguments);
		}
		else {
			throw new SystemException('Can not call method ' . $function, 11003);
		}
	}
	
	/**
	 * Returns the filesize of the unzipped file
	 */
	public function getFileSize() {
		$byteBlock = 1<<14;
		$eof = $byteBlock;
		
		// the correction is for zip files that are too small 
		// to get in the first while loop 
		$correction = 1;
		while ($this->seek($eof) == 0) {
			$eof += $byteBlock;
			$correction = 0;
		}
		
		while ($byteBlock > 1) {
			$byteBlock >>= 1;
			$eof += $byteBlock * ($this->seek($eof) ? -1 : 1);
		}
		
		if ($this->seek($eof) == -1) $eof -= 1;
		
		$this->rewind();
		return $eof - $correction;
	}
}

// let's go
// try to find the temp folder
define('TMP_DIR', BasicFileUtil::getTempFolder());

// get temp file prefix
if (isset($_REQUEST['tmpFilePrefix'])) {
	$prefix = preg_replace('/[^a-f0-9_]+/', '', $_REQUEST['tmpFilePrefix']);	
}
else {
	$prefix = substr(sha1(uniqid(microtime())), 0, 8) . '_';
}
define('TMP_FILE_PREFIX', $prefix);

// show image from temp folder
if (isset($_GET['showImage'])) {
	if (preg_match('~\w+\.jpg~', $_GET['showImage'])) {
		header('Content-Type: image/jpg');
		readfile(TMP_DIR . TMP_FILE_PREFIX . $_GET['showImage']);
	}
	exit;
}

// check whether setup files already unzipped
if (!file_exists(TMP_DIR . TMP_FILE_PREFIX . 'WCFSetup.class.php')) {
	// try to unzip all setup files into temp folder
	$tar = new Tar(SETUP_FILE);
	$contentList = $tar->getContentList();
	if (!count($contentList)) {
		throw new SystemException("Can not unpack 'WCFSetup.tar.gz'. File is probably broken.", 11016);
	}
	
	foreach ($contentList as $file) {
		// we don't need any folders
		if ($file['type'] != 'folder') {
			// unzip file if pattern match
			foreach ($neededFilesPattern as $pattern) {
				if (preg_match($pattern, $file['filename'])) {
					$tar->extract($file['index'], TMP_DIR . TMP_FILE_PREFIX . basename($file['filename']));
				}
			}
		}
	}
	$tar->close();
}

if (!class_exists('WCFSetup')) {
	throw new SystemException("Can not find class 'WCFSetup'", 11006);
}

// start setup
new WCFSetup();
?>
Nagut hier nen fehler zu finden.. puh. Also das ist jetzt die komplette install.php die aber nur mit install.php5 aufrufbar ist.