常见问题

更新时间:

本文档旨在帮助开发者快速接入和使用PHP SDK,重点解答使用过程中遇到的常见问题,确保开发者能够准确且高效地进行相关操作。

环境检查

重要

执行 composer 安装 SDK 的 PHP 版本要小于或等于实际运行时的 PHP 版本。 例如,在 PHP7.2 环境下安装 SDK 后生成 vendor 目录,只能在 PHP7.2 以上版本使用,如果拷贝到 PHP5.6 环境下使用,会出现依赖版本不兼容问题。

问题列表

问题1:运行时提示“PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function AlibabaCloud\Credentials\AccessKeyCredential::__construct(), 1 passed and exactly 2”

可能是因为您没有正确地设置阿里云的访问密钥(AccessKey)。

错误示例:

$config = new Config([
    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
    "accessKeyId" => getenv("LTAI5tA******"),
    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    "accessKeySecret" => getenv("0wpTxkN******")
]);

正确示例:

$config = new Config([
    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
    "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
    // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
]);

建议做法:

重要

切勿直接在代码中明文写入 AccessKey 的值。该写法存在安全隐患。

说明

getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")

和getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),表示是从环境变量中获取ALIBABA_CLOUD_ACCESS_KEY_ID及ALIBABA_CLOUD_ACCESS_KEY_SECRET的值。

  • 检查您的环境变量中是否配置有ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。

  • 在终端(Linux/macOS)或单击开始(或快捷键:Win+R)>运行(输入 cmd)>确定(或按 Enter 键),打开命令提示符(Windows),执行以下命令。若返回正确的AccessKey,则说明配置成功。如果返回为空或错误,请尝试重新设置,具体操作请参见设置访问凭据

Windows

echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

Linux/macOS

echo $ALIBABA_CLOUD_ACCESS_KEY_ID
echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

问题2:在调用OpenAPI时提示“cURL error 60: SSL certificate problem: unable to get local issuer certificate”。

  • 您需要下载一个受信任的CA证书,例如Mozilla的CA证书库

  • 配置PHP的SSL证书路径。在php.ini文件中搜索curl.cainfo,将值设置为CA证书的绝对路径,然后去掉前面配置项前的;注释符。

  • 重启PHP服务。

问题3:运行时,提示“PHP Fatal error: Class 'Darabonba\OpenApi\Models\Config' not found”。

此问题的直接原因是未启用 Composer 自动加载功能。解决方案:

Composer在下载依赖时,会生成vendor目录,该目录下包含autoload.php文件。在应用代码上加入require_once语句。

require_once(<vendor目录下autoload.php文件>)

问题4:运行时,提示“PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException' with message 'cURL error 3”

此问题的直接原因是RegionId或Endpoint的填写不正确。解决方案:

确保您所选区域支持您正在调用的服务。产品的Endpoint可以通过OpenAPI 开发者门户的产品主页中进行查找,这里以短信服务为例。image

问题5:运行时,提示“Could not fetch [repository], please review your configured GitHub OAuth token”。

此问题的直接原因是提供给Composer的GitHub凭证存在错误或已过期。解决方案:

重要

阿里云SDK包是不需要配置GitHub凭证的。

  • 若通过非官方网站路径安装Composer,并且不需要GitHub凭证以访问私有库,则只需删除composer目录下的auth.json文件即可。

  • 若需通过GitHub凭证访问私有库,请按照Composer的提示进行Token刷新。

问题6:调用API超时,提示“cURL error 28: Resolving timed out after 5000 milliseconds (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://dysmsapi.aliyuncs.com”。

超时问题可能由多种因素引起,以下是一些常见的原因及相应的解决步骤:

网络连接问题

情况描述:客户端与服务器之间的网络不通或网络不稳定导致请求无法到达目标服务器。

解决方案:

  • 使用命令ping [www.example.com/192.168.x.x]curl -Is https://xxx.xxx.xx检查网络连通性。当遇到网络不通时,应在防火墙或路由器中检查是否有阻断策略;对于网络不稳定的情况,建议更换网络环境。

  • 通过配置延长超时时间, 具体操作请参见超时配置。例如通过配置连接超时参数来延长连接超时时间,示例代码如下:

// 运行时参数超时设置,仅对使用了该运行时参数实例的请求有效
$runtimeOptions = new RuntimeOptions();
$runtimeOptions->connectTimeout = $connectionTimeoutMillis;

API处理时间过长

情况描述:目标API处理请求的时间超过了设置的读超时时间。

解决方案:通过配置读超时时间来适应较长的API响应时间, 具体操作请参见超时配置。例如通过配置读超时时间参数来延长当前请求的读超时时间,示例代码如下:

// 运行时参数超时设置,仅对使用了该运行时参数实例的请求有效
$runtimeOptions = new RuntimeOptions();
$runtimeOptions->readTimeout = $readTimeoutMillis;

问题7:运行时,提示“alibabacloud/tea[3.0.0,3.2.01 require ext-curl*-> it is missing from your system. Install or enable PHP's curl extension,100e ...”错误

此问题的原因是未安装PHP的curl插件。解决方案:

Ubuntu/Debian系统:

sudo apt-get install php-curl

CentOS/Fedora/RHEL系统:

sudo yum install php-curl

问题8:安装PHP SDK时遇到网络异常问题。

配置Composer镜像源:在中国内地,由于网络问题,可能需要配置Composer使用中国内地镜像源以加快下载速度。可以通过修改Composer的全局配置实现:

  • 阿里云 Composer 全量镜像

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  • 清华Composer 全量镜像。

    composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/

技术支持

以上问题的解决方案旨在帮助您更友好地使用阿里云SDK。如果您在使用过程中遇到其他问题,请通过以下方式与我们联系:

  • 提交工单:阿里云提交工单页面

  • 如果您有相关需求或反馈,可以添加钉钉群联系阿里云技术支持人员,群号为60965016010。