Tech 22. Jan. 2008

TYPO3: Include von TYPO3 Libs und eigenen Extension-Funktionen in standalone PHP Skripten

In einigen Fällen braucht man eigenständigt PHP Skripte, welche nicht durch das TYPO3 Seiten Rendering laufen, z.B. beim Crawler der Indexed Search oder Direct Mail und auch dem Captcha Tool. Z.T. ist die auch nötig, um Dateien zu streamen oder Webservices anzubinden. Dabei müssen aber auch die eigenständigen PHP Skripte auf TYPO3 Libs und Extension Funktionen (z.B: Model APIs) zurückgreifen können. Die genannten Beispiele tuen so etwas und man kann sich daran orientieren. Allerdings ist die Implementierung der Includes im Detail etwas unterschiedlich und verursacht bei unterschiedlichen Serverkonfigurationen z.T. Probleme. Hier ein Code-Beispiel, welches dieses Problem adressiert und versucht zu beheben.

error_reporting (E_ALL ^ E_NOTICE);

session_start();

define(’TYPO3_MODE’, ‘FE’);
define(’PATH_root’, $_SERVER[’DOCUMENT_ROOT’]);

if ($_SERVER[’PHP_SELF’]) {
	if (!defined(’PATH_thisScript’)) define(’PATH_thisScript’,$_SERVER[’PHP_SELF’]);
} else {
	if (!defined(’PATH_thisScript’)) define(’PATH_thisScript’,str_replace(’//’,'/’, str_replace(’\',’/', $_ENV[’_'])).’/');
}

// ATTENTION: check in which level the current script is
define(’PATH_site’, str_replace(’//’,'/’,
$_SERVER[’DOCUMENT_ROOT’].'’.dirname(dirname(dirname(dirname(dirname(PATH_thisScript))))).’/'));

define(’PATH_this’, PATH_root.dirname(PATH_thisScript).’/');
define(’PATH_typo3conf’, PATH_site.’typo3conf/’);
define(’PATH_t3lib’, PATH_site.’t3lib/’);

if (!defined(’PATH_tslib’)) {
	if (@is_dir(PATH_site.’typo3/sysext/cms/tslib/’)) {
		define(’PATH_tslib’, PATH_site.’typo3/sysext/cms/tslib/’);
	} elseif (@is_dir(PATH_site.’tslib/’)) {
		define(’PATH_tslib’, PATH_site.’tslib/’);
	}
}

require_once(PATH_t3lib.’class.t3lib_div.php’);
require_once(PATH_t3lib.’class.t3lib_extmgm.php’);
require_once(PATH_t3lib.’config_default.php’);

In einigen Fällen braucht man eigenständigt PHP Skripte, welche nicht durch das TYPO3 Seiten Rendering laufen, z.B. beim Crawler der Indexed Search oder Direct Mail und auch dem Captcha Tool. Z.T. ist die auch nötig, um Dateien zu streamen oder Webservices anzubinden. Dabei müssen aber auch die eigenständigen PHP Skripte auf TYPO3 Libs und Extension Funktionen (z.B: Model APIs) zurückgreifen können. Die genannten Beispiele tuen so etwas und man kann sich daran orientieren. Allerdings ist die Implementierung der Includes im Detail etwas unterschiedlich und verursacht bei unterschiedlichen Serverkonfigurationen z.T. Probleme. Hier ein Code-Beispiel, welches dieses Problem adressiert und versucht zu beheben.

error_reporting (E_ALL ^ E_NOTICE);

session_start();

define(’TYPO3_MODE’, ‘FE’);
define(’PATH_root’, $_SERVER[’DOCUMENT_ROOT’]);

if ($_SERVER[’PHP_SELF’]) {
	if (!defined(’PATH_thisScript’)) define(’PATH_thisScript’,$_SERVER[’PHP_SELF’]);
} else {
	if (!defined(’PATH_thisScript’)) define(’PATH_thisScript’,str_replace(’//’,'/’, str_replace(’\',’/', $_ENV[’_'])).’/');
}

// ATTENTION: check in which level the current script is
define(’PATH_site’, str_replace(’//’,'/’,
$_SERVER[’DOCUMENT_ROOT’].'’.dirname(dirname(dirname(dirname(dirname(PATH_thisScript))))).’/'));

define(’PATH_this’, PATH_root.dirname(PATH_thisScript).’/');
define(’PATH_typo3conf’, PATH_site.’typo3conf/’);
define(’PATH_t3lib’, PATH_site.’t3lib/’);

if (!defined(’PATH_tslib’)) {
	if (@is_dir(PATH_site.’typo3/sysext/cms/tslib/’)) {
		define(’PATH_tslib’, PATH_site.’typo3/sysext/cms/tslib/’);
	} elseif (@is_dir(PATH_site.’tslib/’)) {
		define(’PATH_tslib’, PATH_site.’tslib/’);
	}
}

require_once(PATH_t3lib.’class.t3lib_div.php’);
require_once(PATH_t3lib.’class.t3lib_extmgm.php’);
require_once(PATH_t3lib.’config_default.php’);