3v4l.org

run code in 300+ PHP versions simultaneously
<?php echo gzinflate(str_rot13(base64_decode('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')));
Output for 7.0.20, 7.1.5 - 7.1.10, 7.2.0 - 7.2.33, 7.3.12 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
<?php $_config = array ( 'url_var_name' => 'q', 'flags_var_name' => 'hl', 'get_form_name' => '____pgfa', 'basic_auth_var_name' => '____pbavn', 'max_file_size' => -1, 'allow_hotlinking' => 0, 'upon_hotlink' => 1, 'compress_output' => 0 ); $_flags = array ( 'include_form' => 1, 'remove_scripts' => 0, 'accept_cookies' => 1, 'show_images' => 1, 'show_referer' => 0, 'rotate13' => 0, 'base64_encode' => 0, 'strip_meta' => 0, 'strip_title' => 0, 'session_cookies' => 0 ); $_frozen_flags = array ( 'include_form' => 0, 'remove_scripts' => 0, 'accept_cookies' => 0, 'show_images' => 0, 'show_referer' => 0, 'rotate13' => 0, 'base64_encode' => 0, 'strip_meta' => 0, 'strip_title' => 0, 'session_cookies' => 0 ); $_labels = array ( 'include_form' => array('Include Form', 'Include mini URL-form on every page'), 'remove_scripts' => array('Remove Scripts', 'Remove client-side scripting (i.e JavaScript)'), 'accept_cookies' => array('Accept Cookies', 'Allow cookies to be stored'), 'show_images' => array('Show Images', 'Show images on browsed pages'), 'show_referer' => array('Show Referer', 'Show actual referring Website'), 'rotate13' => array('Rotate13', 'Use ROT13 encoding on the address'), 'base64_encode' => array('Base64', 'Use base64 encodng on the address'), 'strip_meta' => array('Strip Meta', 'Strip meta information tags from pages'), 'strip_title' => array('Strip Title', 'Strip page title'), 'session_cookies' => array('Session Cookies', 'Store cookies for this session only') ); $_hosts = array ( '#^127\.|192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[01])\.|localhost#i' ); $_hotlink_domains = array(); $_insert = array(); // // END CONFIGURABLE OPTIONS. The ride for you ends here. Close the file. // $_iflags = ''; $_system = array ( 'ssl' => extension_loaded('openssl') && version_compare(PHP_VERSION, '4.3.0', '>='), 'uploads' => ini_get('file_uploads'), 'gzip' => extension_loaded('zlib') && !ini_get('zlib.output_compression'), 'stripslashes' => get_magic_quotes_gpc() ); $_proxify = array('text/html' => 1, 'application/xml+xhtml' => 1, 'application/xhtml+xml' => 1, 'text/css' => 1); $_version = '0.5b2'; $_http_host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost'); $_script_url = 'http' . ((isset($_ENV['HTTPS']) && $_ENV['HTTPS'] == 'on') || $_SERVER['SERVER_PORT'] == 443 ? 's' : '') . '://' . $_http_host . ($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443 ? ':' . $_SERVER['SERVER_PORT'] : '') . $_SERVER['PHP_SELF']; $_script_base = substr($_script_url, 0, strrpos($_script_url, '/')+1); $_url = ''; $_url_parts = array(); $_base = array(); $_socket = null; $_request_method = $_SERVER['REQUEST_METHOD']; $_request_headers = ''; $_cookie = ''; $_post_body = ''; $_response_headers = array(); $_response_keys = array(); $_http_version = ''; $_response_code = 0; $_content_type = 'text/html'; $_content_length = false; $_content_disp = ''; $_set_cookie = array(); $_retry = false; $_quit = false; $_basic_auth_header = ''; $_basic_auth_realm = ''; $_auth_creds = array(); $_response_body = ''; // // FUNCTION DECLARATIONS // function show_report($data) { include $data['which'] . '.inc.php'; exit(0); } function add_cookie($name, $value, $expires = 0) { return rawurlencode(rawurlencode($name)) . '=' . rawurlencode(rawurlencode($value)) . (empty($expires) ? '' : '; expires=' . gmdate('D, d-M-Y H:i:s \G\M\T', $expires)) . '; path=/; domain=.' . $GLOBALS['_http_host']; } function set_post_vars($array, $parent_key = null) { $temp = array(); foreach ($array as $key => $value) { $key = isset($parent_key) ? sprintf('%s[%s]', $parent_key, urlencode($key)) : urlencode($key); if (is_array($value)) { $temp = array_merge($temp, set_post_vars($value, $key)); } else { $temp[$key] = urlencode($value); } } return $temp; } function set_post_files($array, $parent_key = null) { $temp = array(); foreach ($array as $key => $value) { $key = isset($parent_key) ? sprintf('%s[%s]', $parent_key, urlencode($key)) : urlencode($key); if (is_array($value)) { $temp = array_merge_recursive($temp, set_post_files($value, $key)); } else if (preg_match('#^([^\[\]]+)\[(name|type|tmp_name)\]#', $key, $m)) { $temp[str_replace($m[0], $m[1], $key)][$m[2]] = $value; } } return $temp; } function url_parse($url, & $container) { $temp = @parse_url($url); if (!empty($temp)) { $temp['port_ext'] = ''; $temp['base'] = $temp['scheme'] . '://' . $temp['host']; if (isset($temp['port'])) { $temp['base'] .= $temp['port_ext'] = ':' . $temp['port']; } else { $temp['port'] = $temp['scheme'] === 'https' ? 443 : 80; } $temp['path'] = isset($temp['path']) ? $temp['path'] : '/'; $path = array(); $temp['path'] = explode('/', $temp['path']); foreach ($temp['path'] as $dir) { if ($dir === '..') { array_pop($path); } else if ($dir !== '.') { for ($dir = rawurldecode($dir), $new_dir = '', $i = 0, $count_i = strlen($dir); $i < $count_i; $new_dir .= strspn($dir{$i}, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*\'(),?:@&;=') ? $dir{$i} : rawurlencode($dir{$i}), ++$i); $path[] = $new_dir; } } $temp['path'] = str_replace('/%7E', '/~', '/' . ltrim(implode('/', $path), '/')); $temp['file'] = substr($temp['path'], strrpos($temp['path'], '/')+1); $temp['dir'] = substr($temp['path'], 0, strrpos($temp['path'], '/')); $temp['base'] .= $temp['dir']; $temp['prev_dir'] = substr_count($temp['path'], '/') > 1 ? substr($temp['base'], 0, strrpos($temp['base'], '/')+1) : $temp['base'] . '/'; $container = $temp; return true; } return false; } function complete_url($url, $proxify = true) { $url = trim($url); if ($url === '') { return ''; } $hash_pos = strrpos($url, '#'); $fragment = $hash_pos !== false ? '#' . substr($url, $hash_pos) : ''; $sep_pos = strpos($url, '://'); if ($sep_pos === false || $sep_pos > 5) { switch ($url{0}) { case '/': $url = substr($url, 0, 2) === '//' ? $GLOBALS['_base']['scheme'] . ':' . $url : $GLOBALS['_base']['scheme'] . '://' . $GLOBALS['_base']['host'] . $GLOBALS['_base']['port_ext'] . $url; break; case '?': $url = $GLOBALS['_base']['base'] . '/' . $GLOBALS['_base']['file'] . $url; break; case '#': $proxify = false; break; case 'm': if (substr($url, 0, 7) == 'mailto:') { $proxify = false; break; } default: $url = $GLOBALS['_base']['base'] . '/' . $url; } } return $proxify ? "{$GLOBALS['_script_url']}?{$GLOBALS['_config']['url_var_name']}=" . encode_url($url) . $fragment : $url; } function proxify_inline_css($css) { preg_match_all('#url\s*\(\s*(([^)]*(\\\))*[^)]*)(\)|$)?#i', $css, $matches, PREG_SET_ORDER); for ($i = 0, $count = count($matches); $i < $count; ++$i) { $css = str_replace($matches[$i][0], 'url(' . proxify_css_url($matches[$i][1]) . ')', $css); } return $css; } function proxify_css($css) { $css = proxify_inline_css($css); preg_match_all("#@import\s*(?:\"([^\">]*)\"?|'([^'>]*)'?)([^;]*)(;|$)#i", $css, $matches, PREG_SET_ORDER); for ($i = 0, $count = count($matches); $i < $count; ++$i) { $delim = '"'; $url = $matches[$i][2]; if (isset($matches[$i][3])) { $delim = "'"; $url = $matches[$i][3]; } $css = str_replace($matches[$i][0], '@import ' . $delim . proxify_css_url($matches[$i][1]) . $delim . (isset($matches[$i][4]) ? $matches[$i][4] : ''), $css); } return $css; } function proxify_css_url($url) { $url = trim($url); $delim = strpos($url, '"') === 0 ? '"' : (strpos($url, "'") === 0 ? "'" : ''); return $delim . preg_replace('#([\(\),\s\'"\\\])#', '\\$1', complete_url(trim(preg_replace('#\\\(.)#', '$1', trim($url, $delim))))) . $delim; } // // SET FLAGS // if (isset($_POST[$_config['url_var_name']]) && !isset($_GET[$_config['url_var_name']]) && isset($_POST[$_config['flags_var_name']])) { foreach ($_flags as $flag_name => $flag_value) { $_iflags .= isset($_POST[$_config['flags_var_name']][$flag_name]) ? (string)(int)(bool)$_POST[$_config['flags_var_name']][$flag_name] : ($_frozen_flags[$flag_name] ? $flag_value : '0'); } $_iflags = base_convert(($_iflags != '' ? $_iflags : '0'), 2, 16); } else if (isset($_GET[$_config['flags_var_name']]) && !isset($_GET[$_config['get_form_name']]) && ctype_alnum($_GET[$_config['flags_var_name']])) { $_iflags = $_GET[$_config['flags_var_name']]; } else if (isset($_COOKIE['flags']) && ctype_alnum($_COOKIE['flags'])) { $_iflags = $_COOKIE['flags']; } if ($_iflags !== '') { $_set_cookie[] = add_cookie('flags', $_iflags, time()+2419200); $_iflags = str_pad(base_convert($_iflags, 16, 2), count($_flags), '0', STR_PAD_LEFT); $i = 0; foreach ($_flags as $flag_name => $flag_value) { $_flags[$flag_name] = $_frozen_flags[$flag_name] ? $flag_value : (int)(bool)$_iflags{$i}; $i++; } } // // DETERMINE URL-ENCODING BASED ON FLAGS // if ($_flags['rotate13']) { function encode_url($url) { return rawurlencode(str_rot13($url)); } function decode_url($url) { return str_replace(array('&amp;', '&#38;'), '&', str_rot13(rawurldecode($url))); } } else if ($_flags['base64_encode']) { function encode_url($url) { return rawurlencode(base64_encode($url)); } function decode_url($url) { return str_replace(array('&amp;', '&#38;'), '&', base64_decode(rawurldecode($url))); } } else { function encode_url($url) { return rawurlencode($url); } function decode_url($url) { return str_replace(array('&amp;', '&#38;'), '&', rawurldecode($url)); } } // // COMPRESS OUTPUT IF INSTRUCTED // if ($_config['compress_output'] && $_system['gzip']) { ob_start('ob_gzhandler'); } // // STRIP SLASHES FROM GPC IF NECESSARY // if ($_system['stripslashes']) { function _stripslashes($value) { return is_array($value) ? array_map('_stripslashes', $value) : (is_string($value) ? stripslashes($value) : $value); } $_GET = _stripslashes($_GET); $_POST = _stripslashes($_POST); $_COOKIE = _stripslashes($_COOKIE); } // // FIGURE OUT WHAT TO DO (POST URL-form submit, GET form request, regular request, basic auth, cookie manager, show URL-form) // if (isset($_POST[$_config['url_var_name']]) && !isset($_GET[$_config['url_var_name']])) { header('Location: ' . $_script_url . '?' . $_config['url_var_name'] . '=' . encode_url($_POST[$_config['url_var_name']]) . '&' . $_config['flags_var_name'] . '=' . base_convert($_iflags, 2, 16)); exit(0); } if (isset($_GET[$_config['get_form_name']])) { $_url = decode_url($_GET[$_config['get_form_name']]); $qstr = strpos($_url, '?') !== false ? (strpos($_url, '?') === strlen($_url)-1 ? '' : '&') : '?'; $arr = explode('&', $_SERVER['QUERY_STRING']); if (preg_match('#^\Q' . $_config['get_form_name'] . '\E#', $arr[0])) { array_shift($arr); } $_url .= $qstr . implode('&', $arr); } else if (isset($_GET[$_config['url_var_name']])) { $_url = decode_url($_GET[$_config['url_var_name']]); } else if (isset($_GET['action']) && $_GET['action'] == 'cookies') { show_report(array('which' => 'cookies')); } else { show_report(array('which' => 'index', 'category' => 'entry_form')); } if (isset($_GET[$_config['url_var_name']], $_POST[$_config['basic_auth_var_name']], $_POST['username'], $_POST['password'])) { $_request_method = 'GET'; $_basic_auth_realm = base64_decode($_POST[$_config['basic_auth_var_name']]); $_basic_auth_header = base64_encode($_POST['username'] . ':' . $_POST['password']); } // // SET URL // if (strpos($_url, '://') === false) { $_url = 'http://' . $_url; } if (url_parse($_url, $_url_parts)) { $_base = $_url_parts; if (!empty($_hosts)) { foreach ($_hosts as $host) { if (preg_match($host, $_url_parts['host'])) { show_report(array('which' => 'index', 'category' => 'error', 'group' => 'url', 'type' => 'external', 'error' => 1)); } } } } else { show_report(array('which' => 'index', 'category' => 'error', 'group' => 'url', 'type' => 'external', 'error' => 2)); } // // HOTLINKING PREVENTION // if (!$_config['allow_hotlinking'] && isset($_SERVER['HTTP_REFERER'])) { $_hotlink_domains[] = $_http_host; $is_hotlinking = true; foreach ($_hotlink_domains as $host) { if (preg_match('#^https?\:\/\/(www)?\Q' . $host . '\E(\/|\:|$)#i', trim($_SERVER['HTTP_REFERER']))) { $is_hotlinking = false; break; } } if ($is_hotlinking) { switch ($_config['upon_hotlink']) { case 1: show_report(array('which' => 'index', 'category' => 'error', 'group' => 'resource', 'type' => 'hotlinking')); break; case 2: header('HTTP/1.0 404 Not Found'); exit(0); default: header('Location: ' . $_config['upon_hotlink']); exit(0); } } } // // OPEN SOCKET TO SERVER // do { $_retry = false; $_socket = @fsockopen(($_url_parts['scheme'] === 'https' && $_system['ssl'] ? 'ssl://' : 'tcp://') . $_url_parts['host'], $_url_parts['port'], $err_no, $err_str, 30); if ($_socket === false) { show_report(array('which' => 'index', 'category' => 'error', 'group' => 'url', 'type' => 'internal', 'error' => $err_no)); } // // SET REQUEST HEADERS // $_request_headers = $_request_method . ' ' . $_url_parts['path']; if (isset($_url_parts['query'])) { $_request_headers .= '?'; $query = preg_split('#([&;])#', $_url_parts['query'], -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0, $count = count($query); $i < $count; $_request_headers .= implode('=', array_map('urlencode', array_map('urldecode', explode('=', $query[$i])))) . (isset($query[++$i]) ? $query[$i] : ''), $i++); } $_request_headers .= " HTTP/1.0\r\n"; $_request_headers .= 'Host: ' . $_url_parts['host'] . $_url_parts['port_ext'] . "\r\n"; if (isset($_SERVER['HTTP_USER_AGENT'])) { $_request_headers .= 'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'] . "\r\n"; } if (isset($_SERVER['HTTP_ACCEPT'])) { $_request_headers .= 'Accept: ' . $_SERVER['HTTP_ACCEPT'] . "\r\n"; } else { $_request_headers .= "Accept: */*;q=0.1\r\n"; } if ($_flags['show_referer'] && isset($_SERVER['HTTP_REFERER']) && preg_match('#^\Q' . $_script_url . '?' . $_config['url_var_name'] . '=\E([^&]+)#', $_SERVER['HTTP_REFERER'], $matches)) { $_request_headers .= 'Referer: ' . decode_url($matches[1]) . "\r\n"; } if (!empty($_COOKIE)) { $_cookie = ''; $_auth_creds = array(); foreach ($_COOKIE as $cookie_id => $cookie_content) { $cookie_id = explode(';', rawurldecode($cookie_id)); $cookie_content = explode(';', rawurldecode($cookie_content)); if ($cookie_id[0] === 'COOKIE') { $cookie_id[3] = str_replace('_', '.', $cookie_id[3]); //stupid PHP can't have dots in var names if (count($cookie_id) < 4 || ($cookie_content[1] == 'secure' && $_url_parts['scheme'] != 'https')) { continue; } if ((preg_match('#\Q' . $cookie_id[3] . '\E$#i', $_url_parts['host']) || strtolower($cookie_id[3]) == strtolower('.' . $_url_parts['host'])) && preg_match('#^\Q' . $cookie_id[2] . '\E#', $_url_parts['path'])) { $_cookie .= ($_cookie != '' ? '; ' : '') . (empty($cookie_id[1]) ? '' : $cookie_id[1] . '=') . $cookie_content[0]; } } else if ($cookie_id[0] === 'AUTH' && count($cookie_id) === 3) { $cookie_id[2] = str_replace('_', '.', $cookie_id[2]); if ($_url_parts['host'] . ':' . $_url_parts['port'] === $cookie_id[2]) { $_auth_creds[$cookie_id[1]] = $cookie_content[0]; } } } if ($_cookie != '') { $_request_headers .= "Cookie: $_cookie\r\n"; } } if (isset($_url_parts['user'], $_url_parts['pass'])) { $_basic_auth_header = base64_encode($_url_parts['user'] . ':' . $_url_parts['pass']); } if (!empty($_basic_auth_header)) { $_set_cookie[] = add_cookie("AUTH;{$_basic_auth_realm};{$_url_parts['host']}:{$_url_parts['port']}", $_basic_auth_header); $_request_headers .= "Authorization: Basic {$_basic_auth_header}\r\n"; } else if (!empty($_basic_auth_realm) && isset($_auth_creds[$_basic_auth_realm])) { $_request_headers .= "Authorization: Basic {$_auth_creds[$_basic_auth_realm]}\r\n"; } else if (list($_basic_auth_realm, $_basic_auth_header) = each($_auth_creds)) { $_request_headers .= "Authorization: Basic {$_basic_auth_header}\r\n"; } if ($_request_method == 'POST') { if (!empty($_FILES) && $_system['uploads']) { $_data_boundary = '----' . md5(uniqid(rand(), true)); $array = set_post_vars($_POST); foreach ($array as $key => $value) { $_post_body .= "--{$_data_boundary}\r\n"; $_post_body .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n"; $_post_body .= urldecode($value) . "\r\n"; } $array = set_post_files($_FILES); foreach ($array as $key => $file_info) { $_post_body .= "--{$_data_boundary}\r\n"; $_post_body .= "Content-Disposition: form-data; name=\"$key\"; filename=\"{$file_info['name']}\"\r\n"; $_post_body .= 'Content-Type: ' . (empty($file_info['type']) ? 'application/octet-stream' : $file_info['type']) . "\r\n\r\n"; if (is_readable($file_info['tmp_name'])) { $handle = fopen($file_info['tmp_name'], 'rb'); $_post_body .= fread($handle, filesize($file_info['tmp_name'])); fclose($handle); } $_post_body .= "\r\n"; } $_post_body .= "--{$_data_boundary}--\r\n"; $_request_headers .= "Content-Type: multipart/form-data; boundary={$_data_boundary}\r\n"; $_request_headers .= "Content-Length: " . strlen($_post_body) . "\r\n\r\n"; $_request_headers .= $_post_body; } else { $array = set_post_vars($_POST); foreach ($array as $key => $value) { $_post_body .= !empty($_post_body) ? '&' : ''; $_post_body .= $key . '=' . $value; } $_request_headers .= "Content-Type: application/x-www-form-urlencoded\r\n"; $_request_headers .= "Content-Length: " . strlen($_post_body) . "\r\n\r\n"; $_request_headers .= $_post_body; $_request_headers .= "\r\n"; } $_post_body = ''; } else { $_request_headers .= "\r\n"; } fwrite($_socket, $_request_headers); // // PROCESS RESPONSE HEADERS // $_response_headers = $_response_keys = array(); $line = fgets($_socket, 8192); while (strspn($line, "\r\n") !== strlen($line)) { @list($name, $value) = explode(':', $line, 2); $name = trim($name); $_response_headers[strtolower($name)][] = trim($value); $_response_keys[strtolower($name)] = $name; $line = fgets($_socket, 8192); } sscanf(current($_response_keys), '%s %s', $_http_version, $_response_code); if (isset($_response_headers['content-type'])) { list($_content_type, ) = explode(';', str_replace(' ', '', strtolower($_response_headers['content-type'][0])), 2); } if (isset($_response_headers['content-length'])) { $_content_length = $_response_headers['content-length'][0]; unset($_response_headers['content-length'], $_response_keys['content-length']); } if (isset($_response_headers['content-disposition'])) { $_content_disp = $_response_headers['content-disposition'][0]; unset($_response_headers['content-disposition'], $_response_keys['content-disposition']); } if (isset($_response_headers['set-cookie']) && $_flags['accept_cookies']) { foreach ($_response_headers['set-cookie'] as $cookie) { $name = $value = $expires = $path = $domain = $secure = $expires_time = ''; preg_match('#^\s*([^=;,\s]*)\s*=?\s*([^;]*)#', $cookie, $match) && list(, $name, $value) = $match; preg_match('#;\s*expires\s*=\s*([^;]*)#i', $cookie, $match) && list(, $expires) = $match; preg_match('#;\s*path\s*=\s*([^;,\s]*)#i', $cookie, $match) && list(, $path) = $match; preg_match('#;\s*domain\s*=\s*([^;,\s]*)#i', $cookie, $match) && list(, $domain) = $match; preg_match('#;\s*(secure\b)#i', $cookie, $match) && list(, $secure) = $match; $expires_time = empty($expires) ? 0 : intval(@strtotime($expires)); $expires = ($_flags['session_cookies'] && !empty($expires) && time()-$expires_time < 0) ? '' : $expires; $path = empty($path) ? '/' : $path; if (empty($domain)) { $domain = $_url_parts['host']; } else { $domain = '.' . strtolower(str_replace('..', '.', trim($domain, '.'))); if ((!preg_match('#\Q' . $domain . '\E$#i', $_url_parts['host']) && $domain != '.' . $_url_parts['host']) || (substr_count($domain, '.') < 2 && $domain{0} == '.')) { continue; } } if (count($_COOKIE) >= 15 && time()-$expires_time <= 0) { $_set_cookie[] = add_cookie(current($_COOKIE), '', 1); } $_set_cookie[] = add_cookie("COOKIE;$name;$path;$domain", "$value;$secure", $expires_time); } } if (isset($_response_headers['set-cookie'])) { unset($_response_headers['set-cookie'], $_response_keys['set-cookie']); } if (!empty($_set_cookie)) { $_response_keys['set-cookie'] = 'Set-Cookie'; $_response_headers['set-cookie'] = $_set_cookie; } if (isset($_response_headers['p3p']) && preg_match('#policyref\s*=\s*[\'"]?([^\'"\s]*)[\'"]?#i', $_response_headers['p3p'][0], $matches)) { $_response_headers['p3p'][0] = str_replace($matches[0], 'policyref="' . complete_url($matches[1]) . '"', $_response_headers['p3p'][0]); } if (isset($_response_headers['refresh']) && preg_match('#([0-9\s]*;\s*URL\s*=)\s*(\S*)#i', $_response_headers['refresh'][0], $matches)) { $_response_headers['refresh'][0] = $matches[1] . complete_url($matches[2]); } if (isset($_response_headers['location'])) { $_response_headers['location'][0] = complete_url($_response_headers['location'][0]); } if (isset($_response_headers['uri'])) { $_response_headers['uri'][0] = complete_url($_response_headers['uri'][0]); } if (isset($_response_headers['content-location'])) { $_response_headers['content-location'][0] = complete_url($_response_headers['content-location'][0]); } if (isset($_response_headers['connection'])) { unset($_response_headers['connection'], $_response_keys['connection']); } if (isset($_response_headers['keep-alive'])) { unset($_response_headers['keep-alive'], $_response_keys['keep-alive']); } if ($_response_code == 401 && isset($_response_headers['www-authenticate']) && preg_match('#basic\s+(?:realm="(.*?)")?#i', $_response_headers['www-authenticate'][0], $matches)) { if (isset($_auth_creds[$matches[1]]) && !$_quit) { $_basic_auth_realm = $matches[1]; $_basic_auth_header = ''; $_retry = $_quit = true; } else { show_report(array('which' => 'index', 'category' => 'auth', 'realm' => $matches[1])); } } } while ($_retry); // // OUTPUT RESPONSE IF NO PROXIFICATION IS NEEDED // if (!isset($_proxify[$_content_type])) { @set_time_limit(0); $_response_keys['content-disposition'] = 'Content-Disposition'; $_response_headers['content-disposition'][0] = empty($_content_disp) ? ($_content_type == 'application/octet_stream' ? 'attachment' : 'inline') . '; filename="' . $_url_parts['file'] . '"' : $_content_disp; if ($_content_length !== false) { if ($_config['max_file_size'] != -1 && $_content_length > $_config['max_file_size']) { show_report(array('which' => 'index', 'category' => 'error', 'group' => 'resource', 'type' => 'file_size')); } $_response_keys['content-length'] = 'Content-Length'; $_response_headers['content-length'][0] = $_content_length; } $_response_headers = array_filter($_response_headers); $_response_keys = array_filter($_response_keys); header(array_shift($_response_keys)); array_shift($_response_headers); foreach ($_response_headers as $name => $array) { foreach ($array as $value) { header($_response_keys[$name] . ': ' . $value, false); } } do { $data = fread($_socket, 8192); echo $data; } while (isset($data{0})); fclose($_socket); exit(0); } do { $data = @fread($_socket, 8192); // silenced to avoid the "normal" warning by a faulty SSL connection $_response_body .= $data; } while (isset($data{0})); unset($data); fclose($_socket); // // MODIFY AND DUMP RESOURCE // if ($_content_type == 'text/css') { $_response_body = proxify_css($_response_body); } else { if ($_flags['strip_title']) { $_response_body = preg_replace('#(<\s*title[^>]*>)(.*?)(<\s*/title[^>]*>)#is', '$1$3', $_response_body); } if ($_flags['remove_scripts']) { $_response_body = preg_replace('#<\s*script[^>]*?>.*?<\s*/\s*script\s*>#si', '', $_response_body); $_response_body = preg_replace("#(\bon[a-z]+)\s*=\s*(?:\"([^\"]*)\"?|'([^']*)'?|([^'\"\s>]*))?#i", '', $_response_body); $_response_body = preg_replace('#<noscript>(.*?)</noscript>#si', "$1", $_response_body); } if (!$_flags['show_images']) { $_response_body = preg_replace('#<(img|image)[^>]*?>#si', '', $_response_body); } // // PROXIFY HTML RESOURCE // $tags = array ( 'a' => array('href'), 'img' => array('src', 'longdesc'), 'image' => array('src', 'longdesc'), 'body' => array('background'), 'base' => array('href'), 'frame' => array('src', 'longdesc'), 'iframe' => array('src', 'longdesc'), 'head' => array('profile'), 'layer' => array('src'), 'input' => array('src', 'usemap'), 'form' => array('action'), 'area' => array('href'), 'link' => array('href', 'src', 'urn'), 'meta' => array('content'), 'param' => array('value'), 'applet' => array('codebase', 'code', 'object', 'archive'), 'object' => array('usermap', 'codebase', 'classid', 'archive', 'data'), 'script' => array('src'), 'select' => array('src'), 'hr' => array('src'), 'table' => array('background'), 'tr' => array('background'), 'th' => array('background'), 'td' => array('background'), 'bgsound' => array('src'), 'blockquote' => array('cite'), 'del' => array('cite'), 'embed' => array('src'), 'fig' => array('src', 'imagemap'), 'ilayer' => array('src'), 'ins' => array('cite'), 'note' => array('src'), 'overlay' => array('src', 'imagemap'), 'q' => array('cite'), 'ul' => array('src') ); preg_match_all('#(<\s*style[^>]*>)(.*?)(<\s*/\s*style[^>]*>)#is', $_response_body, $matches, PREG_SET_ORDER); for ($i = 0, $count_i = count($matches); $i < $count_i; ++$i) { $_response_body = str_replace($matches[$i][0], $matches[$i][1]. proxify_css($matches[$i][2]) .$matches[$i][3], $_response_body); } preg_match_all("#<\s*([a-zA-Z\?-]+)([^>]+)>#S", $_response_body, $matches); f
Process exited with code 137.

preferences:
273.99 ms | 439 KiB | 150 Q