3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php $redirect_url = "http://192.168.1.101/gate.php"; // check if curl is installed $loaded_extensions = get_loaded_extensions(); if (array_search('curl', $loaded_extensions) === false) die(); // check if data was received in full $real_length = intval($_SERVER['CONTENT_LENGTH']); $received_report_data = file_get_contents('php://input'); if ($real_length !== strlen($received_report_data)) die(); // extract host from redirect url if (substr($redirect_url, 0, 4) != 'http') $redirect_url = 'http://'.$redirect_url; $redirect_host = @parse_url($redirect_url, PHP_URL_HOST); function my_upload($ch, $fp, $len) { static $pos=0; // keep track of position $post_data = file_get_contents('php://input'); $data = substr($post_data, $pos, $len); $pos += strlen($data); return $data; } function curl_load($url, &$data, $headers) { clearstatcache(); $return = false; $url = trim($url); if (substr($url, 0, 4) != 'http') $url = 'http://'.$url; $ch = curl_init($url); if (!$ch) return false; curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false); curl_setopt($ch, CURLOPT_POST, true); array_push($headers, 'Accept-Encoding: identity, *;q=0'); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $post_data = file_get_contents('php://input'); if (strlen($post_data)) { curl_setopt($ch, CURLOPT_READFUNCTION, 'my_upload'); } $curl_execute_result = @curl_exec($ch); // Check if any error occurred if (!curl_errno($ch)) { $data = $curl_execute_result; $return = true; } else { $data = ''; $return = false; } curl_close($ch); return $return; } function parse_lines($value) { return preg_split("/((\r(?!\n))|((?<!\r)\n)|(\r\n))/", $value); } $original_query = trim(@parse_url($redirect_url, PHP_URL_QUERY)); if (!strlen($original_query)) $query_string = '?'; else $query_string = '&'; $query_string .= $_SERVER['QUERY_STRING']; $query_string .= '&pass_ip='.$_SERVER['REMOTE_ADDR']; $data = ''; $headers = getallheaders(); $curl_headers_array = array(); foreach ($headers as $name=>$value) { if (strtolower($name) == 'accept-encoding' || strtolower($name) == 'connection') { } elseif (strtolower($name) == 'host') { array_push($curl_headers_array, $name.': '.$redirect_host); } else { array_push($curl_headers_array, $name.': '.$value); } } if (!curl_load($redirect_url.$query_string, $data, $curl_headers_array)) { header("HTTP/1.0 404 Not Found"); header("Status: 404 Not Found"); $_SERVER['REDIRECT_STATUS'] = 404; if (file_exists('404.html')) echo file_get_contents('404.html'); die(); } $headers_end_pos = strpos($data, "\r\n\r\n"); $data_start_pos = $headers_end_pos+4; if ($headers_end_pos === false) { $headers_end_pos = strpos($data, "\n\n"); $data_start_pos = $headers_end_pos+2; } if ($headers_end_pos !== false) { $lines = parse_lines(substr($data, 0, $headers_end_pos)); foreach ($lines as $line) { // do not pass "Transfer-Encoding: chunked" header if (stripos($line, 'Transfer-Encoding') === false) { header($line."\r\n"); } } die(substr($data, $data_start_pos)); } else { die($data); }
Output for 4.3.0 - 5.6.28, 7.0.0 - 7.1.0
Output for hhvm-3.10.0 - 3.12.0
Notice: Undefined index: CONTENT_LENGTH in /in/1W7Jp on line 13 Notice: Undefined index: QUERY_STRING in /in/1W7Jp on line 96 Notice: Undefined index: REMOTE_ADDR in /in/1W7Jp on line 97 Fatal error: Call to undefined function getallheaders() in /in/1W7Jp on line 100
Process exited with code 255.