/** * Load a function, or array of functions * * @param string|array $function The function or functions to load * @return bool|array TRUE if loaded, FALSE if not */ function loadFunction($function) { // Multiple if (is_array($function)) { $res = array(); foreach ($function as $singlefunc) { $res[$singlefunc] = PHP_Compat::loadFunction($singlefunc); } return $res; } // Check for packages which can modify the function table at runtime $symbolfuncs = array('rename_function', 'runkit_rename_function'); foreach ($symbolfuncs as $symbolfunc) { $renamedfunction = 'php_compat_renamed' . $function; if (function_exists($symbolfunc) && function_exists($function) && !function_exists($renamedfunction)) { // Rename the core function rename_function($function, $renamedfunction); break; } } // Single if (!function_exists($function)) { $file = sprintf('PHP/Compat/Function/%s.php', $function); if (@(include_once $file) !== false) { return true; } } return false; }
/** * Restore an overriden function to its builtin state * * @param string $sFunction required=true */ public static function restore($sFunction) { $sRenamedFunction = self::getRenamedFunction($sFunction); if (function_exists($sRenamedFunction)) { rename_function($sFunction, uniqid($sFunction)); rename_function($sRenamedFunction, $sFunction); } unset(self::$aOverrides[$sFunction]); }
public function __destruct() { // rename_function may causes CLI error report in Windows XP, but nothing more happen if ($this->apdExt && $GLOBALS['test_header']) { $GLOBALS['test_header'] = 0; rename_function('header', 'header' . str_replace(array('.', ' '), array('', ''), microtime())); rename_function('headers_sent', 'headers_sent' . str_replace(array('.', ' '), array('', ''), microtime())); rename_function('test_header', 'header'); rename_function('test_headers_sent', 'headers_sent'); } }
/** * 禁止系统调用的函数 */ private static function _init_funtions() { if (!function_exists('rename_function')) { return; } $funcs = array_merge(App_Info::config('FORBIDDEN_FUNCTIONS'), Core_Utils::$forbidden_funcs); foreach ($funcs as $func) { if (function_exists($func)) { $funcx = Core_Utils::random_name($func); rename_function($func, $funcx); } } }
function _dbslayer_map() { $substs = array('is_resource' => 'cherokee_is_resource($link)', 'mysql_affected_rows' => 'cherokee_mysql_affected_rows($link)', 'mysql_client_encoding' => 'cherokee_mysql_client_encoding ($link)', 'mysql_close' => 'cherokee_mysql_close($link)', 'mysql_connect' => 'cherokee_mysql_connect($host, $user, $pass, $new_link, $client_flags)', 'mysql_create_db' => 'cherokee_mysql_create_db($database_name, $link)', 'mysql_data_seek' => 'cherokee_mysql_data_seek($result, $row_number)', 'mysql_db_name' => 'cherokee_mysql_db_name($result, $row, $field)', 'mysql_db_query' => 'cherokee_mysql_db_query($database, $query, $link)', 'mysql_drop_db' => 'cherokee_mysql_drop_db($database_name, $link)', 'mysql_errno' => 'cherokee_mysql_errno($link)', 'mysql_error' => 'cherokee_mysql_error($link)', 'mysql_escape_string' => 'cherokee_mysql_escape_string($unescaped_string)', 'mysql_fetch_array' => 'cherokee_mysql_fetch_array($result, $result_type)', 'mysql_fetch_assoc' => 'cherokee_mysql_fetch_assoc($result)', 'mysql_fetch_field' => 'cherokee_mysql_fetch_field($result, $field_offset)', 'mysql_fetch_lengths' => 'cherokee_mysql_fetch_lengths($result)', 'mysql_fetch_num' => 'cherokee_mysql_fetch_num($result)', 'mysql_fetch_object' => 'cherokee_mysql_fetch_object (&$result, $class_name, $params)', 'mysql_field_flags' => 'cherokee_mysql_field_flags ($result, $field_offset)', 'mysql_field_name' => 'cherokee_mysql_field_name ($result, $field_offset)', 'mysql_field_seek' => 'cherokee_mysql_field_seek (&$result, $field_offset)', 'mysql_field_type' => 'cherokee_mysql_field_type ($result, $field_offset)', 'mysql_free_result' => 'cherokee_mysql_free_result($result)', 'mysql_get_client_info' => 'cherokee_mysql_get_client_info()', 'mysql_get_host_info' => 'cherokee_mysql_get_host_info ($link)', 'mysql_get_proto_info' => 'cherokee_mysql_get_proto_info ($link)', 'mysql_get_server_info' => 'cherokee_mysql_get_server_info($link)', 'mysql_info' => 'cherokee_mysql_info ($link)', 'mysql_insert_id' => 'cherokee_mysql_insert_id($link)', 'mysql_list_dbs' => 'cherokee_mysql_list_dbs($link)', 'mysql_list_fields' => 'cherokee_mysql_list_fields ($database, $table_name, $link)', 'mysql_list_processes' => 'cherokee_mysql_list_processes ($link)', 'mysql_list_tables' => 'cherokee_mysql_list_tables ($database, $link)', 'mysql_num_fields' => 'cherokee_mysql_num_fields ($result)', 'mysql_num_rows' => 'cherokee_mysql_num_rows($result)', 'mysql_pconnect' => 'cherokee_mysql_pconnect($host, $user, $pass, $client_flags)', 'mysql_ping' => 'cherokee_mysql_ping ($link)', 'mysql_query' => 'cherokee_mysql_query($query, $link)', 'mysql_real_escape_string' => 'cherokee_mysql_real_escape_string($unescaped_string, $link)', 'mysql_result' => 'cherokee_mysql_result($result, $row, $field)', 'mysql_select_db' => 'cherokee_mysql_select_db($database_name, &$link)', 'mysql_set_charset' => 'cherokee_mysql_set_charset($charset, $link)', 'mysql_stat' => 'cherokee_mysql_stat($link)', 'mysql_tablename' => 'cherokee_mysql_tablename($result, $i)', 'mysql_thread_id' => 'cherokee_mysql_thread_id ($link)', 'mysql_unbuffered_query' => 'cherokee_mysql_unbuffered_query($query, $link)'); $args = array('is_resource' => '$link', 'mysql_affected_rows' => '$link = NULL', 'mysql_client_encoding' => '$link = NULL', 'mysql_close' => '$link = NULL', 'mysql_connect' => '$host = NULL, $user = NULL, $pass = NULL, $new_link = false, $client_flags = 0', 'mysql_create_db' => '$database_name, $link = NULL', 'mysql_data_seek' => '&$result, $row_number', 'mysql_db_name' => '$result, $row, $field = NULL', 'mysql_db_query' => '$database, $query, $link = NULL', 'mysql_drop_db' => '$database_name, $link = NULL', 'mysql_errno' => '$link = NULL', 'mysql_error' => '$link = NULL', 'mysql_escape_string' => '$unescaped_string', 'mysql_fetch_array' => '&$result, $result_type = MYSQL_BOTH', 'mysql_fetch_assoc' => '&$result', 'mysql_fetch_field' => '&$result, $field_offset = -1', 'mysql_fetch_lengths' => '$result', 'mysql_fetch_num' => '&$result', 'mysql_fetch_object' => '&$result, $class_name = "stdClass", $params = NULL', 'mysql_field_flags' => '$result, $field_offset', 'mysql_field_name' => '$result, $field_offset', 'mysql_field_seek' => '&$result, $field_offset', 'mysql_field_type' => '$result, $field_offset', 'mysql_free_result' => '&$result', 'mysql_get_client_info' => '', 'mysql_get_host_info' => '$link = NULL', 'mysql_get_proto_info' => '$link = NULL', 'mysql_get_server_info' => '$link = NULL', 'mysql_info' => '$link = NULL', 'mysql_insert_id' => '$link = NULL', 'mysql_list_dbs' => '$link = NULL', 'mysql_list_fields' => '$database, $table_name, $link = NULL', 'mysql_list_processes' => '$link = NULL', 'mysql_list_tables' => '$database, $link = NULL', 'mysql_num_fields' => '$result', 'mysql_num_rows' => '$result', 'mysql_pconnect' => '$host = NULL, $user = NULL, $pass = NULL, $client_flags = 0', 'mysql_ping' => '$link = NULL', 'mysql_query' => '$query, $link = NULL', 'mysql_real_escape_string' => '$unescaped_string, $link = NULL', 'mysql_result' => '&$result, $row, $field = 0', 'mysql_select_db' => '$database_name, $link = NULL', 'mysql_set_charset' => '$charset , $link = NULL', 'mysql_stat' => '$link = NULL', 'mysql_tablename' => '$result, $i', 'mysql_thread_id' => '$link = NULL', 'mysql_unbuffered_query' => '$query, $link = NULL'); foreach ($substs as $func => $ren_func) { $ret = override_function($func, $args[$func], "return {$substs[$func]};"); $ret &= rename_function("__overridden__", "_{$ren_func}"); if ($ret == FALSE) { return FALSE; } } return TRUE; }
} function wfMsgRealStub() { return ''; } function wfGetDBStub() { throw new WikiaException('No DB in unit tests'); } function sno_callback($className) { if ($className == 'Message') { $className = 'MessageStub'; } return $className; } if ($wgRunningUnitTests && $wgNoDBUnits) { rename_function('wfMsgExt', 'wfMsgExt_orig'); rename_function('wfMsgReal', 'wfMsgReal_orig'); rename_function('wfGetDB', 'wfGetDB_orig'); rename_function('wfMsgExtStub', 'wfMsgExt'); rename_function('wfMsgRealStub', 'wfMsgReal'); rename_function('wfGetDBStub', 'wfGetDB'); $wgMemc = new FakeCache(); $messageMemc = null; $parserMemc = null; set_new_overload('sno_callback'); } require_once 'Zend/Exception.php'; require_once 'Zend/Config.php'; require_once 'Zend/Config/Exception.php';
/** * Perform actual function renaming. * * It actually swaps the two functions with each other, which is why * there are three calls to rename the function. * * @param string $originalName * @param string $replacement */ protected function doFunctionRename($originalName, $replacement) { if (!extension_loaded('test_helpers') && !extension_loaded('runkit')) { die('test_helpers extension and runkit extensions are not found - you need one of them'); } $this->confirmFunction($originalName); $this->confirmFunction($replacement); $tempName = $originalName . '_TEMP'; while (function_exists($tempName)) { $tempName .= substr(uniqid(), -4); } // Runkit's function renaming works better in PHP 5.4 if (function_exists('runkit_function_rename')) { runkit_function_rename($originalName, $tempName); runkit_function_rename($replacement, $originalName); runkit_function_rename($tempName, $replacement); } else { rename_function($originalName, $tempName); rename_function($replacement, $originalName); rename_function($tempName, $replacement); } }