[PHP-users 29951] pear のhttp_requestについて
mukae masato
mukae @ tenda.co.jp
2006年 8月 7日 (月) 13:21:26 JST
はじめまして。まぼと申します。
初の投稿になります。
お手数ですがご教示頂けますと幸いです。
PEARのHTTP_Requestについてですが
この関数には不具合があるようで
HTTPサーバーの仕様によって
受信処理がネットワークタイムアウトまで終了しないという問題がある
ようです。この問題を解決するためには
Content-Length分だけ受信するようにすればよいみたいなのですが
具体的にどのあたりに処理をいれればよいかよくわかりませんので
どなたか知っている方がいれば教えていただきたく思います。
多分このあたりかなとはおもうのですが・・・
(Request.php内process関数)
function process($saveBody = true)
{
do {
$line = $this->_sock->readLine();
if (sscanf($line, 'HTTP/%s %s', $http_version, $returncode) != 2)
{
return PEAR::raiseError('Malformed response.');
} else {
$this->_protocol = 'HTTP/' . $http_version;
$this->_code = intval($returncode);
}
while ('' !== ($header = $this->_sock->readLine())) {
$this->_processHeader($header);
}
} while (100 == $this->_code);
$this->_notify('gotHeaders', $this->_headers);
// If response body is present, read it and decode
$chunked = isset($this->_headers['transfer-encoding']) && ('
chunked' == $this->_headers['transfer-encoding']);
$gzipped = isset($this->_headers['content-encoding']) && ('gzip'
== $this->_headers['content-encoding']);
$hasBody = false;
if (!isset($this->_headers['content-length']) || 0 != $this->_
headers['content-length']) {
while (!$this->_sock->eof()) {
if ($chunked) {
$data = $this->_readChunked();
} else {
$data = $this->_sock->read(4096);
}
if ('' == $data) {
break;
} else {
$hasBody = true;
if ($saveBody || $gzipped) {
$this->_body .= $data;
}
$this->_notify($gzipped? 'gzTick': 'tick', $data);
}
}
以下省略
宜しくお願い致します
###########################################
株式会社テンダ
〒171-0021
東京都豊島区西池袋2-29-19 KTビル10F
ソフトウェアエンジニアリング事業本部
迎 真人
TEL : 03-3590-4110
FAX : 03-3590-4200
E-Mail : mukae @ tenda.co.jp
###########################################
###########################################
株式会社テンダ
〒171-0021
東京都豊島区西池袋2-29-19 KTビル10F
ソフトウェアエンジニアリング事業本部
迎 真人
TEL : 03-3590-4110
FAX : 03-3590-4200
E-Mail : mukae @ tenda.co.jp
###########################################
PHP-users メーリングリストの案内