PHP Curl调用CallRail API返回T_CONSTANT_ENCAPSED_STRING错误求助
兄弟,你这问题一眼就能看出根源——你把终端里用的curl命令直接写到PHP代码块里了,PHP根本不认识这种shell语法,解析时会把那些换行、引号当成未正确闭合的字符串/常量,直接触发T_CONSTANT_ENCAPSED_STRING语法错误!
问题根源拆解
你现在写的<? curl -H ... ?>是给Linux/macOS终端用的shell命令,但PHP标签里只能写PHP代码,两种环境语法完全不兼容,这就是报错的核心原因。
正确的两种PHP实现方式
方式一:PHP原生CURL扩展(推荐,灵活可控)
这是PHP发起HTTP请求的标准方案,支持更多自定义配置,代码示例如下:
<?php // 先替换成你的真实凭证 $token = 'your-token-id'; $accountId = 'your-account-id'; $apiUrl = "https://api.callrail.com/v2/a/{$accountId}/calls.json"; // 初始化CURL会话 $curl = curl_init($apiUrl); // 设置请求头和其他选项 curl_setopt_array($curl, [ CURLOPT_HTTPHEADER => ["Authorization: Token token={$token}"], CURLOPT_RETURNTRANSFER => true, // 把响应返回给变量而不是直接输出 CURLOPT_SSL_VERIFYPEER => true, // 开启SSL验证,提升安全性 CURLOPT_FOLLOWLOCATION => true // 自动跟随重定向(如果API有重定向的话) ]); // 执行请求并获取响应 $response = curl_exec($curl); // 检查请求是否出错 if (curl_errno($curl)) { echo "请求出错:" . curl_error($curl); } else { // 解析JSON格式的响应 $callData = json_decode($response, true); // 可以根据需求处理数据,比如打印出来看结果 print_r($callData); } // 关闭CURL会话,释放资源 curl_close($curl); ?>
方式二:file_get_contents(简洁但灵活性弱)
如果你的PHP环境开启了allow_url_fopen配置,可以用这种更简单的写法:
<?php $token = 'your-token-id'; $accountId = 'your-account-id'; $apiUrl = "https://api.callrail.com/v2/a/{$accountId}/calls.json"; // 创建请求上下文,添加Authorization头 $requestContext = stream_context_create([ 'http' => [ 'header' => "Authorization: Token token={$token}" ] ]); // 发起请求并获取响应 $response = file_get_contents($apiUrl, false, $requestContext); if ($response === false) { echo "请求失败,请检查凭证或网络"; } else { $callData = json_decode($response, true); print_r($callData); } ?>
额外注意要点
- 务必替换代码里的
your-token-id和your-account-id为你真实的CallRail凭证 - 如果用CURL方式,要确保你的PHP环境已经开启CURL扩展(大部分主机默认开启,若未开可联系主机商或修改php.ini配置)
- 测试时可以在代码开头加上
error_reporting(E_ALL); ini_set('display_errors', 1);,方便排查其他潜在问题
内容的提问来源于stack exchange,提问作者Spencer Hill
相关产品推荐
相关产品推荐

