#40151 [Opn]: fsockopen can not work?
| From: | playercd8 at hotmail dot com | Date: | Fri, 19 Jan 2007 04:25:18 +0000 |
| Subject: | #40151 [Opn]: fsockopen can not work? | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-107747@lists.php.net to get a copy of this message | ||
ID: 40151
User updated by: playercd8 at hotmail dot com
Reported By: playercd8 at hotmail dot com
Status: Open
Bug Type: Network related
Operating System: FreeBSD5.5
PHP Version: 5.2.0
New Comment:
I can manual telnet remote WebServer to get a html-file at FreeBSD.
but, I can not use fsockopen at FreeBSD.
Why?
Previous Comments:
------------------------------------------------------------------------
[2007-01-19 02:23:15] playercd8 at hotmail dot com
function HttpRequest, It can run at PHP of Fedora Core 6.
but, Why it can not run at FreeBSD ?
Source code of the function, from
http://www.webdeveloper.com/forum/archive/index.php/t-117095.html
, and my some fix it.
PHP work at FreeBSD, It can use socket_connect/socket_recv/socket_write
...etc.
but, why It can not use fsockopen ?
Why ?
---------------------------------------------
function HttpRequest( $url, $method = "GET", $data = NULL,
$additional_headers = NULL, $followRedirects = true )
{
# in compliance with the RFC 2616 post data will not redirected
$method = strtoupper($method);
$url_parsed = @parse_url($url);
if (!@$url_parsed['scheme']) $url_parsed =
@parse_url('http://'.$url);
extract($url_parsed);
$data_get = NULL;
if(is_array($data))
{
$ampersand = '';
$temp = NULL;
foreach($data as $k => $v)
{
if ($k != "0")
{
$temp .= $ampersand.urlencode($k).'='.urlencode($v);
$ampersand = '&';
}
}
$data_get = $temp;
}
if(!@$port)
{
if ($scheme == "https")
$port = 443;
else
$port = 80;
}
if(!@$path) $path = '/';
if(($method == "GET") and (@$data_get)) $path .= "?".$data_get;
#debug
if ($this->debug == true) echo $path;
$out = "$method $path {$_SERVER['SERVER_PROTOCOL']}\r\n";
$out .= "Host: $host\r\n";
if($method == 'POST')
{
$out .= "Content-type: application/x-www-form-urlencoded\r\n";
$out .= "Content-length: " . @strlen($data_get) . "\r\n";
}
$out .= (@$additional_headers)?$additional_headers:'';
$out .= "Connection: Close\r\n\r\n";
if($method == "POST") $out .= $data_get."\r\n";
#debug
if ($this->debug == true) echo $out;
#fix https
$openhost = ($scheme == "https" ? "ssl://" : "").$host;
#debug
if ($this->debug == true) echo
"OpenSocket:".$openhost."(".$port.")";
if(!$fp = @fsockopen($openhost, $port, $errno, $errstr, 15))
{
#debug
if ($this->debug == true) echo "Now can not open
socket.\nError($errno) $errstr\n";
return false;
}
fwrite($fp, $out);
while (!feof($fp))
{
$s = fgets($fp, 128);
#debug
if ($this->debug == true) echo "\n".$s;
if ( $s == "\r\n" )
{
$foundBody = true;
continue;
}
if ( $foundBody )
{
$body .= $s;
} else {
#echo $s;
if( ($followRedirects) and (preg_match('/^Location:(.*)/i', $s,
$matches) != false) )
{
fclose($fp);
if (strpos(trim($matches[1]), 'http') === false)
{
$urlTo = trim($matches[1]);
$urlLocation = ($scheme == 'https' ? 'https://' :
'http://').($host).(substr($urlTo, 0, 1) == '/' ?
'' : '/').($urlTo);
return $this->HttpRequest( $urlLocation );
}
else
return $this->HttpRequest( trim($matches[1]) );
}
$header .= $s;
if(preg_match('@HTTP[/]1[.][01x][\s]{1,}([1-5][01][0-9])[\s].*$@',
$s, $matches))
{
$status = trim($matches[1]);
}
}
}
fclose($fp);
return array('head' => trim($header), 'body' => trim($body),
'status'
=> $status);
}
------------------------------------------------------------------------
[2007-01-17 10:01:48] tony2001@php.net
Not enough information was provided for us to be able
to handle this bug. Please re-read the instructions at
http://bugs.php.net/how-to-report.php
If you can provide more information, feel free to add it
to this bug and change the status back to "Open".
Thank you for your interest in PHP.
------------------------------------------------------------------------
[2007-01-17 09:34:56] playercd8 at hotmail dot com
Description:
------------
$errno is return 671845376
$errstr is not retuen any string
Why I can not use fsockopen to work ?
Reproduce code:
---------------
if(!$fp = @fsockopen($openhost, $port, $errno, $errstr, 15))
{
#debug
if ($this->debug == true) echo "Now can not open
socket.\nError($errno) $errstr\n";
return false;
}
Expected result:
----------------
..
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=40151&edit=1