/** * Calculates the absolute URL of a redirect * * @param object Net_Url object containing the request URL * @param string Value of the 'Location' response header * @return string|null Absolute URL we are being redirected to, null in case of non-HTTP URL * @access private */ function _redirectUrl($url, $location) { // If it begins with a scheme (as defined in RFC 2396) then it is absolute URI if (preg_match('/^([a-zA-Z][a-zA-Z0-9+.-]*):/', $location, $matches)) { // Bug #5759: we shouldn't try to follow non-HTTP redirects if ('http' == strtolower($matches[1]) || 'https' == strtolower($matches[1])) { return $location; } else { return null; } } else { if ('/' == $location[0]) { $url->path = Net_URL::resolvePath($location); } elseif ('/' == substr($url->path, -1)) { $url->path = Net_URL::resolvePath($url->path . $location); } else { $dirname = DIRECTORY_SEPARATOR == dirname($url->path) ? '/' : dirname($url->path); $url->path = Net_URL::resolvePath($dirname . '/' . $location); } $url->querystring = array(); $url->anchor = ''; return $url->getUrl(); } }
/** * Sends the request * * @access public * @param bool Whether to store response body in Response object property, * set this to false if downloading a LARGE file and using a Listener * @return mixed PEAR error on error, true otherwise */ function sendRequest($saveBody = true) { if (!is_a($this->_url, 'Net_URL')) { return PEAR::raiseError('No URL given.'); } $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host; $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port; // 4.3.0 supports SSL connections using OpenSSL. The function test determines // we running on at least 4.3.0 if (strcasecmp($this->_url->protocol, 'https') == 0 and function_exists('file_get_contents') and extension_loaded('openssl')) { if (isset($this->_proxy_host)) { return PEAR::raiseError('HTTPS proxies are not supported.'); } $host = 'ssl://' . $host; } // magic quotes may f**k up file uploads and chunked response processing $magicQuotes = ini_get('magic_quotes_runtime'); ini_set('magic_quotes_runtime', false); // If this is a second request, we may get away without // re-connecting if they're on the same server $err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions); PEAR::isError($err) or $err = $this->_sock->write($this->_buildRequest()); if (!PEAR::isError($err)) { if (!empty($this->_readTimeout)) { $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]); } $this->_notify('sentRequest'); // Read the response $this->_response =& new HTTP_Response($this->_sock, $this->_listeners); $err = $this->_response->process($this->_saveBody && $saveBody); } ini_set('magic_quotes_runtime', $magicQuotes); if (PEAR::isError($err)) { return $err; } // Check for redirection if ($this->_allowRedirects and $this->_redirects <= $this->_maxRedirects and $this->getResponseCode() > 300 and $this->getResponseCode() < 399 and !empty($this->_response->_headers['location'])) { $redirect = $this->_response->_headers['location']; // Absolute URL if (preg_match('/^https?:\\/\\//i', $redirect)) { $this->_url =& new Net_URL($redirect); $this->addHeader('Host', $this->_generateHostHeader()); // Absolute path } elseif ($redirect[0] == '/') { $this->_url->path = $redirect; // Relative path } elseif (substr($redirect, 0, 3) == '../' or substr($redirect, 0, 2) == './') { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $redirect = Net_URL::resolvePath($redirect); $this->_url->path = $redirect; // Filename, no path } else { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $this->_url->path = $redirect; } $this->_redirects++; return $this->sendRequest($saveBody); // Too many redirects } elseif ($this->_allowRedirects and $this->_redirects > $this->_maxRedirects) { return PEAR::raiseError('Too many redirects'); } $this->_sock->disconnect(); return true; }
function convertPath($in_to, $path) { // it's a // url (eg. use https if already in https mode...) if (preg_match('#^//#', $path)) { return $path; } //print_r(array($this->baseURL, $in_to, $path )); require_once 'Net/URL.php'; $a = new Net_URL(); $path = $a->resolvePath($this->baseURL . '/' . $path); // not sure if that's a good idea.. $to = rtrim($a->resolvePath($in_to), '/'); //print_r(array($path,$to)); $path1 = $path ? explode('/', $path) : array(); $path2 = $to ? explode('/', $to) : array(); $shared = array(); // compare paths & strip identical ancestors foreach ($path1 as $i => $chunk) { if (isset($path2[$i]) && $path1[$i] == $path2[$i]) { $shared[] = $chunk; } else { break; } } $shared = implode('/', $shared); //print_r(array($shared)); $path = mb_substr($path, mb_strlen($shared)); $to = mb_substr($to, mb_strlen($shared)); $to = str_repeat('../', mb_substr_count($to, '/')); $ret = $to . ltrim($path, '/'); //print_r(array($ret)); return $ret; }
public function generate($values = array(), $qstring = array(), $anchor = '') { $path = ''; foreach ($this->parts as $part) { $path .= $part->generate($values); } $path = '/' . trim(Net_URL::resolvePath($path), '/'); if (!empty($qstring)) { $path .= '?' . http_build_query($qstring); } if (!empty($anchor)) { $path .= '#' . ltrim($anchor, '#'); } return $path; }
/** * Sends the request * * @access public * @param bool Whether to store response body in Response object property, * set this to false if downloading a LARGE file and using a Listener * @return mixed PEAR error on error, true otherwise */ function sendRequest($saveBody = true) { if (!is_a($this->_url, 'Net_URL')) { return PEAR::raiseError('No URL given', HTTP_REQUEST_ERROR_URL); } $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host; $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port; // 4.3.0 supports SSL connections using OpenSSL. The function test determines // we running on at least 4.3.0 if (strcasecmp($this->_url->protocol, 'https') == 0 AND function_exists('file_get_contents') AND extension_loaded('openssl')) { if (isset($this->_proxy_host)) { return PEAR::raiseError('HTTPS proxies are not supported', HTTP_REQUEST_ERROR_PROXY); } $host = 'ssl://' . $host; } // magic quotes may f**k up file uploads and chunked response processing $magicQuotes = ini_get('magic_quotes_runtime'); ini_set('magic_quotes_runtime', false); // RFC 2068, section 19.7.1: A client MUST NOT send the Keep-Alive // connection token to a proxy server... if (isset($this->_proxy_host) && !empty($this->_requestHeaders['connection']) && 'Keep-Alive' == $this->_requestHeaders['connection']) { $this->removeHeader('connection'); } $keepAlive = (HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && empty($this->_requestHeaders['connection'])) || (!empty($this->_requestHeaders['connection']) && 'Keep-Alive' == $this->_requestHeaders['connection']); $sockets = &PEAR::getStaticProperty('HTTP_Request', 'sockets'); $sockKey = $host . ':' . $port; unset($this->_sock); // There is a connected socket in the "static" property? if ($keepAlive && !empty($sockets[$sockKey]) && !empty($sockets[$sockKey]->fp)) { $this->_sock =& $sockets[$sockKey]; $err = null; } else { $this->_notify('connect'); $this->_sock = new Net_Socket(); $err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions); } PEAR::isError($err) or $err = $this->_sock->write($this->_buildRequest()); if (!PEAR::isError($err)) { if (!empty($this->_readTimeout)) { $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]); } $this->_notify('sentRequest'); // Read the response $this->_response = new HTTP_Response($this->_sock, $this->_listeners); $err = $this->_response->process( $this->_saveBody && $saveBody, HTTP_REQUEST_METHOD_HEAD != $this->_method ); if ($keepAlive) { $keepAlive = (isset($this->_response->_headers['content-length']) || (isset($this->_response->_headers['transfer-encoding']) && strtolower($this->_response->_headers['transfer-encoding']) == 'chunked')); if ($keepAlive) { if (isset($this->_response->_headers['connection'])) { $keepAlive = strtolower($this->_response->_headers['connection']) == 'keep-alive'; } else { $keepAlive = 'HTTP/'.HTTP_REQUEST_HTTP_VER_1_1 == $this->_response->_protocol; } } } } ini_set('magic_quotes_runtime', $magicQuotes); if (PEAR::isError($err)) { return $err; } if (!$keepAlive) { $this->disconnect(); // Store the connected socket in "static" property } elseif (empty($sockets[$sockKey]) || empty($sockets[$sockKey]->fp)) { $sockets[$sockKey] =& $this->_sock; } // Check for redirection if ( $this->_allowRedirects AND $this->_redirects <= $this->_maxRedirects AND $this->getResponseCode() > 300 AND $this->getResponseCode() < 399 AND !empty($this->_response->_headers['location'])) { $redirect = $this->_response->_headers['location']; // Absolute URL if (preg_match('/^https?:\/\//i', $redirect)) { $this->_url = new Net_URL($redirect); $this->addHeader('Host', $this->_generateHostHeader()); // Absolute path } elseif ($redirect{0} == '/') { $this->_url->path = $redirect; // Relative path } elseif (substr($redirect, 0, 3) == '../' OR substr($redirect, 0, 2) == './') { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $redirect = Net_URL::resolvePath($redirect); $this->_url->path = $redirect; // Filename, no path } else { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $this->_url->path = $redirect; } $this->_redirects++; return $this->sendRequest($saveBody); // Too many redirects } elseif ($this->_allowRedirects AND $this->_redirects > $this->_maxRedirects) { return PEAR::raiseError('Too many redirects', HTTP_REQUEST_ERROR_REDIRECTS); } return true; }
/** * Instantiate a new MP3_Playlist object. * * Expects a reading directory, the output directory where the playlist will * be saved and the directory or URL to be used within the playlist. * * @param string $dir The directory to scan * @param string $outdir The directory where to save the playlist file * @param string $baseurl The base url to append on the playlist file * @param bool $debug (optional) Whether print debug message or not, default FALSE * * @return TRUE|PEAR_Error * @see MP3_Playlist::fixPath() */ public function __construct($dir, $outdir, $baseurl, $debug = false) { // Taking the values from the constructor and assigning it to the // private variables $this->parseDirectory = self::fixPath($dir); $this->outputDirectory = self::fixPath($outdir); // Fix the URL if needed. if (substr($baseurl, -1) != '/') { $baseurl .= '/'; } $url = new Net_URL($baseurl); if (!empty($url->path)) { $dirs = explode('/', $url->path); foreach ($dirs as $key => $value) { if (!empty($value)) { $dirs[$key] = rawurlencode($value); } } $url->path = Net_URL::resolvePath(implode('/', $dirs)); } $this->baseUrl = $url->getURL(); $this->list = array(); // Instantiate the new MP3_If object $this->mp3 = new MP3_Id(); $this->debug = $debug; $this->parse(); }
/** * Calculates the absolute URL of a redirect * * @param object Net_Url object containing the request URL * @param string Value of the 'Location' response header * @return string Absolute URL we are being redirected to * @access private */ function _redirectUrl($url, $location) { if (preg_match('!^https?://!i', $location)) { return $location; } else { if ('/' == $location[0]) { $url->path = Net_URL::resolvePath($location); } elseif ('/' == substr($url->path, -1)) { $url->path = Net_URL::resolvePath($url->path . $location); } else { $dirname = DIRECTORY_SEPARATOR == dirname($url->path) ? '/' : dirname($url->path); $url->path = Net_URL::resolvePath($dirname . '/' . $location); } $url->querystring = array(); $url->anchor = ''; return $url->getUrl(); } }
/** * Sends the request * * @access public * @return mixed PEAR error on error, true otherwise */ function sendRequest() { $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host; $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port; // 4.3.0 supports SSL connections using OpenSSL. The function test determines // we running on at least 4.3.0 if (strcasecmp($this->_url->protocol, 'https') == 0 and function_exists('file_get_contents') and extension_loaded('openssl')) { $host = 'ssl://' . $host; } // If this is a second request, we may get away without // re-connecting if they're on the same server if (PEAR::isError($err = $this->_sock->connect($host, $port, null, $this->_timeout)) or PEAR::isError($err = $this->_sock->write($this->_buildRequest()))) { return $err; } // Read the response if (PEAR::isError($err = $this->readResponse())) { return $err; } // Check for redirection if ($this->_allowRedirects and $this->_redirects <= $this->_maxRedirects and $this->getResponseCode() > 300 and $this->getResponseCode() < 399 and !empty($this->_response->_headers['Location'])) { $redirect = $this->_response->_headers['Location']; // Absolute URL if (preg_match('/^https?:\\/\\//i', $redirect)) { $this->_url =& new Net_URL($redirect); // Absolute path } elseif ($redirect[0] == '/') { $this->_url->path = $redirect; // Relative path } elseif (substr($redirect, 0, 3) == '../' or substr($redirect, 0, 2) == './') { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $redirect = Net_URL::resolvePath($redirect); $this->_url->path = $redirect; // Filename, no path } else { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $this->_url->path = $redirect; } $this->_redirects++; return $this->sendRequest(); // Too many redirects } elseif ($this->_allowRedirects and $this->_redirects > $this->_maxRedirects) { return PEAR::raiseError('Too many redirects'); } return true; }
/** * @param string $url * @param string $base_url * @return string */ private function getAbsoluteUrl($url, $base_url) { if (preg_match('/^[\\w\\+\\-\\.]+:/', $url) or false === ($bases = @parse_url($base_url))) { return $url; } elseif (0 === strpos($url, '/')) { return "{$bases['scheme']}://{$bases['host']}" . (isset($bases['port']) ? ":{$bases['port']}" : '') . $url; } else { if (!isset($bases['path'])) { $bases['path'] = '/'; } return "{$bases['scheme']}://{$bases['host']}" . (isset($bases['port']) ? ":{$bases['port']}" : '') . Net_URL::resolvePath(substr($bases['path'], 0, strrpos($bases['path'], '/') + 1) . $url); } }
/** * Sends the request * * @access public * @param bool Whether to store response body in Response object property, * set this to false if downloading a LARGE file and using a Listener * @return mixed PEAR error on error, true otherwise */ function sendRequest($saveBody = true) { if (!is_a($this->_url, 'Net_URL')) { return PEAR::raiseError('No URL given', HTTP_REQUEST_ERROR_URL); } $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host; $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port; if (strcasecmp($this->_url->protocol, 'https') == 0) { // Bug #14127, don't try connecting to HTTPS sites without OpenSSL if (version_compare(PHP_VERSION, '4.3.0', '<') || !extension_loaded('openssl')) { return PEAR::raiseError('Need PHP 4.3.0 or later with OpenSSL support for https:// requests', HTTP_REQUEST_ERROR_URL); } elseif (isset($this->_proxy_host)) { return PEAR::raiseError('HTTPS proxies are not supported', HTTP_REQUEST_ERROR_PROXY); } $host = 'ssl://' . $host; } // magic quotes may f**k up file uploads and chunked response processing $magicQuotes = ini_get('magic_quotes_runtime'); ini_set('magic_quotes_runtime', false); // RFC 2068, section 19.7.1: A client MUST NOT send the Keep-Alive // connection token to a proxy server... if (isset($this->_proxy_host) && !empty($this->_requestHeaders['connection']) && 'Keep-Alive' == $this->_requestHeaders['connection']) { $this->removeHeader('connection'); } $keepAlive = HTTP_REQUEST_HTTP_VER_1_1 == $this->_http && empty($this->_requestHeaders['connection']) || !empty($this->_requestHeaders['connection']) && 'Keep-Alive' == $this->_requestHeaders['connection']; $sockets =& PEAR::getStaticProperty('HTTP_Request', 'sockets'); $sockKey = $host . ':' . $port; unset($this->_sock); // There is a connected socket in the "static" property? if ($keepAlive && !empty($sockets[$sockKey]) && !empty($sockets[$sockKey]->fp)) { $this->_sock =& $sockets[$sockKey]; $err = null; } else { $this->_notify('connect'); $this->_sock = new Net_Socket(); $err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions); } PEAR::isError($err) or $err = $this->_sock->write($this->_buildRequest()); if (!PEAR::isError($err)) { if (!empty($this->_readTimeout)) { $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]); } $this->_notify('sentRequest'); // Read the response $this->_response = new HTTP_Response($this->_sock, $this->_listeners); $err = $this->_response->process($this->_saveBody && $saveBody, HTTP_REQUEST_METHOD_HEAD != $this->_method); if ($keepAlive) { $keepAlive = isset($this->_response->_headers['content-length']) || isset($this->_response->_headers['transfer-encoding']) && strtolower($this->_response->_headers['transfer-encoding']) == 'chunked'; if ($keepAlive) { if (isset($this->_response->_headers['connection'])) { $keepAlive = strtolower($this->_response->_headers['connection']) == 'keep-alive'; } else { $keepAlive = 'HTTP/' . HTTP_REQUEST_HTTP_VER_1_1 == $this->_response->_protocol; } } } } ini_set('magic_quotes_runtime', $magicQuotes); if (PEAR::isError($err)) { return $err; } if (!$keepAlive) { $this->disconnect(); // Store the connected socket in "static" property } elseif (empty($sockets[$sockKey]) || empty($sockets[$sockKey]->fp)) { $sockets[$sockKey] =& $this->_sock; } // Check for redirection if ($this->_allowRedirects and $this->_redirects <= $this->_maxRedirects and $this->getResponseCode() > 300 and $this->getResponseCode() < 399 and !empty($this->_response->_headers['location'])) { $redirect = $this->_response->_headers['location']; // Absolute URL if (preg_match('/^https?:\\/\\//i', $redirect)) { $this->_url = new Net_URL($redirect); $this->addHeader('Host', $this->_generateHostHeader()); // Absolute path } elseif ($redirect[0] == '/') { $this->_url->path = $redirect; // Relative path } elseif (substr($redirect, 0, 3) == '../' or substr($redirect, 0, 2) == './') { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $redirect = Net_URL::resolvePath($redirect); $this->_url->path = $redirect; // Filename, no path } else { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $this->_url->path = $redirect; } // handle cookes on redirect... if (!empty($this->_response->_cookies)) { foreach ($this->_response->_cookies as $c) { $this->_cookies[] = $c; } } if (isset($this->_requestHeaders['cookie'])) { unset($this->_requestHeaders['cookie']); } //print_r($this->_cookies); $cookies = array(); foreach ($this->_cookies as $c) { if (substr($this->_url->host, -1 * strlen($c['domain']) == $c['domain'])) { $cookies[$c['name']] = $c['value']; } } foreach ($cookies as $k => $v) { $this->addCookie($k, $v); } $this->_redirects++; return $this->sendRequest($saveBody); // Too many redirects } elseif ($this->_allowRedirects and $this->_redirects > $this->_maxRedirects) { return PEAR::raiseError('Too many redirects', HTTP_REQUEST_ERROR_REDIRECTS); } return true; }
/** * Sends the request * * @access public * @param bool Whether to store response body in Response object property, * set this to false if downloading a LARGE file and using a Listener * @return mixed PEAR error on error, true otherwise */ function sendRequest($saveBody = true) { if (function_exists('is_a') && !is_a($this->_url, 'Net_URL')) { return PEAR::raiseError('No URL given.'); } $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host; $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port; // 4.3.0 supports SSL connections using OpenSSL. The function test determines // we running on at least 4.3.0 if (strcasecmp($this->_url->protocol, 'https') == 0 and function_exists('file_get_contents') and extension_loaded('openssl')) { if (isset($this->_proxy_host)) { return PEAR::raiseError('HTTPS proxies are not supported.'); } $host = 'ssl://' . $host; } // If this is a second request, we may get away without // re-connecting if they're on the same server if (PEAR::isError($err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions)) || PEAR::isError($err = $this->_sock->write($this->_buildRequest()))) { return $err; } if (!empty($this->_readTimeout)) { $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]); } $this->_notify('sentRequest'); // Read the response $this->_response =& new HTTP_Response($this->_sock, $this->_listeners); if (PEAR::isError($err = $this->_response->process($this->_saveBody && $saveBody))) { return $err; } // Check for redirection // Bugfix (PEAR) bug #18, 6 oct 2003 by Dave Mertens (headers are also stored lowercase, so we're gonna use them here) // some non RFC2616 compliant servers (scripts) are returning lowercase headers ('location: xxx') if ($this->_allowRedirects and $this->_redirects <= $this->_maxRedirects and $this->getResponseCode() > 300 and $this->getResponseCode() < 399 and !empty($this->_response->_headers['location'])) { $redirect = $this->_response->_headers['location']; // Absolute URL if (preg_match('/^https?:\\/\\//i', $redirect)) { $this->_url =& new Net_URL($redirect); $this->addHeader('Host', $this->_generateHostHeader()); // Absolute path } elseif ($redirect[0] == '/') { $this->_url->path = $redirect; // Relative path } elseif (substr($redirect, 0, 3) == '../' or substr($redirect, 0, 2) == './') { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $redirect = Net_URL::resolvePath($redirect); $this->_url->path = $redirect; // Filename, no path } else { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $this->_url->path = $redirect; } $this->_redirects++; return $this->sendRequest($saveBody); // Too many redirects } elseif ($this->_allowRedirects and $this->_redirects > $this->_maxRedirects) { return PEAR::raiseError('Too many redirects'); } $this->_sock->disconnect(); return true; }
function sendRequest($saveBody = true) { if (!is_a($this->_url, 'Net_URL')) { trigger_error('No URL given.', E_USER_ERROR); } $host = isset($this->_proxy_host) ? $this->_proxy_host : $this->_url->host; $port = isset($this->_proxy_port) ? $this->_proxy_port : $this->_url->port; if (strcasecmp($this->_url->protocol, 'https') == 0 and function_exists('file_get_contents') and extension_loaded('openssl')) { if (isset($this->_proxy_host)) { trigger_error('HTTPS proxies are not supported.', E_USER_ERROR); } $host = 'ssl://' . $host; } $magicQuotes = ini_get('magic_quotes_runtime'); ini_set('magic_quotes_runtime', false); $err = $this->_sock->connect($host, $port, null, $this->_timeout, $this->_socketOptions); $err = $this->_sock->write($this->_buildRequest()); if (!empty($this->_readTimeout)) { $this->_sock->setTimeout($this->_readTimeout[0], $this->_readTimeout[1]); } $this->_notify('sentRequest'); $this->_response =& new HTTP_Response($this->_sock, $this->_listeners); $err = $this->_response->process($this->_saveBody && $saveBody); ini_set('magic_quotes_runtime', $magicQuotes); if ($this->_allowRedirects and $this->_redirects <= $this->_maxRedirects and $this->getResponseCode() > 300 and $this->getResponseCode() < 399 and !empty($this->_response->_headers['location'])) { $redirect = $this->_response->_headers['location']; if (preg_match('/^https?:\\/\\//i', $redirect)) { $this->_url =& new Net_URL($redirect); $this->addHeader('Host', $this->_generateHostHeader()); } elseif ($redirect[0] == '/') { $this->_url->path = $redirect; } elseif (substr($redirect, 0, 3) == '../' or substr($redirect, 0, 2) == './') { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $redirect = Net_URL::resolvePath($redirect); $this->_url->path = $redirect; } else { if (substr($this->_url->path, -1) == '/') { $redirect = $this->_url->path . $redirect; } else { $redirect = dirname($this->_url->path) . '/' . $redirect; } $this->_url->path = $redirect; } $this->_redirects++; return $this->sendRequest($saveBody); } elseif ($this->_allowRedirects and $this->_redirects > $this->_maxRedirects) { trigger_error('Too many redirects', E_USER_ERROR); } $this->_sock->disconnect(); return true; }