PHP中使用cURL创建HTTP请求时出现变量未定义等错误的解决方法
修复PHP cURL请求的错误问题
让我一步步帮你排查和修复这两个问题:
一、第二段代码的语法错误(Undefined variable: curl)
你第二段代码的末尾多了一个多余的},这个语法错误导致PHP无法正确解析前面的代码,变量$curl的初始化被跳过,从而出现未定义变量的警告。
修复后的代码:
<?php // 开启开发环境错误显示,方便排查问题 ini_set('display_errors', 1); error_reporting(E_ALL); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'http://exmaple.com:80/', // 补充HTTP协议头 CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, // 去掉无效的Basic认证头,若需要认证请补充base64编码的"用户名:密码" CURLOPT_HTTPHEADER => array('Content-Type:application/json'), CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_POST => 1, // 用json_encode生成规范JSON,避免手动写格式出错 CURLOPT_POSTFIELDS => json_encode(array("M" => "", "A" => "")), CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, )); $response = curl_exec($curl); // 添加错误处理,请求失败时输出错误信息 if(curl_errno($curl)){ echo 'cURL错误:' . curl_error($curl); } else { echo $response; } // 记得关闭curl资源 curl_close($curl); die(); ?>
二、第一段代码页面空白的问题
页面空白是因为cURL请求失败,但你没有添加错误处理逻辑,所以没有任何输出。主要有几个核心问题需要修复:
问题点说明:
- URL缺少协议头:
exmaple.com:80/必须补充http://或https://,否则curl无法识别合法的请求地址。 - 无效的Authorization头:
Authorization: Basic后面需要跟上base64编码的用户名:密码(比如Authorization: Basic ' . base64_encode("admin:123456")),如果不需要认证可以直接去掉这个头。 - POST请求参数冲突:同时设置
CURLOPT_POST => 1和CURLOPT_CUSTOMREQUEST => 'POST'会导致逻辑冲突,保留CURLOPT_POST即可。 - 缺少错误处理:请求失败时没有输出错误信息,导致页面空白。
- 手动编写JSON易出错:建议用
json_encode()生成标准JSON字符串,避免手动换行、引号带来的格式问题。
修复后的test方法代码:
public function test(){ // 开发环境开启错误显示 ini_set('display_errors', 1); error_reporting(E_ALL); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'http://exmaple.com:80/', // 补充协议头 CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, // 修复认证头:要么移除,要么补充正确的base64凭证 CURLOPT_HTTPHEADER => array('Content-Type:application/json'), CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_POST => 1, // 用json_encode生成规范的POST数据 CURLOPT_POSTFIELDS => json_encode(array( "M" => "", "A" => "" )), CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, // 移除冲突的CURLOPT_CUSTOMREQUEST配置 )); $response = curl_exec($curl); // 添加错误处理逻辑 if(curl_errno($curl)){ echo 'cURL请求失败:' . curl_error($curl); } else { echo $response; } // 关闭curl资源 curl_close($curl); die(); }
额外提示:
- 开发环境建议开启错误显示,能快速定位隐藏的代码问题。
- 确认目标地址
exmaple.com是否可以正常访问,或者替换为真实的测试接口地址。
内容的提问来源于stack exchange,提问作者Forten
相关产品推荐
相关产品推荐

