Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 卷曲慢启动传输时间_Php_Performance_Curl - Fatal编程技术网

Php 卷曲慢启动传输时间

Php 卷曲慢启动传输时间,php,performance,curl,Php,Performance,Curl,你好 cURL在请求页面时动作非常慢。我知道这不是请求的页面,因为页面会立即返回到浏览器中 我注意到的两件事 启动转移时间通常为20分钟 本地端口似乎每次都在变化。这正常吗 偶尔,cURL会立即做出响应 我有以下代码: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, fal

你好

cURL在请求页面时动作非常慢。我知道这不是请求的页面,因为页面会立即返回到浏览器中

我注意到的两件事

  • 启动转移时间通常为20分钟
  • 本地端口似乎每次都在变化。这正常吗
  • 偶尔,cURL会立即做出响应
我有以下代码:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url ); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, false);
$output = curl_exec($ch); 
curl_close($ch); 
回显curl_getinfo()可以提供以下信息

[url] => http://127.0.0.1:80/wpengine/?json=t
[content_type] => text/html; charset=iso-8859-1
[http_code] => 302
[header_size] => 215
[request_size] => 64
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 17.238
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 221
[speed_download] => 12
[speed_upload] => 0
[download_content_length] => 221
[upload_content_length] => 0
[starttransfer_time] => 17.238
[redirect_time] => 0
[certinfo] => Array
    (
    )

[primary_ip] => 127.0.0.1
[primary_port] => 80
[local_ip] => 127.0.0.1
[local_port] => 51875
[redirect_url] => 
有谁能给我指点一下如何弄清楚到底发生了什么

下面是Apache访问日志中的几行代码

127.0.0.1 - - [06/Dec/2013:12:01:22 -0500] "GET /wpengine/?json=t HTTP/1.1" 302 221
127.0.0.1 - - [06/Dec/2013:12:01:12 -0500] "GET /community HTTP/1.1" 200 6266
127.0.0.1 - - [06/Dec/2013:12:01:22 -0500] "GET /public/js/jquery.js?b=10 HTTP/1.1" 304 -

我在点击Google Analytics的MP API时发现了一个类似的问题。。。starttransfer时间始终是1.0秒加上一个很小的量,从中我推断某个地方有1秒的延迟,我猜是cURL。在我这边,它没有使用CPU,我怀疑谷歌是否在拖延时间。。。来自curl_getinfo()的otuput

大堆 ( [网址]=>http://www.google-analytics.com/collect [内容类型]=>image/gif [http_代码]=>200 [标题大小]=>388 [请求大小]=>201 [filetime]=>-1 [ssl\u验证\u结果]=>0 [重定向\u计数]=>0 [总时间]=>1.021528 [namelookup_time]=>8.7E-5 [连接时间]=>8.8E-5 [预传输时间]=>0.000324 [上传大小]=>1736 [下载大小]=>35 [速度下载]=>34 [速度上传]=>1699 [下载内容长度]=>35 [上传内容长度]=>1736 [开始传输时间]=>1.002496 [重定向时间]=>0 [certinfo]=>数组 ( ) [重定向\u url]=> )
我在点击Google Analytics的MP API时发现了一个类似的问题。。。starttransfer时间始终是1.0秒加上一个很小的量,从中我推断某个地方有1秒的延迟,我猜是cURL。在我这边,它没有使用CPU,我怀疑谷歌是否在拖延时间。。。来自curl_getinfo()的otuput

大堆 ( [网址]=>http://www.google-analytics.com/collect [内容类型]=>image/gif [http_代码]=>200 [标题大小]=>388 [请求大小]=>201 [filetime]=>-1 [ssl\u验证\u结果]=>0 [重定向\u计数]=>0 [总时间]=>1.021528 [namelookup_time]=>8.7E-5 [连接时间]=>8.8E-5 [预传输时间]=>0.000324 [上传大小]=>1736 [下载大小]=>35 [速度下载]=>34 [速度上传]=>1699 [下载内容长度]=>35 [上传内容长度]=>1736 [开始传输时间]=>1.002496 [重定向时间]=>0 [certinfo]=>数组 ( ) [重定向\u url]=> ) 我通过设置

curl_setopt($ch, CURLOPT_POST, false);
我通过设置

curl_setopt($ch, CURLOPT_POST, false);

这主要是因为当服务器处理大量POST数据时,Expect:100 continue头CURL发送到服务器,而服务器恰好不支持此功能。您可以通过为
curl
命令行添加
-vv
进行确认,并查看输出

要解决这个问题,您可以

  • 修复服务器以支持
    Expect:100 continue
    header,或
  • 强制curl不通过add
    -H“Expect:
    选项发送它(在php中,您可以参考以下答案:)
  • 有关
    Expect:100 continue的链接


    这主要是因为服务器在处理大量POST数据时会发送
    Expect:100 continue
    头卷曲,而服务器恰好不支持此功能。您可以通过为
    curl
    命令行添加
    -vv
    进行确认,并查看输出

    要解决这个问题,您可以

  • 修复服务器以支持
    Expect:100 continue
    header,或
  • 强制curl不通过add
    -H“Expect:
    选项发送它(在php中,您可以参考以下答案:)
  • 有关
    Expect:100 continue的链接


    此线程中@brandonscript的一条评论帮助我解决了这个问题

    他的回答是:


    好奇的是,CURL是否首先尝试IPv6,但未能解决问题

    尝试添加curl\u setopt($ch,CURLOPT\u IPRESOLVE,curl\u IPRESOLVE\u V4)

    我的问题正好相反,我必须设置以下选项:

    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6 );
    

    谢谢大家。

    这个帖子中@brandonscript的一条评论帮助我解决了这个问题

    他的回答是:


    好奇的是,CURL是否首先尝试IPv6,但未能解决问题

    尝试添加curl\u setopt($ch,CURLOPT\u IPRESOLVE,curl\u IPRESOLVE\u V4)

    我的问题正好相反,我必须设置以下选项:

    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6 );
    

    谢谢大家。

    如果您在本地运行,您设置了什么服务器?你能检查一下服务器日志吗?@r3mus我正在用Apache运行Wamp。我编辑了我的帖子,加入了访问日志中的几行内容,想知道CURL是否首先尝试IPv6,但未能解决?尝试添加
    curl\u setopt($ch,CURLOPT\u IPRESOLVE,curl\u IPRESOLVE\u V4)嗯,这没什么区别。我觉得这很令人费解。它是否与会话有关,因为它位于同一个域上?只是在黑暗中拍摄…不是很确定,但看看你的日志,一旦CURL真的命中服务器,它的速度会非常快。您可以在某个地方的公共服务器上尝试此操作以消除localhost变量吗?如果您在本地运行此操作,您设置了什么服务器?你能检查一下服务器日志吗?@r3mus我正在用Apache运行Wamp。我编辑了我的帖子,加入了访问日志中的几行内容,想知道CURL是否首先尝试IPv6,但未能解决?尝试添加
    curl\u setopt($ch,CURLOPT\u IPRESOLVE,curl\u IPRESOLVE\u V4)嗯,这没什么区别。我觉得这很令人费解。它是否与会话有关,因为它位于同一个域上?只是在黑暗中拍摄…不是很确定,但看看你的日志,一旦CURL真的命中服务器,它的速度会非常快。您可以在公共服务器上的某个位置尝试此操作,以实现elimi