PHP-Code:
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
/**
* TYPOlight webCMS
* Copyright (C) 2005-2009 Leo Feyer
*
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program. If not, please visit the Free
* Software Foundation website at http://www.gnu.org/licenses/.
*
* PHP version 5
* @copyright Leo Feyer 2005-2009
* @author Leo Feyer <leo@https://contao.org>
* @package System
* @license LGPL
* @filesource
*/
/**
* Class autoloader
*
* Include classes automatically when they are instantiated.
* @param string
*/
function __autoload($strClassName)
{
// Library
if (file_exists(TL_ROOT . '/system/libraries/' . $strClassName . '.php'))
{
include_once(TL_ROOT . '/system/libraries/' . $strClassName . '.php');
return;
}
// Modules
foreach (scan(TL_ROOT . '/system/modules/') as $strFolder)
{
if (substr($strFolder, 0, 1) == '.')
{
continue;
}
if (file_exists(TL_ROOT . '/system/modules/' . $strFolder . '/' . $strClassName . '.php'))
{
include_once(TL_ROOT . '/system/modules/' . $strFolder . '/' . $strClassName . '.php');
return;
}
}
// HOOK: include DOMPDF classes
if (function_exists('DOMPDF_autoload'))
{
DOMPDF_autoload($strClassName);
return;
}
trigger_error(sprintf('Could not load class %s', $strClassName), E_USER_ERROR);
}
/**
* Error handler
*
* Handle errors like PHP does it natively but additionaly log them to the
* application error log file.
* @param int
* @param string
* @param string
* @param int
*/
function __error($intType, $strMessage, $strFile, $intLine)
{
$arrErrors = array
(
E_ERROR => 'Fatal error',
E_WARNING => 'Warning',
E_PARSE => 'Parsing error',
E_NOTICE => 'Notice',
E_CORE_ERROR => 'Core error',
E_CORE_WARNING => 'Core warning',
E_COMPILE_ERROR => 'Compile error',
E_COMPILE_WARNING => 'Compile warning',
E_USER_ERROR => 'Fatal error',
E_USER_WARNING => 'Warning',
E_USER_NOTICE => 'Notice',
E_STRICT => 'Runtime notice',
4096 => 'Recoverable error',
8192 => 'Deprecated notice'
);
// Ignore functions with an error control operator (@function_name)
if (ini_get('error_reporting') > 0)
{
if ($intType != E_NOTICE)
{
// Log error
error_log(sprintf('PHP %s: %s in %s on line %s',
$arrErrors[$intType],
$strMessage,
$strFile,
$intLine));
// Display error
if (ini_get('display_errors'))
{
$strMessage = sprintf('<strong>%s</strong>: %s in <strong>%s</strong> on line <strong>%s</strong>',
$arrErrors[$intType],
$strMessage,
$strFile,
$intLine);
echo '<br />' . $strMessage;
}
}
// Exit on severe errors
if (in_array($intType, array(E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR)))
{
show_help_message();
exit;
}
}
}
/**
* Exception handler
*
* Log exceptions in the application log file and print them to the screen
* if "display_errors" is set. Callback to a custom exception handler defined
* in the application file "config/error.php".
* @param object
*/
function __exception($e)
{
error_log(sprintf("PHP Fatal error: Uncaught exception '%s' with message '%s' thrown in %s on line %s",
get_class($e),
$e->getMessage(),
$e->getFile(),
$e->getLine()));
// Display exception
if (ini_get('display_errors'))
{
$strMessage = sprintf('<strong>Fatal error</strong>: Uncaught exception <strong>%s</strong> with message <strong>%s</strong> thrown in <strong>%s</strong> on line <strong>%s</strong>',
get_class($e),
$e->getMessage(),
$e->getFile(),
$e->getLine());
$strMessage .= "\n" . '<pre style="margin: 11px 0px 0px 0px;">' . "\n" . $e->getTraceAsString() . "\n" . '</pre>';
echo '<br />' . $strMessage;
}
show_help_message();
exit;
}
/**
* Show a special TYPOlight "what to do in case of an error" message
*/
function show_help_message()
{
if (!ini_get('display_errors'))
{
header('HTTP/1.1 500 Internal Server Error');
if (file_exists(TL_ROOT . '/system/modules/backend/templates/be_error.tpl'))
{
include(TL_ROOT . '/system/modules/backend/templates/be_error.tpl');
exit;
}
echo 'An error occurred while executing this script!';
}
}
/**
* Add a log entry
* @param string
* @param string
*/
function log_message($strMessage, $strLog='error.log')
{
@error_log(sprintf("[%s] %s\n", date('Y-m-d H:i:s'), $strMessage), 3, TL_ROOT . '/system/logs/' . $strLog);
}
/**
* Scan a directory and return its files and folders as array
* @param string
* @return array
*/
function scan($strFolder)
{
global $arrScanCache;
// Add trailing slash
if (substr($strFolder, -1, 1) != '/')
{
$strFolder .= '/';
}
// Load from cache
if (isset($arrScanCache[$strFolder]))
{
return $arrScanCache[$strFolder];
}
$arrReturn = array();
// Scan directory
foreach (scandir($strFolder) as $strFile)
{
if ($strFile == '.' || $strFile == '..')
{
continue;
}
$arrReturn[] = $strFile;
}
$arrScanCache[$strFolder] = $arrReturn;
return $arrReturn;
}
/**
* Convert special characters except ampersands to HTML entities
* @param string
* @return string
*/
function specialchars($strString)
{
$arrFind = array('"', "'", '<', '>');
$arrReplace = array('"', ''', '<', '>');
return str_replace($arrFind, $arrReplace, $strString);
}
/**
* Standardize a parameter (strip special characters and convert spaces to underscores)
* @param mixed
* @return mixed
*/
function standardize($varValue)
{
$varValue = utf8_romanize($varValue);
$varValue = preg_replace('/[^a-zA-Z0-9 _-]+/i', '', $varValue);
$varValue = preg_replace('/ +/i', '-', $varValue);
if (preg_match('/^[^a-zA-Z]/i', $varValue))
{
$varValue = 'id-' . $varValue;
}
return strtolower($varValue);
}
/**
* Return an unserialized array or the argument
* @param mixed
* @param boolean
* @return mixed
*/
function deserialize($varValue, $blnForceArray=false)
{
if (!is_string($varValue) || !strlen(trim($varValue)))
{
return ($blnForceArray && !is_array($varValue)) ? array($varValue) : $varValue;
}
$varUnserialized = unserialize($varValue);
if (is_array($varUnserialized))
{
$varValue = $varUnserialized;
}
elseif ($blnForceArray)
{
$varValue = array($varValue);
}
return $varValue;
}
/**
* Split a string into fragments, remove whitespace and return fragments as array
* @param string
* @param string
* @return string
*/
function trimsplit($strPattern, $strString)
{
$arrFragments = array_map('trim', preg_split('/'.$strPattern.'/ui', $strString));
if (count($arrFragments) < 2 && !strlen($arrFragments[0]))
{
return array();
}
return $arrFragments;
}
/**
* Convert all ampersands into their HTML entity (default) or unencoded value
* @param string
* @return string
*/
function ampersand($strString, $blnEncode=true)
{
return preg_replace('/&(amp;)?/i', ($blnEncode ? '&' : '&'), $strString);
}
/**
* Insert HTML line breaks before all newlines preserving preformatted text
* @param string
* @return string
*/
function nl2br_pre($str)
{
$str = nl2br($str);
if (stripos($str, '<pre') === false)
return $str;
$chunks = array();
preg_match_all('/<pre[^>]*>.*<\/pre>/Uis', $str, $chunks);
foreach ($chunks as $chunk)
{
$str = str_replace($chunk, str_ireplace(array('<br>', '<br />'), '', $chunk), $str);
}
return $str;
}
/**
* Compare two file names using a case insensitive "natural order" algorithm
* @param string
* @param string
* @return integer
*/
function basename_natcasecmp($a, $b)
{
return strnatcasecmp(basename($a), basename($b));
}
/**
* Compare two file names using a case insensitive, reverse "natural order" algorithm
* @param string
* @param string
* @return integer
*/
function basename_natcasercmp($a, $b)
{
return - strnatcasecmp(basename($a), basename($b));
}
/**
* Sort an array by keys using a case insensitive "natural order" algorithm
* @param array
* @return array
*/
function natcaseksort($arrArray)
{
$arrBuffer = array_flip($arrArray);
natcasesort($arrBuffer);
return array_flip($arrBuffer);
}
/**
* Insert a parameter or array into an existing array at a particular index
* @param array
* @param int
* @param mixed
*/
function array_insert(&$arrCurrent, $intIndex, $arrNew)
{
if (!is_array($arrCurrent))
{
$arrCurrent = $arrNew;
return;
}
if (is_array($arrNew))
{
$arrBuffer = array_splice($arrCurrent, 0, $intIndex);
$arrCurrent = array_merge_recursive($arrBuffer, $arrNew, $arrCurrent);
return;
}
array_splice($arrCurrent, $intIndex, 0, $arrNew);
}
/**
* Duplicate a particular element of an array
* @param array
* @param integer
* @return array
*/
function array_duplicate($arrStack, $intIndex)
{
$arrBuffer = $arrStack;
$arrStack = array();
for ($i=0; $i<=$intIndex; $i++)
{
$arrStack[] = $arrBuffer[$i];
}
for ($i=$intIndex; $i<count($arrBuffer); $i++)
{
$arrStack[] = $arrBuffer[$i];
}
return $arrStack;
}
/**
* Move an array element one position up
* @param array
* @param integer
* @return array
*/
function array_move_up($arrStack, $intIndex)
{
if ($intIndex > 0)
{
$arrBuffer = $arrStack[$intIndex];
$arrStack[$intIndex] = $arrStack[($intIndex-1)];
$arrStack[($intIndex-1)] = $arrBuffer;
}
else
{
array_push($arrStack, $arrStack[$intIndex]);
array_shift($arrStack);
}
return $arrStack;
}
/**
* Move an array element one position down
* @param array
* @param int
* @return array
*/
function array_move_down($arrStack, $intIndex)
{
if (($intIndex+1) < count($arrStack))
{
$arrBuffer = $arrStack[$intIndex];
$arrStack[$intIndex] = $arrStack[($intIndex+1)];
$arrStack[($intIndex+1)] = $arrBuffer;
}
else
{
array_unshift($arrStack, $arrStack[$intIndex]);
array_pop($arrStack);
}
return $arrStack;
}
/**
* Delete a particular element of an array
* @param array
* @param int
* @return array
*/
function array_delete($arrStack, $intIndex)
{
unset($arrStack[$intIndex]);
return array_values($arrStack);
}
/**
* Return true if an array is associative
* @param array
* @return boolean
*/
function array_is_assoc($arrArray)
{
return (is_array($arrArray) && array_keys($arrArray) !== range(0, (sizeof($arrArray) - 1)));
}
/**
* Load the mbstring library
*/
require(TL_ROOT . '/system/mbstring.php');
/**
* Define some mbstring wrapper functions
*/
if (!USE_MBSTRING)
{
// mb_convert_encoding
function mb_convert_encoding($str, $to, $from=null)
{
if (is_null($from))
return utf8_convert_encoding($str, $to);
return utf8_convert_encoding($str, $to, $from);
}
// mb_detect_encoding
function mb_detect_encoding($str)
{
return utf8_detect_encoding($str);
}
// mb_stripos
function mb_stripos($haystack, $needle, $offset=null)
{
if (is_null($offset))
return stripos($haystack, $needle);
return stripos($haystack, $needle, $offset);
}
// mb_stristr
function mb_stristr($haystack, $needle)
{
return stristr($haystack, $needle);
}
// mb_strlen
function mb_strlen($str)
{
return utf8_strlen($str);
}
// mb_strpos
function mb_strpos($haystack, $needle, $offset=null)
{
if (is_null($offset))
return utf8_strpos($haystack, $needle);
return utf8_strpos($haystack, $needle, $offset);
}
// mb_strrchr
function mb_strrchr($haystack, $needle)
{
return utf8_strrchr($haystack, $needle);
}
// mb_strrpos
function mb_strrpos($haystack, $needle)
{
return utf8_strrpos($haystack, $needle);
}
// mb_strstr
function mb_strstr($haystack, $needle)
{
return utf8_strstr($haystack, $needle);
}
// mb_strtolower
function mb_strtolower($str)
{
return utf8_strtolower($str);
}
// mb_strtoupper
function mb_strtoupper($str)
{
return utf8_strtoupper($str);
}
// mb_substr
function mb_substr($str, $start, $length=null)
{
if (is_null($length))
return utf8_substr($str, $start);
return utf8_substr($str, $start, $length);
}
// mb_substr_count
function mb_substr_count($haystack, $needle, $offset=null)
{
if (is_null($offset))
return substr_count($haystack, $needle);
return substr_count($haystack, $needle, $offset);
}
}
function unixtojd($tstamp=false)
{
if ($tstamp === false)
{
$tstamp = time();
}
$tmpdate = explode(',', date('Y,m,d', $tstamp));
// Make year a positive number
$year = $tmpdate[0] + ($tmpdate[0] < 0 ? 4801 : 4800);
// Adjust the start of the year
if ($tmpdate[1] > 2)
{
$month = $tmpdate[1] - 3;
}
else
{
$month = $tmpdate[1] + 9;
--$year;
}
$sdn = floor((floor($year / 100) * 146097) / 4);
$sdn += floor((($year % 100) * 1461) / 4);
$sdn += floor(($month * 153 + 2) / 5);
$sdn += $tmpdate[2] - 32045;
return $sdn;
}
?>
probier dieses mal.
Lesezeichen