cURL 在 PHP 7 上非常慢,但在 PHP 5 上则不然

2023-12-02

对于我来说,使用 PHP7.0.11 时,cURL 似乎比仅从命令行运行请求或在 PHP5.6.24 中运行时慢得多。我正在使用以下代码对其进行测试:

$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 本地计算机上重现该问题。


Debian Stretch 上的 PHP 7 存在同样的问题。我注意到系统 CPU 时间很高:0.07 秒用户 10.02 秒系统 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cURL 在 PHP 7 上非常慢,但在 PHP 5 上则不然 的相关文章

  • 如何从 URL 获取当前的 Web 目录?

    如果我有一个网址http www example com sites dir index html http www example com sites dir index html 我想提取 sites 这个词 我知道我必须使用正则表达式
  • 显示带有 id 的内部连接的名称[重复]

    这个问题在这里已经有答案了 我有这个查询 select from countrysegments inner join country on countrysegments country id country id inner join
  • 使用 .htaccess 进行 PHP 设置时出现 500 内部服务器错误

    当我使用时 htaccess对于以下 PHP 设置 我得到500 Internal Server Error访问网站时 中的代码 htaccess file php flag display errors off php flag log
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • php / phpDoc - @return $this 类的实例?

    如何在 phpDoc 中将方法标记为 返回当前类的实例 在下面的示例中 我的 IDE Netbeans 将看到 setSomething 始终返回foo object 但如果我扩展对象 情况就不是这样了 它会返回 this 在第二个示例中是
  • 将 int 转换为 float/double [重复]

    这个问题在这里已经有答案了 当我想要转换时遇到了麻烦integer价值观float 带点的数字 a 7200 b a 3600 echo b 2 b floatval b echo b 2 但它应该回响2 0 or 2 00 我也尝试过se
  • PHP 可以解压缩使用 .NET GZipStream 类压缩的文件吗?

    我有一个 C 应用程序 它与基于 PHP 的 SOAP Web 服务进行通信以进行更新和许可 我现在正在开发一个反馈系统 供用户通过软件自动提交错误和跟踪日志 根据我之前发布的问题 我认为 Web 服务将是实现此目的的最佳方法 最有可能以最
  • 如何在 Yii2 应用程序中显示多个选择下拉列表中的选定值?

    我正在研究 Yii2 我正在使用这样的自定义数组创建多个选择下拉菜单 在控制器文件中 all groups Groups find gt where group created by id gt orwhere new Expression
  • PHP:解析器 asp 页面 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 早上好 我可以用 php 解析一个
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • Chart.js - 使用 mysql 和 php 从数据库获取数据

    我正在尝试将静态数据转换为使用数据库结果 我将使用MySQL and PHP 示例代码 var randomScalingFactor function return Math round Math random 100 var lineC
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • 如何处理致命错误:cURL错误7:无法连接到xxxx端口443

    我有一个连接到第三方 API 的脚本 它是并且应该在 24 7 不间断循环上运行 我在重新启动循环之前在最后使用睡眠 问题是 有时第三方 API 会被拒绝 或者连接会因以下错误而中断 致命错误 未捕获的异常 GuzzleHttp Ring
  • 即使在双引号内或使用 PHP_EOL,PHP echo 也不打印换行符

    这是一张照片剪辑 我认为它很清楚 这真让我抓狂 我似乎无法让 php 在我的本地主机 使用 xampp 或在线 PHP 解释器上打印换行符 如果你想在 php 中使用 HTML 标签 试试这个 echo dkljaks aalksja kl
  • 验证 LDAPS 连接的自签名证书

    我想从 Linux Linux 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 客户端到 Windows 2012 服务器建立安全的 ldap 连接 ldaps 以更改活动中的用户密
  • PHP 使用主键和辅助键对多维数组进行排序[重复]

    这个问题在这里已经有答案了 如何按主键和辅助键对多维数组进行排序 例如 假设有以下数组 result array result 0 prio 1 result 0 date 2010 02 28 result 0 post February
  • 从 URL 任何文件类型创建图像

    我知道imagecreatefromgif https www php net manual en function imagecreatefromgif php imagecreatefromjpeg https www php net
  • 使用多个 WHERE 子句更新 Codeigniter 中的批次

    我查看了 CI 用户指南来了解如何处理update batch 并且它似乎只接受一个索引来匹配要更新的行 但在我的例子中 我需要指定两个索引 例如lang and id page我一起用作索引 这样的lang en id page 115是
  • MySQL如何从多个表中获取数据

    我正在寻找 php MySQL jquery 的帮助 我有2张桌子 table1表 1 有 4 列 id 标题 desc thumb img tabel2表 2 有 3 列 id 表 id img 我只想将 2 个表与 get QS 的值进
  • 无法将句子插入数据库

    我有一些句子 我必须选择由 6 个以上单词组成的句子 然后它们将被插入到数据库中

随机推荐

  • Jupyter 笔记本并排显示两个 pandas 表

    我有两个 pandas 数据框 我想在 Jupyter 笔记本中显示它们 做类似的事情 display df1 display df2 将它们显示在另一个下面 我想在第一个数据框的右侧有第二个数据框 有类似的问题 但看起来人们对将它们合并到
  • 使用 JQuery 更改 CSS 属性

    今天我看到了一个非常简单的方法来改变font size使用 jQuery 的元素 它看起来与以下内容非常相似 这显然不起作用 但我想知道缺少什么 我记得这只是一行代码 注 我已经尝试过jQuery document body css fon
  • 我可以使用 ObjectChangeListener 监听任何对象的更改吗?

    我有一个Integer称为x 如果它发生变化 那么我想在 GUI 中更新我的表 听 x 我已经尝试过 ChangeEvent y new javax swing event ChangeEvent x 我实施javax naming eve
  • Netlogo 数组需要文字值

    该数组需要一个文字值 set chrom forage min forage rate share min share rate mating treshold print chrom 我该如何处理 我真的不明白 Netlogo 中的数组
  • DDD 和聚合事务边界

    假设我有一个名为文档的对象 它有一堆图像 音频 视频等形式的子对象 因此 我的应用程序的用户可以通过键入一些文本 添加图像 视频等来创建文档 据我了解在DDD中 文档是一个聚合体 而图像 视频总是与作为根的文档相关联 基于这种理解 我将如何
  • 处理 html 表单提交中的 UTF 字符

    我的 html 表单有一些输入文本字段 这些字段可能会获取中文 日文 欧洲字符 特殊字符 例如 等 简而言之 就是 unicode 字符 为了在服务器端 使用 php 处理这些值 我可以假设所有浏览器在提交表单时默认都以 UTF 8 格式对
  • 使用 Perl 正则表达式确定 URI 是否有效

    对于我正在开发的应用程序 我需要一个 Perl 脚本 它循环遍历大量 CSV 文件并确保每一行都包含有效的 URI 我之前已经问过一个关于解析 CSV 文件的问题 并且我已经开始使用Text CSV让我的生活变得更轻松 现在我面临确保 UR
  • 如何将 jQuery 验证与“chosen”插件一起使用?

    我有一些
  • C#:在 RichTextBox 中粘贴 RTF,但保留颜色和格式(即:粗体、下划线等)

    是否可以将文本粘贴到富文本框中 同时保留粘贴内容在富文本框中使用的字体 换句话说 我想从 Word 中复制一些已格式化的内容 即 使用字体 X 并带有下划线和蓝色的文本 然后将其粘贴到我的 RichTextBox 中 我希望粘贴的内容具有与
  • 使用多个参数调用 shell 命令

    我正在尝试通过 Perl 脚本自动创建证书 我要运行的命令是 easyrsa build client full clientname nopass 我认为应该在 Perl 中完成的方式是 my arguments build client
  • UITextField 仅允许使用字母数字字符

    我该如何在 iOS 中只允许输入字母数字字符UITextField 使用 UITextFieldDelegate 方法 textField shouldChangeCharactersInRange replacementString 使用
  • SimpleTestCursor robolectric 3.0--编译问题

    我正在尝试在我的应用程序中测试光标 但对于以下导入 我收到错误消息 无法解析符号 测试员 我正在使用 Robolectric 3 0 为什么导入无法解析 我是否缺少一些依赖项 我看过互联网但没有支持 请帮忙 我正在尝试使用 this API
  • 如何将张量板与 tf.layers 一起使用?

    由于权重没有明确定义 我如何将它们传递给摘要编写者 例如 conv1 tf layers conv2d tf reshape X FLAGS batch 3 160 320 filters 16 kernel size 8 8 stride
  • Eclipse PyDev 抛出虚假错误

    我昨天更新了 PyDev Eclipse 现在它告诉我没有 name其他保留字 内置函数无效 但脚本运行良好 我在这个论坛上读到 问题涉及错误导入内置程序 我尝试过更改解释器并重新添加它 但没有成功 有人可以帮我吗 错误 未定义的变量mai
  • glut - 按住某个键

    我有一些基本代码来使用 glut 收集按键向上和按键按下事件 如果我按住一个键 我会连续触发事件 下 上 下 上 下 上 而不是预期的向下 开始时一次 和向上 一次 最后 include
  • 使用 HTML 按钮调用 JavaScript 函数

    我正在尝试使用 HTML 按钮来调用 JavaScript 函数 这是代码
  • Rails 3.1:引擎与可安装应用程序

    有人可以帮助我理解 Rails 引擎和可安装应用程序之间的区别吗 在 Rails 3 1 中 您可以使用 rails new 插件 创建任一插件 命令 rails plugin new forum full Engine rails plu
  • 非常基础的 PHP 和 Mysql

    背景 我更像是一名设计师而不是程序员 但我已经破解了许多开源 CMS Drupal Joomla Wordpress 的模板 我想从头开始了解php和mysql数据库的关系 假设我本地有一个工作数据库和 php 引擎 连接到数据库并创建表的
  • 为什么 Magento 这么慢? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Magento 通常都这么
  • cURL 在 PHP 7 上非常慢,但在 PHP 5 上则不然

    对于我来说 使用 PHP7 0 11 时 cURL 似乎比仅从命令行运行请求或在 PHP5 6 24 中运行时慢得多 我正在使用以下代码对其进行测试 curl curl init curl setopt curl CURLOPT URL h