die();
} // END - if
-// Sends out all headers required for HTTP/1.1 reply
-function sendHttpHeaders () {
- // Used later
- $now = gmdate('D, d M Y H:i:s') . ' GMT';
-
- // Send HTTP header
- sendHeader('HTTP/1.1 ' . getHttpStatus());
-
- // General headers for no caching
- sendHeader('Expires: ' . $now); // RFC2616 - Section 14.21
- sendHeader('Last-Modified: ' . $now);
- sendHeader('Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
- sendHeader('Pragma: no-cache'); // HTTP/1.0
- sendHeader('Connection: Close');
- sendHeader('Content-Type: ' . getContentType() . '; charset=UTF-8');
- sendHeader('Content-Language: ' . getLanguage());
-}
-
// Init fatal message array
function initFatalMessages () {
$GLOBALS['fatal_messages'] = array();
$toEmail = getUserData('email');
} else {
// Set webmaster
- $toEmail = getConfig('WEBMASTER');
+ $toEmail = getWebmaster();
}
}
} elseif ($toEmail == '0') {
// Is the webmaster!
- $toEmail = getConfig('WEBMASTER');
+ $toEmail = getWebmaster();
}
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail}<br />");
return sendRawEmail($toEmail, $subject, $message, $mailHeader);
} elseif ($isHtml != 'Y') {
// Problem detected while sending a mail, forward it to admin
- return sendRawEmail(getConfig('WEBMASTER'), '[PROBLEM:]' . $subject, $message, $mailHeader);
+ return sendRawEmail(getWebmaster(), '[PROBLEM:]' . $subject, $message, $mailHeader);
}
// Why did we end up here? This should not happen
$mail->Username = getConfig('SMTP_USER');
$mail->Password = getConfig('SMTP_PASSWORD');
if (empty($headers)) {
- $mail->From = getConfig('WEBMASTER');
+ $mail->From = getWebmaster();
} else {
$mail->From = $headers;
}
}
$mail->AddAddress($toEmail, '');
- $mail->AddReplyTo(getConfig('WEBMASTER'), getMainTitle());
- $mail->AddCustomHeader('Errors-To:' . getConfig('WEBMASTER'));
- $mail->AddCustomHeader('X-Loop:' . getConfig('WEBMASTER'));
- $mail->AddCustomHeader('Bounces-To:' . getConfig('WEBMASTER'));
+ $mail->AddReplyTo(getWebmaster(), getMainTitle());
+ $mail->AddCustomHeader('Errors-To:' . getWebmaster());
+ $mail->AddCustomHeader('X-Loop:' . getWebmaster());
+ $mail->AddCustomHeader('Bounces-To:' . getWebmaster());
$mail->Send();
// Has an error occured?
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'URL=' . $URL);
//* DEBUG: */ die($URL);
- // Simple probe for bots/spiders from search engines
- if ((isSpider()) && ($allowSpider === true)) {
- // Set HTTP-Status
- setHttpStatus('200 OK');
-
- // Set content-type here to fix a missing array element
- setContentType('text/html');
-
- // Output new location link as anchor
- outputHtml('<a href="' . $URL . '"' . $rel . '>' . secureString($URL) . '</a>');
- } elseif (!headers_sent()) {
+ // We should not sent a redirect if headers are already sent
+ if (!headers_sent()) {
// Clear output buffer
clearOutputBuffer();
//
// Deprecated : $length (still has one reference in this function)
-// Optional : $DATA
+// Optional : $extraData
//
-function generateRandomCode ($length, $code, $userid, $DATA = '') {
+function generateRandomCode ($length, $code, $userid, $extraData = '') {
// Build server string
$server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRealIpAddress() . getEncryptSeperator() . detectRemoteAddr();
// Build key string
- $keys = getConfig('SITE_KEY') . getEncryptSeperator() . getConfig('DATE_KEY');
+ $keys = getSiteKey() . getEncryptSeperator() . getDateKey();
if (isConfigEntrySet('secret_key')) {
$keys .= getEncryptSeperator().getSecretKey();
} // END - if
} // END - if
// Build string from misc data
- $data = $code . getEncryptSeperator() . $userid . getEncryptSeperator() . $DATA;
+ $data = $code . getEncryptSeperator() . $userid . getEncryptSeperator() . $extraData;
// Add more additional data
if (isSessionVariableSet('u_hash')) {
if (isConfigEntrySet('master_salt')) {
// Generate hash with master salt from modula of number with the prime number and other data
- $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a, getMasterSalt());
+ $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a, getMasterSalt());
// Create number from hash
- $rcode = hexdec(substr($saltedHash, strlen(getMasterSalt()), 9)) / abs(getConfig('rand_no') - $a + sqrt(getConfig('_ADD'))) / pi();
+ $rcode = hexdec(substr($saltedHash, strlen(getMasterSalt()), 9)) / abs(getRandNo() - $a + sqrt(getConfig('_ADD'))) / pi();
} else {
// Generate hash with "hash of site key" from modula of number with the prime number and other data
- $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a, substr(sha1(getConfig('SITE_KEY')), 0, getSaltLength()));
+ $saltedHash = generateHash(($a % getPrime()) . getEncryptSeperator() . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a, substr(sha1(getSiteKey()), 0, getSaltLength()));
// Create number from hash
- $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(getConfig('rand_no') - $a + sqrt(getConfig('_ADD'))) / pi();
+ $rcode = hexdec(substr($saltedHash, 8, 9)) / abs(getRandNo() - $a + sqrt(getConfig('_ADD'))) / pi();
}
// At least 10 numbers shall be secure enought!
$len = getCodeLength();
- if ($len == '0') $len = $length;
- if ($len == '0') $len = 10;
+ if ($len == '0') {
+ $len = $length;
+ } // END - if
+ if ($len == '0') {
+ $len = 10;
+ } // END - if
// Cut off requested counts of number
$return = substr(str_replace('.', '', $rcode), 0, $len);
// Extract host name
$host = str_replace('http://', '', $url);
- if (isInString('/', $host)) $host = substr($host, 0, strpos($host, '/'));
+ if (isInString('/', $host)) {
+ $host = substr($host, 0, strpos($host, '/'));
+ } // END - if
// Generate relative URL
//* DEBUG: */ debugOutput('SCRIPT=' . $script);
}
//* DEBUG: */ debugOutput('SCRIPT=' . $script);
- if (substr($script, 0, 1) == '/') $script = substr($script, 1);
+ if (substr($script, 0, 1) == '/') {
+ $script = substr($script, 1);
+ } // END - if
// Return host name
return $host;
}
-// Send a GET request
-function sendGetRequest ($script, $data = array()) {
- // Extract host name from script
- $host = extractHostnameFromUrl($script);
-
- // Add data
- $body = http_build_query($data, '', '&');
-
- // There should be data, else we don't need to extend $script with $body
- if (empty($body)) {
- // Do we have a question-mark in the script?
- if (strpos($script, '?') === false) {
- // No, so first char must be question mark
- $body = '?' . $body;
- } else {
- // Ok, add &
- $body = '&' . $body;
- }
-
- // Add script data
- $script .= $body;
-
- // Remove trailed & to make it more conform
- if (substr($script, -1, 1) == '&') $script = substr($script, 0, -1);
- } // END - if
-
- // Generate GET request header
- $request = 'GET /' . trim($script) . ' HTTP/1.1' . getConfig('HTTP_EOL');
- $request .= 'Host: ' . $host . getConfig('HTTP_EOL');
- $request .= 'Referer: ' . getUrl() . '/admin.php' . getConfig('HTTP_EOL');
- if (isConfigEntrySet('FULL_VERSION')) {
- $request .= 'User-Agent: ' . getTitle() . '/' . getFullVersion() . getConfig('HTTP_EOL');
- } else {
- $request .= 'User-Agent: ' . getTitle() . '/' . getConfig('VERSION') . getConfig('HTTP_EOL');
- }
- $request .= 'Accept: image/png,image/*;q=0.8,text/plain,text/html,*/*;q=0.5' . getConfig('HTTP_EOL');
- $request .= 'Accept-Charset: UTF-8,*' . getConfig('HTTP_EOL');
- $request .= 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0' . getConfig('HTTP_EOL');
- $request .= 'Connection: close' . getConfig('HTTP_EOL');
- $request .= getConfig('HTTP_EOL');
-
- // Send the raw request
- $response = sendRawRequest($host, $request);
-
- // Return the result to the caller function
- return $response;
-}
-
-// Send a POST request
-function sendPostRequest ($script, $postData) {
- // Is postData an array?
- if (!is_array($postData)) {
- // Abort here
- logDebugMessage(__FUNCTION__, __LINE__, sprintf("postData is not an array. Type: %s", gettype($postData)));
- return array('', '', '');
- } // END - if
-
- // Extract host name from script
- $host = extractHostnameFromUrl($script);
-
- // Construct request body
- $body = http_build_query($postData, '', '&');
-
- // Generate POST request header
- $request = 'POST /' . trim($script) . ' HTTP/1.0' . getConfig('HTTP_EOL');
- $request .= 'Host: ' . $host . getConfig('HTTP_EOL');
- $request .= 'Referer: ' . getUrl() . '/admin.php' . getConfig('HTTP_EOL');
- $request .= 'User-Agent: ' . getTitle() . '/' . getFullVersion() . getConfig('HTTP_EOL');
- $request .= 'Accept: text/plain;q=0.8' . getConfig('HTTP_EOL');
- $request .= 'Accept-Charset: UTF-8,*' . getConfig('HTTP_EOL');
- $request .= 'Cache-Control: no-cache' . getConfig('HTTP_EOL');
- $request .= 'Content-Type: application/x-www-form-urlencoded' . getConfig('HTTP_EOL');
- $request .= 'Content-Length: ' . strlen($body) . getConfig('HTTP_EOL');
- $request .= 'Connection: close' . getConfig('HTTP_EOL');
- $request .= getConfig('HTTP_EOL');
-
- // Add body
- $request .= $body;
-
- // Send the raw request
- $response = sendRawRequest($host, $request);
-
- // Return the result to the caller function
- return $response;
-}
-
-// Sends a raw request to another host
-function sendRawRequest ($host, $request) {
- // Init errno and errdesc with 'all fine' values
- $errno = '0'; $errdesc = '';
-
- // Initialize array
- $response = array('', '', '');
-
- // Default is not to use proxy
- $useProxy = false;
-
- // Are proxy settins set?
- if (isProxyUsed()) {
- // Then use it
- $useProxy = true;
- } // END - if
-
- // Load include
- loadIncludeOnce('inc/classes/resolver.class.php');
-
- // Get resolver instance
- $resolver = new HostnameResolver();
-
- // Open connection
- //* DEBUG: */ die('SCRIPT=' . $script);
- if ($useProxy === true) {
- // Resolve hostname into IP address
- $ip = $resolver->resolveHostname(compileRawCode(getConfig('proxy_host')));
-
- // Connect to host through proxy connection
- $fp = fsockopen($ip, bigintval(getConfig('proxy_port')), $errno, $errdesc, 30);
- } else {
- // Resolve hostname into IP address
- $ip = $resolver->resolveHostname($host);
-
- // Connect to host directly
- $fp = fsockopen($ip, 80, $errno, $errdesc, 30);
- }
-
- // Is there a link?
- if (!is_resource($fp)) {
- // Failed!
- logDebugMessage(__FUNCTION__, __LINE__, $errdesc . ' (' . $errno . ')');
- return $response;
- } elseif ((!stream_set_blocking($fp, 0)) || (!stream_set_timeout($fp, 1))) {
- // Cannot set non-blocking mode or timeout
- logDebugMessage(__FUNCTION__, __LINE__, socket_strerror(socket_last_error()));
- return $response;
- }
-
- // Do we use proxy?
- if ($useProxy === true) {
- // Setup proxy tunnel
- $response = setupProxyTunnel($host, $fp);
-
- // If the response is invalid, abort
- if ((count($response) == 3) && (empty($response[0])) && (empty($response[1])) && (empty($response[2]))) {
- // Invalid response!
- logDebugMessage(__FUNCTION__, __LINE__, 'Proxy tunnel not working?');
- return $response;
- } // END - if
- } // END - if
-
- // Write request
- fwrite($fp, $request);
-
- // Start counting
- $start = microtime(true);
-
- // Read response
- while (!feof($fp)) {
- // Get info from stream
- $info = stream_get_meta_data($fp);
-
- // Is it timed out? 15 seconds is a really patient...
- if (($info['timed_out'] == true) || (microtime(true) - $start) > 15) {
- // Timeout
- logDebugMessage(__FUNCTION__, __LINE__, 'Timed out to get data from host ' . $host);
-
- // Abort here
- break;
- } // END - if
-
- // Get line from stream
- $line = fgets($fp, 128);
-
- // Ignore empty lines because of non-blocking mode
- if (empty($line)) {
- // uslepp a little to avoid 100% CPU load
- usleep(10);
-
- // Skip this
- continue;
- } // END - if
-
- // Add it to response
- $response[] = trim($line);
- } // END - while
-
- // Close socket
- fclose($fp);
-
- // Time request if debug-mode is enabled
- if (isDebugModeEnabled()) {
- // Add debug message...
- logDebugMessage(__FUNCTION__, __LINE__, 'Request took ' . (microtime(true) - $start) . ' seconds and returned ' . count($response) . ' line(s).');
- } // END - if
-
- // Skip first empty lines
- $resp = $response;
- foreach ($resp as $idx => $line) {
- // Trim space away
- $line = trim($line);
-
- // Is this line empty?
- if (empty($line)) {
- // Then remove it
- array_shift($response);
- } else {
- // Abort on first non-empty line
- break;
- }
- } // END - foreach
-
- //* DEBUG: */ debugOutput('<strong>Request:</strong><pre>'.print_r($request, true).'</pre>');
- //* DEBUG: */ debugOutput('<strong>Response:</strong><pre>'.print_r($response, true).'</pre>');
-
- // Proxy agent found or something went wrong?
- if (!isset($response[0])) {
- // No response, maybe timeout
- $response = array('', '', '');
- logDebugMessage(__FUNCTION__, __LINE__, 'Invalid empty response array, maybe timed out?');
- } elseif ((substr(strtolower($response[0]), 0, 11) == 'proxy-agent') && ($useProxy === true)) {
- // Proxy header detected, so remove two lines
- array_shift($response);
- array_shift($response);
- } // END - if
-
- // Was the request successfull?
- if ((!isInStringIgnoreCase('200 OK', $response[0])) || (empty($response[0]))) {
- // Not found / access forbidden
- logDebugMessage(__FUNCTION__, __LINE__, 'Unexpected status code ' . $response[0] . ' detected. "200 OK" was expected.');
- $response = array('', '', '');
- } // END - if
-
- // Return response
- return $response;
-}
-
-// Sets up a proxy tunnel for given hostname and through resource
-function setupProxyTunnel ($host, $resource) {
- // Initialize array
- $response = array('', '', '');
-
- // Generate CONNECT request header
- $proxyTunnel = 'CONNECT ' . $host . ':80 HTTP/1.0' . getConfig('HTTP_EOL');
- $proxyTunnel .= 'Host: ' . $host . getConfig('HTTP_EOL');
-
- // Use login data to proxy? (username at least!)
- if (getConfig('proxy_username') != '') {
- // Add it as well
- $encodedAuth = base64_encode(compileRawCode(getConfig('proxy_username')) . ':' . compileRawCode(getConfig('proxy_password')));
- $proxyTunnel .= 'Proxy-Authorization: Basic ' . $encodedAuth . getConfig('HTTP_EOL');
- } // END - if
-
- // Add last new-line
- $proxyTunnel .= getConfig('HTTP_EOL');
- //* DEBUG: */ debugOutput('<strong>proxyTunnel=</strong><pre>' . $proxyTunnel.'</pre>');
-
- // Write request
- fwrite($fp, $proxyTunnel);
-
- // Got response?
- if (feof($fp)) {
- // No response received
- return $response;
- } // END - if
-
- // Read the first line
- $resp = trim(fgets($fp, 10240));
- $respArray = explode(' ', $resp);
- if ((strtolower($respArray[0]) !== 'http/1.0') || ($respArray[1] != '200')) {
- // Invalid response!
- return $response;
- } // END - if
-
- // All fine!
- return $respArray;
-}
-
// Taken from www.php.net isInStringIgnoreCase() user comments
function isEmailValid ($email) {
// Check first part of email address
$server = $_SERVER['PHP_SELF'] . getEncryptSeperator() . detectUserAgent() . getEncryptSeperator() . getenv('SERVER_SOFTWARE') . getEncryptSeperator() . detectRealIpAddress() . getEncryptSeperator() . detectRemoteAddr();
// Build key string
- $keys = getConfig('SITE_KEY') . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . getSecretKey() . getEncryptSeperator() . getFileHash() . getEncryptSeperator() . getDateFromPatchTime() . getEncryptSeperator() . getMasterSalt();
+ $keys = getSiteKey() . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . getSecretKey() . getEncryptSeperator() . getFileHash() . getEncryptSeperator() . getDateFromPatchTime() . getEncryptSeperator() . getMasterSalt();
// Additional data
$data = $plainText . getEncryptSeperator() . uniqid(mt_rand(), true) . getEncryptSeperator() . time();
$a = time() + getConfig('_ADD') - 1;
// Generate SHA1 sum from modula of number and the prime number
- $sha1 = sha1(($a % getPrime()) . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getConfig('DATE_KEY') . getEncryptSeperator() . $a);
+ $sha1 = sha1(($a % getPrime()) . $server . getEncryptSeperator() . $keys . getEncryptSeperator() . $data . getEncryptSeperator() . getDateKey() . getEncryptSeperator() . $a);
//* DEBUG: */ debugOutput('SHA1=' . $sha1.' ('.strlen($sha1).')<br />');
$sha1 = scrambleString($sha1);
//* DEBUG: */ debugOutput('Scrambled=' . $sha1.' ('.strlen($sha1).')<br />');
$content['timestamp'] = generateDateTime($content['timestamp'], 1);
// Calculate hours...
- $content['hours'] = round(getConfig('url_tlock') / 60 / 60);
+ $content['hours'] = round(getUrlTlock() / 60 / 60);
// Minutes...
- $content['minutes'] = round((getConfig('url_tlock') - $content['hours'] * 60 * 60) / 60);
+ $content['minutes'] = round((getUrlTlock() - $content['hours'] * 60 * 60) / 60);
// And seconds
- $content['seconds'] = round(getConfig('url_tlock') - $content['hours'] * 60 * 60 - $content['minutes'] * 60);
+ $content['seconds'] = round(getUrlTlock() - $content['hours'] * 60 * 60 - $content['minutes'] * 60);
// Finally contruct the message
$message = loadTemplate('tlock_message', true, $content);
// Mail inserted into bonus pool
if ($output === true) {
- loadTemplate('admin_settings_saved', false, '{--ADMIN_BONUS_SEND--}');
+ displayMessage('{--ADMIN_BONUS_SEND--}');
} // END - if
} elseif ($output === true) {
// More entered than can be reached!
- loadTemplate('admin_settings_saved', false, '{--ADMIN_MORE_SELECTED--}');
+ displayMessage('{--ADMIN_MORE_SELECTED--}');
} else {
// Debug log
logDebugMessage(__FUNCTION__, __LINE__, 'cat=' . $data['cat'] . ',receiver=' . $data['receiver'] . ',data=' . base64_encode(serialize($data)) . ' More selected, than available!');
// Determines referal id and sets it
function determineReferalId () {
// Skip this in non-html-mode and outside ref.php
- if ((!isHtmlOutputMode()) && (basename($_SERVER['PHP_SELF']) != 'ref.php')) return false;
+ if ((!isHtmlOutputMode()) && (basename($_SERVER['PHP_SELF']) != 'ref.php')) {
+ return false;
+ } // END - if
// Check if refid is set
if ((isset($GLOBALS['refid'])) && ($GLOBALS['refid'] > 0)) {
runFilterChain('reset');
}
+// Enables the reset mode (hourly, weekly and monthly) and runs it
+function doHourly () {
+ // Enable the hourly reset mode
+ $GLOBALS['hourly_enabled'] = true;
+
+ // Run filters (one always!)
+ runFilterChain('hourly');
+}
+
// Our shutdown-function
function shutdown () {
// Call the filter chain 'shutdown'
// And skip further processing
continue;
- } elseif (substr($baseFile, 0, strlen($prefix)) != $prefix) {
+ } elseif (!isFilePrefixFound($baseFile, $prefix)) {
// Skip this file
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Invalid prefix in file ' . $baseFile . ', prefix=' . $prefix);
continue;
continue;
}
+ // Get file' extension (last 4 chars)
+ $fileExtension = substr($baseFile, -4, 4);
+
// Is the file a PHP script or other?
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'baseDir=' . $baseDir . ',prefix=' . $prefix . ',baseFile=' . $baseFile);
- if ((substr($baseFile, -4, 4) == '.php') || (($fileIncludeDirs === true) && (isDirectory($FQFN)))) {
+ if (($fileExtension == '.php') || (($fileIncludeDirs === true) && (isDirectory($FQFN)))) {
// Is this a valid include file?
if ($extension == '.php') {
// Remove both for extension name
}
} else {
// We found .php file but should not search for them, why?
- debug_report_bug(__FUNCTION__, __LINE__, 'We should find files with extension=' . $extension . ', but we found a PHP script.');
+ debug_report_bug(__FUNCTION__, __LINE__, 'We should find files with extension=' . $extension . ', but we found a PHP script. (baseFile=' . $baseFile . ')');
}
- } elseif (substr($baseFile, -4, 4) == $extension) {
+ } elseif ($fileExtension == $extension) {
// Other, generic file found
$files[] = $fileName;
}
return $files;
}
+// Checks wether $prefix is found in $fileName
+function isFilePrefixFound ($fileName, $prefix) {
+ // @TODO Find a way to cache this
+ return (substr($fileName, 0, strlen($prefix)) == $prefix);
+}
+
// Maps a module name into a database table name
function mapModuleToTable ($moduleName) {
// Map only these, still lame code...
// Encodes an URL for adding session id, etc.
function encodeUrl ($url, $outputMode = '0') {
// Do we have already have a PHPSESSID inside or view.php is called? Then abort here
- if ((strpos($url, session_name()) !== false) || (isRawOutputMode())) return $url;
+ if ((strpos($url, session_name()) !== false) || (isRawOutputMode())) {
+ // Raw output mode detected or session_name() found in URL
+ return $url;
+ } // END - if
// Do we have a valid session?
if (((!isset($GLOBALS['valid_session'])) || ($GLOBALS['valid_session'] === false) || (!isset($_COOKIE[session_name()]))) && (isSpider() === false)) {
// No question mark
$seperator = '?';
} elseif ((!isHtmlOutputMode()) || ($outputMode != '0')) {
- // Non-HTML mode
+ // Non-HTML mode (or forced non-HTML mode
$seperator = '&';
}
if (SQL_NUMROWS($result) == 1) {
// Load the entry
$content = SQL_FETCHARRAY($result);
- die('<pre>'.print_r($content, true).'</pre>');
+ die('Unfinished area:<br />'.__FUNCTION__.':<br />content=<pre>'.print_r($content, true).'</pre>');
} // END - if
// Free result
return $OUT;
}
+
+/**
+ * determine if a string can represent a number in hexadecimal
+ *
+ * @param $hex A string to check if it is hex-encoded
+ * @return $foo True if the string is a hex, otherwise false
+ * @author Marques Johansson
+ * @link http://php.net/manual/en/function.http-chunked-decode.php#89786
+ */
+function isHexadecimal ($hex) {
+ // Make it lowercase
+ $hex = strtolower(trim(ltrim($hex, '0')));
+
+ // Fix empty strings to zero
+ if (empty($hex)) {
+ $hex = 0;
+ } // END - if
+
+ // Simply compare decode->encode result with original
+ return ($hex == dechex(hexdec($hex)));
+}
+
+// Replace "\r" with "[r]" and "\n" with "[n]" and add a final new-line to make
+// them visible to the developer. Use this function to debug e.g. buggy HTTP
+// response handler functions.
+function replaceReturnNewLine ($str) {
+ return str_replace("\r", '[r]', str_replace("\n", '[n]
+', $str));
+}
+
+// Converts a given string by splitting it up with given delimiter similar to
+// explode(), but appending the delimiter again
+function stringToArray ($delimiter, $string) {
+ // Init array
+ $strArray = array();
+
+ // "Walk" through all entries
+ foreach (explode($delimiter, $string) as $split) {
+ // Append the delimiter and add it to the array
+ $strArray[] = $split . $delimiter;
+ } // END - foreach
+
+ // Return array
+ return $strArray;
+}
+
+// Detects the prefix 'mb_' if a multi-byte string is given
+function detectMultiBytePrefix ($str) {
+ // Default is without multi-byte
+ $mbPrefix = '';
+
+ // Detect multi-byte (strictly)
+ if (mb_detect_encoding($str, 'auto', true) !== false) {
+ // With multi-byte encoded string
+ $mbPrefix = 'mb_';
+ } // END - if
+
+ // Return the prefix
+ return $mbPrefix;
+}
+
+// Searches the given array for a sub-string match and returns all found keys in an array
+function getArrayKeysFromSubStrArray ($heystack, array $needles, $offset = 0) {
+ // Init array for all found keys
+ $keys = array();
+
+ // Now check all entries
+ foreach ($needles as $key => $needle) {
+ // Do we have found a partial string?
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'heystack='.$heystack.',key='.$key.',needle='.$needle.',offset='.$offset);
+ if (strpos($heystack, $needle, $offset) !== false) {
+ // Add the found key
+ $keys[] = $key;
+ } // END - if
+ } // END - foreach
+
+ // Return the array
+ return $keys;
+}
+
//-----------------------------------------------------------------------------
// Automatically re-created functions, all taken from user comments on www.php.net
//-----------------------------------------------------------------------------
-//
if (!function_exists('html_entity_decode')) {
// Taken from documentation on www.php.net
function html_entity_decode ($string) {
}
} // END - if
-if (!function_exists('http_build_query')) {
- // Taken from documentation on www.php.net, credits to Marco K. (Germany) and some light mods by R.Haeder
- function http_build_query($data, $prefix = '', $sep = '', $key = '') {
- $ret = array();
- foreach ((array) $data as $k => $v) {
- if (is_int($k) && $prefix != null) {
- $k = urlencode($prefix . $k);
- } // END - if
-
- if ((!empty($key)) || ($key === 0)) $k = $key . '[' . urlencode($k) . ']';
-
- if (is_array($v) || is_object($v)) {
- array_push($ret, http_build_query($v, '', $sep, $k));
- } else {
- array_push($ret, $k.'='.urlencode($v));
- }
- } // END - foreach
-
- if (empty($sep)) $sep = ini_get('arg_separator.output');
-
- return implode($sep, $ret);
- }
-} // END - if
-
// [EOF]
?>