$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://i.imgur.com/H1zC601.gif");
curl_setopt($curl, CURLOPT_HTTPGET, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
var_dump(curl_getinfo($curl));
在PHP5和PHP7的CLI解释器中,在PHP5中,我得到了
array(26) {
["url"]=>
string(31) "https://i.imgur.com/H1zC601.gif"
["content_type"]=>
string(9) "image/gif"
["http_code"]=>
int(200)
["header_size"]=>
int(597)
["request_size"]=>
int(204)
["filetime"]=>
int(-1)
["ssl_verify_result"]=>
int(0)
["redirect_count"]=>
int(0)
["total_time"]=>
float(1.260002)
["namelookup_time"]=>
float(0.060424)
["connect_time"]=>
float(0.068474)
["pretransfer_time"]=>
float(0.089705)
["size_upload"]=>
float(0)
["size_download"]=>
float(34327108)
["speed_download"]=>
float(27243693)
["speed_upload"]=>
float(0)
["download_content_length"]=>
float(34327108)
["upload_content_length"]=>
float(-1)
["starttransfer_time"]=>
float(0.098354)
["redirect_time"]=>
float(0)
["redirect_url"]=>
string(0) ""
["primary_ip"]=>
string(15) "151.101.124.193"
["certinfo"]=>
array(0) {
}
["primary_port"]=>
int(443)
["local_ip"]=>
string(14) "my IP"
["local_port"]=>
int(44555)
}
在运行PHP7时,我得到了
array(26) {
["url"]=>
string(31) "https://i.imgur.com/H1zC601.gif"
["content_type"]=>
string(9) "image/gif"
["http_code"]=>
int(200)
["header_size"]=>
int(609)
["request_size"]=>
int(61)
["filetime"]=>
int(-1)
["ssl_verify_result"]=>
int(0)
["redirect_count"]=>
int(0)
["total_time"]=>
float(16.875167)
["namelookup_time"]=>
float(0.252648)
["connect_time"]=>
float(0.260626)
["pretransfer_time"]=>
float(0.280489)
["size_upload"]=>
float(0)
["size_download"]=>
float(34327108)
["speed_download"]=>
float(2034178)
["speed_upload"]=>
float(0)
["download_content_length"]=>
float(34327108)
["upload_content_length"]=>
float(-1)
["starttransfer_time"]=>
float(0.288715)
["redirect_time"]=>
float(0)
["redirect_url"]=>
string(0) ""
["primary_ip"]=>
string(15) "151.101.124.193"
["certinfo"]=>
array(0) {
}
["primary_port"]=>
int(443)
["local_ip"]=>
string(14) "my IP"
["local_port"]=>
int(55559)
}
重要的部分是total_time,PHP 5为1.3秒,PHP 7为16.9秒。
当在请求上设置超时时,接收的字节数与超时成比例 - 数据传输速度非常慢,而不是存在阻止任何传输一段时间的阻塞,然后是整件事一气呵成。
服务器正在运行Debian,我似乎无法在Fedora本地计算机上重现该问题。
答案 0 :(得分:1)
与Debian Stretch上的PHP 7相同的问题。我注意到sys-cpu时间很长:0.07s用户10.02s系统92%cpu 10.859总计
禁用transparent_hugepage后问题解决了:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
它不会直接影响curl下载,但会降低php内存分配的速度。请参阅:https://serverfault.com/questions/780555/how-to-troubleshoot-high-load-caused-by-php7
答案 1 :(得分:0)
对我来说,这看起来像网络延迟问题或带宽问题。如果你检查两者之间的path
,你会看到一个下载速度明显快于另一个。使用PHP 5/7-CLI的第一个结果显示@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode!= Activity.RESULT_OK)
return;
if(requestCode == 1){
if(data==null){
return;
}
Message msg = (Message) getIntent().getSerializableExtra(iputTextActivity.IPUT_TEXT_RETURN_CONTENT);
if(msg == null) //I receive null
return;
updateData(1);
}
}
,而第二个结果显示final Message msg = (Message) getIntent().getSerializableExtra(daygramActivity.SER_KEY); //I receive valid //value
mDoneButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
EditText edT = (EditText) findViewById(R.id.editText);
String input = edT.getText().toString();
Intent data=new Intent();
Bundle mBundle = new Bundle();
msg.setContent(input);
mBundle.putSerializable(IPUT_TEXT_RETURN_CONTENT,msg);
data.putExtras(mBundle);
setResult(Activity.RESULT_OK, data);
finish();
}
});
,而它们都具有相同的内容长度speed_download
。
所以第一个是以~25.9MB /秒的速度下载~32.7MB的文件,而第二个是以~1.9MB /秒的速度下载同一个文件。显然第二个会花费更长的时间。
答案 2 :(得分:0)
我有同样的问题与curl onPHP 7.0.12我在cli和fpm模式下运行并且下载速度非常慢,速度从100Mbps降低到仅1~2 Mbps / s,我切换到php 5.6并解决问题,所以这不是网络问题,我相信 希望我的信息可以帮助某人
答案 3 :(得分:0)
你可以看到像这样的php-curl版本:
php5 --ri curl
php7 --ri curl
有时,较低版本可能会导致它。