常見問題
本文檔旨在幫助開發者快速接入和使用PHP SDK,重點解答使用過程中遇到的常見問題,確保開發者能夠準確且高效地進行相關操作。
環境檢查
確保PHP語言環境已經正確安裝,PHP版本 >= 5.6。
必須在系統上全局安裝 Composer。
執行 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 開發者門戶的產品主頁中進行查找,這里以短信服務為例。
問題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。