You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复curl_exec()参数1应为资源却传入null的警告

解决 curl_exec() expects parameter 1 to be resource, null given 警告

这个警告的核心原因非常直接:你在调用curl_exec($ch)时,$ch变量并没有被初始化——它没有指向任何有效的curl资源句柄,所以是null。咱们一步步来修复这个问题,同时优化你的代码逻辑:

1. 先初始化curl资源句柄

在使用curl的任何函数之前,必须先用curl_init()创建一个curl资源。如果初始化失败,还可以做错误处理:

$ch = curl_init();
if (!$ch) {
    die('curl资源初始化失败,请检查服务器curl扩展是否启用');
}

2. 调整代码执行顺序

你的代码顺序存在逻辑问题:

  • ini_set('memory_limit', '2048M')放在curl_exec之后,对这次curl请求完全无效,应该放在代码最开头
  • 先调用curl_exec再引入文件,可能导致依赖的变量(比如$just_phone、$key)还未定义,先引入依赖文件再处理逻辑更合理

3. 配置curl请求的必要参数

既然你要向API提交表单数据,需要设置curl的URL、请求方法、POST数据、返回结果等选项,比如:

// 设置API地址
curl_setopt($ch, CURLOPT_URL, '你的API接口地址');
// 设置为POST请求
curl_setopt($ch, CURLOPT_POST, true);
// 设置POST的JSON数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $request_params);
// 设置请求头,告诉服务器提交的是JSON格式
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Content-Length: ' . strlen($request_params)
]);
// 让curl返回结果而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

4. 优化时间格式化逻辑

你重复计算了多次时间戳,建议先统一计算一次,避免冗余:

// 计算偏移后的时间戳(提前10800秒)
$offsetTimestamp = time() - 10800;
// 格式化日期部分
$datePart = date('Y-m-d', $offsetTimestamp);
// 格式化时间部分(保留你原来的时间偏移逻辑)
$timePart = date('H:i', time() - 10680);
// 组合成ISO格式时间
$isoTime = "{$datePart}T{$timePart}:00Z";

完整修正后的代码

<?php
// 先设置内存限制
ini_set('memory_limit', '2048M');

// 引入依赖文件
require('/home/users/m/xxx/domains/xxx.ru/a.php');
require('/home/users/m/xxx/domains/xxxy.ru/b.php');

// 初始化curl资源
$ch = curl_init();
if (!$ch) {
    die('curl初始化失败,请检查服务器curl扩展状态');
}

if ($just_phone && $key) {
    echo "yes";
    
    // 计算格式化后的时间
    $offsetTimestamp = time() - 10800;
    $datePart = date('Y-m-d', $offsetTimestamp);
    $timePart = date('H:i', time() - 10680);
    $isoTime = "{$datePart}T{$timePart}:00Z";
    
    // 用json_encode构造JSON参数,比手动拼接更安全
    $request_params = json_encode([
        'form_id' => 511175,
        'fields' => [
            ['id' => 4, 'value' => $just_phone],
            ['id' => 23, 'value' => $isoTime],
            ['id' => 6, 'value' => $isoTime]
        ]
    ]);
    
    // 配置curl选项
    curl_setopt($ch, CURLOPT_URL, '替换成你的API接口地址');
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request_params);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($request_params)
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // 执行请求并处理结果
    $response = curl_exec($ch);
    if ($response === false) {
        echo 'curl请求失败:' . curl_error($ch);
    } else {
        // 可以在这里处理API返回的结果
        echo '请求成功,返回结果:' . $response;
    }
}

// 关闭curl资源
curl_close($ch);
?>

额外注意点

  • 确保服务器已经启用了curl扩展,可以通过phpinfo()查看
  • 用json_encode()构造JSON参数比手动拼接更安全,避免出现语法错误
  • 记得替换代码中的你的API接口地址为实际的API URL

内容的提问来源于stack exchange,提问作者loki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 00:12:32