PHPStudy环境中怎么测试异步CURL请求

夜静姑娘_3483

夜静姑娘_3483

2026-09-21

952人浏览

原创

phpstudy 中“异步 curl”实为并发请求,需验证 curl_multi_init 等函数可用,并通过设置 curlopt_ssl_verifypeer=false 等规避 windows 下 ssl 和 select() 问题,多句柄请求耗时约1秒,显著快于串行的2秒。

phpstudy环境中怎么测试异步curl请求

PHPStudy 是 Windows 下常用的集成环境,自带 Apache + PHP + MySQL,但默认不开启多线程或协程支持。它本身不改变 PHP 的同步本质,所以“异步 CURL”在 PHPStudy 中实际指并发请求(并行发起、统一等待),而非 JavaScript 那种真正的非阻塞异步。测试重点是验证 curl_multi_init 能否正常工作,以及是否因配置问题导致失败。

确认 PHP 环境支持 cURL 多句柄

PHPStudy 默认已启用 cURL 扩展,但需确认 curl_multi 相关函数可用:

  • 新建 phpinfo.php,写入 <?php phpinfo(); ?>,浏览器访问,搜索 curl,看是否显示 curl support => enabled 且有 multi 相关函数列表
  • 终端执行 php -m | findstr curl,应输出 curl
  • 运行以下代码验证函数是否存在:
php
var_dump(function_exists('curl_multi_init')); // 应返回 true
var_dump(function_exists('curl_multi_exec'));
?>

用 curl_multi 写一个最小可测脚本

避免复杂逻辑,先测通路。以下脚本同时请求两个公开测试地址(响应快、无认证):

$urls = [
  'https://httpbin.org/delay/1',
  'https://httpbin.org/delay/1'
];

$mh = curl_multi_init();
$chs = [];

foreach ($urls as $i => $url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 5);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // PHPStudy 常用自签名证书,临时关闭校验
  curl_multi_add_handle($mh, $ch);
  $chs[$i] = $ch;
}

$active = null;
do {
  $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM || $active);

echo "全部请求完成,共 {$active} 个活跃连接\n";

while ($info = curl_multi_info_read($mh)) {
  $index = array_search($info['handle'], $chs);
  $content = curl_multi_getcontent($info['handle']);
  echo "请求 {$index}:".strlen($content)." 字节,HTTP 状态 ". $info['result'] ."\n";
  curl_multi_remove_handle($mh, $info['handle']);
  curl_close($info['handle']);
}

curl_multi_close($mh);
?>

将该脚本保存为 test_curl_multi.php,通过 PHPStudy 的 Apache 访问,或命令行运行 php test_curl_multi.php。若输出两行字节数和状态码(如 200),说明并发请求成功。

Test Curl 2
Test Curl 2

父母的功课——育儿心理学对话支持技能(心虫增强版)。提供结构化对话、情绪识别、场景匹配与安全检测;可选Python脚本(scripts/)在SKILL_DIR/data/本地存储评估历史、洞察与会话状态,不对外传输。核心路径:觉察(看见防御)→接纳(慈悲是……

下载

常见失败点与 PHPStudy 特定处理

在 PHPStudy 环境中,以下问题较典型:

  • SSL 证书错误:PHPStudy 自带的 OpenSSL 可能无法验证公共 HTTPS 站点证书。务必加 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)CURLOPT_SSL_VERIFYHOST, false,否则请求直接失败
  • 超时设置过短:本地网络或代理不稳定时,单个请求可能卡住。建议 CURLOPT_TIMEOUT 设为 5–10 秒,避免整个 multi 批次被拖慢
  • Apache 模式下输出被缓冲:浏览器访问时,若页面空白或只显示部分结果,尝试在脚本开头加 ob_end_flush(); 或改用 CLI 方式运行(更可靠)
  • Windows 下 select() 行为差异:PHPStudy 运行在 Windows,curl_multi_select() 可能返回 -1。可省略该调用,改用 usleep(10000) 防空转,或直接依赖 curl_multi_exec 的轮询机制

对比串行请求,验证并发效果

写一个等效的串行版本做耗时对比:

$urls = ['https://httpbin.org/delay/1', 'https://httpbin.org/delay/1'];
$start = microtime(true);
foreach ($urls as $url) {
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_TIMEOUT, 5);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  $res = curl_exec($ch);
  curl_close($ch);
}
$end = microtime(true);
echo "串行总耗时:" . round($end - $start, 2) . " 秒\n";
?>

串行通常耗时约 2 秒,而 curl_multi 版本应接近 1 秒——这说明并发生效。PHPStudy 环境下只要 cURL 多句柄可用,就能体现这一提升。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php phpstudy curl

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

8984

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5461

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

1995

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3388

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4054

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3171

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

4497

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3502

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11562

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP千万级秒杀项目实战课程
PHP千万级秒杀项目实战课程

共7课时 | 1.2万人学习

墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习