このトピックでは、Alibaba Cloud SDK for PHP の統合と使用に関するよくある質問への回答を提供し、開発効率の向上に役立てます。
環境チェック
PHP 5.6 以後がインストールされている。
Composer がグローバルにインストールされている。 詳細については、Getting Started トピックの「Globally」セクションをご参照ください。
Composer を使用して Alibaba Cloud SDK をインストールするために使用される PHP のバージョンは、Alibaba Cloud SDK を実行するために使用される PHP のバージョン以前である必要があります。たとえば、PHP 7.2 で Alibaba Cloud SDK をインストールした後に生成される vendor フォルダは、PHP 7.2 以降でのみ使用できます。vendor フォルダを PHP 5.6 にコピーすると、依存関係は PHP 5.6 と互換性がなくなります。
問題のリスト
質問 1:AccessKey エラーをどのように処理すればよいですか?
問題:コードを実行した後に、次のエラーメッセージが返されます。 エラーメッセージは、AccessKey ペアが正しく構成されていないことを示しています。
Alibaba Cloud SDK V2.0: AlibabaCloud\Tea\Exception\TeaUnableRetryError: code: 400, AccessKeyId is mandatory for this action.
Alibaba Cloud SDK V1.0: Fatal error: Uncaught AlibabaCloud\Client\Exception\ClientException: AccessKey ID cannot be empty in XXX.
解決策:
次のコマンドを実行して、ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されているかどうかを確認します。
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%有効な AccessKey ペアが返された場合、環境変数は正しく構成されています。 AccessKey ペアが返されない場合、または無効な AccessKey ペアが返された場合は、必要に応じて環境変数を構成します。 詳細については、「Linux、macOS、および Windows で環境変数を構成する」をご参照ください。
コード内で AccessKey ペアに関連するエラーを確認します。
エラーリクエストの例:
$config = new Config([ "accessKeyId" => getenv("yourAccessKeyID"), "accessKeySecret" => getenv("yourAccessKeySecret") ]);成功リクエストの例:
$config = new Config([ "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") ]);説明getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
および getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") は、AccessKey ID と AccessKey シークレットが ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数から取得されることを指定します。
重要セキュリティリスクを防ぐため、オンラインコードに AccessKey ペアを書き込まないでください。
質問 2:API 操作を呼び出したときに「cURL error 60: SSL certificate problem: unable to get local issuer certificate」または「curl error 28 while downloading https://repo.packagist.org/packages.json: SSL connection timeout」というエラーメッセージが返された場合はどうすればよいですか?
考えられる原因:
ネットワークの問題:オンプレミスネットワークが不安定であるか、SSL 接続がファイアウォールによってブロックされています。
プロキシの問題:プロキシ構成が正しくないため、外部リソースへのアクセスに失敗します。
SSL 証明書の問題:一部の SSL 証明書がオンプレミスマシンのオペレーティングシステムによって信頼されていないため、接続がタイムアウトになります。
解決策:
安定した接続でインターネットにアクセスできることを確認します。
プロキシを使用するように PHP Composer を構成します。
composer config -g -- unset http-proxy composer config -g -- unset https-proxy composer config -g http-proxy http://your-proxy:port composer config -g https-proxy https://your-proxy:port信頼できる認証局(CA)が発行した SSL 証明書をダウンロードします。
信頼できる CA から SSL 証明書をダウンロードします。 たとえば、Mozilla から SSL 証明書をダウンロードできます。 詳細については、「Mozilla から抽出された CA 証明書」をご参照ください。
PHP の SSL 証明書のパスを構成します。 php.ini ファイルで curl.cainfo パラメーターを検索し、このパラメーターの値を CA 証明書の絶対パスに設定してから、パラメーターの前にあるセミコロン(;)を削除します。
PHP サービスを再起動します。
オプション。 自己署名証明書を信頼するようにオペレーティングシステムを構成します。 接続の問題が自己署名証明書によって引き起こされている場合は、PHP Composer が SSL 認証を無視するようにします。 ただし、本番環境ではこの方法を使用しないことをお勧めします。
composer config --global -- disable-ssl重要このコマンドは、SSL 認証を一時的に無効にします。 システムのセキュリティを確保するために、後続の操作で
composer config --global -- enable-sslコマンドを実行して、SSL 認証を再度有効にする必要があります。
質問 3:「PHP Fatal error: Class 'Darabonba\OpenApi\Models\Config' not found」というエラーメッセージが返された場合はどうすればよいですか?
Composer の自動ロード機能が有効になっていません。 解決策:
Composer が依存関係をダウンロードすると、autoload.php ファイルを含む vendor フォルダが生成されます。 require_once ステートメントをコードに追加します。
require_once(<vendor フォルダ内の autoload.php ファイル>)質問 4:「PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException' with message 'cURL error 3」というエラーメッセージが返された場合はどうすればよいですか?
リージョン ID またはエンドポイントが正しく構成されていません。 解決策:
アクセスするサービスが選択したリージョンで使用可能であることを確認します。 この例では、ショートメッセージサービス(SMS)が使用されています。 OpenAPI Explorer の SMS のホームページにアクセスして、さまざまなリージョンの SMS のエンドポイントを表示できます。
質問 5:「Could not fetch [repository], please review your configured GitHub OAuth token」というエラーメッセージが返された場合はどうすればよいですか?
Composer に提供された GitHub OAuth トークンが正しくないか、期限切れです。 解決策:
Alibaba Cloud SDK パッケージの GitHub OAuth トークンを構成する必要はありません。
Composer が公式サイトからインストールされておらず、プライベートリポジトリにアクセスするために GitHub OAuth トークンが不要な場合は、Composer ディレクトリから auth.json ファイルを削除します。
プライベートリポジトリにアクセスするために GitHub OAuth トークンが必要な場合は、Composer の手順に従ってトークンを更新します。
質問 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」というエラーメッセージが返された場合はどうすればよいですか?
API 呼び出しのタイムアウトは、複数の要因によって発生する可能性があります。 以下のセクションでは、一般的な原因と対応する解決策について説明します。
ネットワーク接続の問題
原因:クライアントとサーバー間のネットワーク接続に失敗したか、ネットワークが不安定なため、リクエストがサーバーに到達できません。
解決策:
ping コマンドまたは curl コマンドを実行して、オンプレミスホストとクラウドサービスのエンドポイント間の接続をテストします。 たとえば、ping dysmsapi.aliyuncs.com コマンドまたは curl -v https://dysmsapi.aliyuncs.com コマンドを実行して、オンプレミスホストと SMS API のエンドポイント間の接続をテストします。
コマンドがタイムアウトになった場合、または応答を受信しなかった場合は、オンプレミスのファイアウォールまたはルーターのブロッキングポリシーを確認します。
応答が返された場合は、適切なタイムアウト期間を指定して、不適切なタイムアウト構成によるリクエストの失敗を防ぐことをお勧めします。 詳細については、「タイムアウト期間を構成する」をご参照ください。 サンプルコード:
// 実行時パラメーターを使用してタイムアウト期間を指定します。タイムアウト期間は、RuntimeOptions インスタンスを使用するリクエストにのみ有効です。
$runtimeOptions = new RuntimeOptions();
$runtimeOptions->connectTimeout = $connectionTimeoutMillis;API リクエストの処理時間の長さ
原因:API リクエストの処理時間が、指定された読み取りタイムアウト期間を超えています。
解決策:API 応答の読み取りタイムアウト期間を長く指定します。 詳細については、「タイムアウト期間を構成する」をご参照ください。 たとえば、読み取りタイムアウトパラメーターを構成して、読み取りタイムアウト期間を延長できます。 サンプルコード:
// 実行時パラメーターを使用して読み取りリクエストのタイムアウト期間を構成します。タイムアウト期間は、RuntimeOptions を使用するリクエストにのみ有効です。
$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-curlCentOS、Fedora、および RHEL システムの場合:
sudo yum install php-curl質問 9:composer require コマンドによって「[Composer\Downloader\TransportException], failed to download the file due to HTTP/1.1 404 Not Found」または「your requirements could not be resolved to an installable set of packages」エラーがスローされた場合はどうすればよいですか?

考えられる原因:
Alibaba Cloud イメージなどのイメージソースが最新のパッケージと同期されていません。 その結果、必要なファイルがいくつかありません。
イメージソースの URL が変更されたか、パスが正しくありません。
解決策:
イメージソースが正しいことを確認します。
次のコマンドを実行して、PHP Composer に構成されているイメージソースを確認します。
composer config -g --listComposerの Alibaba Cloud イメージ:https://mirrors.aliyun.com/composer/composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/Composerの清華大学 TUNA 協会イメージ:https://mirrors.tuna.tsinghua.edu.cn/composer/composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/
イメージソースを一時的に無効にし、Composer イメージリポジトリを使用します。
composer.jsonファイルのrepositories構成を変更または削除するか、composer config --unset repos.urlコマンドを実行します。# Composer イメージリポジトリを使用します。 composer config -g repo.packagist composer https://packagist.orgネットワーク接続を確認します。 ネットワーク接続が不安定な場合、ファイルのダウンロードエラーが発生する可能性があります。 別のネットワーク環境に切り替えるか、VPN を使用します。
オプション。 コマンドを実行したときに、
Warning: This development build of composer is over 60 days old. It is recommended to update it by running "/usr/bin/composer self-update" to get the latest versionというエラーメッセージが返された場合、PHP Composer は古くなっています。 Composer を最新バージョンに更新し、Composer を再度実行することをお勧めします。# Composer を最新バージョンに更新します。 composer self-update # composer.phar ファイルを使用して最新バージョンを実行します。 composer self-update --1コマンドを実行したときに
Composerの警告が出力された場合、Composer 1のサポートは無効になります。 オプション。 互換性とセキュリティを確保するために、Composer をバージョン 2.X に更新することをお勧めします。composer self-update --2重要プロジェクトの依存関係パッケージが Composer 2.x をサポートしているかどうかを確認します。 必要に応じて、プロジェクトのコードと構成を更新します。
ダウンロードプロセス中に
Content-Lengthエラーがスローされた場合、データのダウンロードが中断される可能性があります。 受信したデータは、予期されたデータと異なります。Composer キャッシュをクリアし、コマンドを再度実行して Composer をインストールします。
# .composer ディレクトリを削除します。 Remove-Item -Recurse -Force $HOME\.composer # /tmp ディレクトリのすべてのコンテンツを削除します。 Remove-Item -Recurse -Force C:\tmp\*rm -rf ~/.composer/ && rm -rf /tmp/*ネットワーク接続が不安定な場合、データのダウンロードが中断される可能性があります。 コマンドを複数回実行して、Composer がインストールされていることを確認できます。
ネットワーク接続が安定していることを確認し、オフピーク時にファイルをダウンロードします。
質問 10:PHP Composer によって「Could not delete D:\www\touming_keyword_api\vendor\composer\tmp-7fd77eb46d69640d6040743642007957:This can be due to an antivirus or the Windows Search Indexer locking the file while they are analyzed.」エラーがスローされた場合はどうすればよいですか?

考えられる原因:
Composer が依存関係をインストールしようとすると、一時ファイルが一部のアンチウイルスソフトウェアまたは Windows Search Indexer によってロックされているため、削除できません。
解決策:
Windows オペレーティングシステムで十分な権限を持っているかどうかを確認します。 そうでない場合、Composer は必要なファイルの作成または変更に失敗する可能性があります。
すべての Composer コマンドを管理者として実行して、権限の問題を防ぎます。
Composer に必要なファイルとディレクトリに対する読み取りおよび書き込み権限があることを確認します。
パッケージバージョンが使用可能であることを確認し、キャッシュをクリアして、依存関係を再インストールします。
使用可能なパッケージバージョンをクエリします。 サンプルコマンド:
composer show alibabacloud/ecs-20140526 --allComposer キャッシュをクリアして、依存関係を再インストールします。
composer clear-cache
Windows Search Indexer が想定どおりに実行されているかどうかを確認します。 このサービスはファイルをインデックス化するため、ファイルがロックされる可能性があります。 このサービスを停止するには、次の手順を実行します。
Win キーと R キーを押して、「ファイル名を指定して実行」プログラムを開きます。services.mscと入力し、Enter キーを押します。Windows Search サービスを見つけ、サービスを右クリックして、「停止」を選択します。
Windows Search を停止した後、Composer 依存関係を再度インストールします。
ファイルをロック解除するか、依存関係をインストールするためのディレクトリを作成します。
ファイルをロック解除するには、次のコマンドを管理者として実行します。
コマンドプロンプトまたは PowerShell を右クリックし、「管理者として実行」を選択します。
次のコマンドを実行して、ロックされたディレクトリを削除します。
rmdir /S /Q "D:\www\touming_keyword_api\vendor\composer\tmp-7fd77eb46d69640d6040743642007957"ファイルがアンチウイルスソフトウェアや Windows Search Indexer などのプログラムによってロックされていないことを確認します。 アンチウイルスソフトウェアを一時的に無効にして、Composer コマンドを実行できます。
依存関係をインストールするためのディレクトリを作成します。 ディレクトリで、次の Composer 操作を実行します。
mkdir D:\new_directory cd D:\new_directory composer require alibabacloud/ecs-20140526 6.0.1
インストールプロセス中に 404 エラーがスローされた場合は、別のイメージソースに切り替えて、インストールを再実行します。
composer config -g repo.packagist composer https://packagist.org
質問 11:composer require alibabacloud/dysmsapi-20170525 コマンドによって「cURL error 61」エラーがスローされた場合はどうすればよいですか?
考えられる原因:
Composer キャッシュの問題:ローカルキャッシュが破損しているか、不完全です。
イメージソースの問題:イメージソースが不安定であるか、使用できません。
ネットワークの問題:ネットワーク接続が不安定であるか、ファイアウォールによってブロックされています。
Composer バージョンの問題:Composer が古くなっています。
環境構成の問題:環境変数または Composer 構成ファイルにエラーが含まれています。
解決策:
ネットワーク接続を確認します。
次のコマンドを実行して、ネットワーク接続をテストします。
curl -I https://mirrors.aliyun.com/composer/p2/alibabacloud/dysmsapi-20170525.jsonファイアウォールの設定を確認して、ファイアウォールが
curlによる外部リソースへのアクセスをブロックしていないことを確認できます。別のネットワークまたはネットワーク環境に切り替えます(たとえば、オフィスネットワークから個人ネットワークに切り替えます)。
Composer イメージリポジトリを使用するように Composer を構成します。
composer config -g --list composer config -g repo.packagist composer https://packagist.orgComposer パッケージを削除し、Composer を再インストールして、Composer キャッシュをクリアします。
オンプレミスのキャッシュディレクトリを削除します。
rm -rf ~/.composerComposer キャッシュをクリアします。
composer clear-cache
問題が解決しない場合は、詳細な Composer ログを確認します。
composer install --verbose
質問 12: composer を使用して Alibaba Cloud SDK パッケージをインストールすると、「Your requirements could not be resolved to an installable set of packages.」エラーが発生します。
このエラーはさまざまな理由で発生する可能性があります。次の例は、このエラーを解決するのに役立ちます。
例 1
エラーメッセージ:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires alibabacloud/cloudauth-20190307 3.4.1, found alibabacloud/cloudauth-20190307[dev-master, 1.0.0, ..., 1.0.7, 2.0.0, ..., 2.9.1, 3.0.0, ..., 3.3.0] but it does not match the constraint.
Installation failed, reverting ./composer.json and ./composer.lock to their original content.考えられる原因:
指定されたバージョン番号 (
3.4.1など) が存在しないか、リリースされていない可能性があります。使用している Composer ミラーソースが、パッケージの最新バージョンと同期されていません。
ネットワークの問題により、パッケージが正しくプルできません。
解決策:
次のコマンドを実行して、使用可能なすべてのパッケージバージョンをクエリします。
composer show alibabacloud/XXXXXX --allcomposer.jsonファイルで使用可能なバージョンを指定し、composer updateコマンドを実行して最新バージョンに更新します。別の
Composerイメージソースに切り替えます。次のコマンドを実行して、Packagist イメージソースに切り替えます。
composer config -g repo.packagist composer https://repo.packagist.org中国本土の Alibaba Cloud アクセラレーションイメージソースに切り替えます。
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
切り替え後、キャッシュをクリアしてパッケージを再インストールします。
composer clear-cache composer installネットワーク接続を確認し、安定した環境に切り替えます。 エラーが解決しない場合は、
.zipパッケージファイルまたは.tar.gzパッケージファイルを手動でダウンロードし、ローカルディレクトリにインストールします。composer require alibabacloud/XXXXXX@dev --prefer-source
例 2
エラーメッセージ:

原因:
alibabacloud/cloudauth-20190307:3.9.2 をインストールすると、その依存関係 alibabacloud/tea-oss-utils:0.3.1 は guzzlehttp/psr7 バージョン [1.0.0,...,2.0.0) を必要とします。ただし、現在インストールされている guzzlehttp/psr7 のバージョンは [1.0.0,..,1.9.1] に固定されています。これにより、依存関係の競合が発生します。
解決策:
依存関係のバージョンを強制的に更新します。
composer require alibabacloud/cloudauth-20190307 3.9.2 -Wcomposer.jsonファイルの require セクションに guzzlehttp/psr7 のバージョン制約 (例: "guzzlehttp/psr7": "^1.0") を追加します。次に、次のコマンドを実行して依存関係を更新します。composer updatecomposer.lockを削除し、次のコマンドを実行して依存関係を再インストールします。composer install --prefer-source
質問 12:API 操作を呼び出したときに「cURL error 60: SSL certificate problem: unable to get local issuer certificate」というエラーメッセージが返された場合はどうすればよいですか?
原因:
CA 証明書パッケージがダウンロードされていません。 システムに信頼できる CA 証明書ファイルがありません。 その結果、cURL は SSL 証明書を検証できません。
PHP cURL 構成で CA 証明書のパスが指定されていません。
php.iniファイルでcurl.cainfoパラメーターまたはopenssl.cafileパラメーターが正しく構成されていません。PHP サービスが無効になっています。
php.iniファイルの変更後、PHP サービスが有効になっていません。 この場合、構成は有効になりません。
解決策:
信頼できる CA から SSL 証明書をダウンロードします。 たとえば、Mozilla から SSL 証明書をダウンロードできます。 詳細については、「Mozilla から抽出された CA 証明書」をご参照ください。
cacert.pemファイルを固定ディレクトリに保存します。重要ファイルパスに中国語の文字や特殊文字が含まれていないことを確認してください。そうしないと、問題が発生する可能性があります。
PHP の SSL 証明書のパスを構成します。
PHP 構成ファイル
php.iniを開きます。php --iniコマンドを実行して、ファイルの場所をクエリできます。php.iniファイルでcurl.cainfoを見つけ、その値を CA 証明書の絶対パスに設定し、構成項目の先頭の ; を削除します。# 例 curl.cainfo = "D:\path\to\cacert.pem" openssl.cafile = "D:\path\to\cacert.pem"変更を加えた後、ファイルを保存します。
説明例の
D:\path\to\cacert.pemパスを、CA 証明書の絶対パスに置き換えます。
PHP サービスを再起動します。
質問 13:Composer のインストールに失敗したときに「the package is fixed to version 1.0.3 (lock file version)」または「ralouphie/mimey 2.1.0 requires php ^5.4|^7.0 your php version (8.2.27) does not satisfy that requirement」というエラーメッセージが返された場合はどうすればよいですか?
原因:
バージョンの競合:
一部の依存関係は、
composer.lockファイルによって特定のバージョンにロックされています。デフォルトでは、Composer は特定のバージョンにロックされている依存関係パッケージを自動的に更新しません。
たとえば、
alibabacloud/cloudauth-20190307には2.0.1バージョンのalibabacloud/openplatform-20191219が必要ですが、これは1.0.3バージョンにロックされています。
PHP バージョンとの非互換性:
PHP 8.2 が使用されていますが、一部の依存関係パッケージは PHP 5.4 から PHP 7.X のみをサポートしています。
たとえば、
ralouphie/mimey 2.1.0は PHP^5.4|^7.0のみをサポートしていますが、お使いの環境では PHP8.2.27を使用しています。
解決策:
すべての依存関係パッケージのバージョンを強制的にアップグレードします。
composer update --with-all-dependencies # 簡略化されたコマンド: composer update -W説明このコマンドは、composer.lock ファイルによって特定のバージョンにロックされている依存関係パッケージを含め、すべての依存関係パッケージをアップグレードします。 これにより、バージョンの競合が解決されます。
composer.lockファイルとvendor/ファイルをクリアし、パッケージを再インストールします。 この方法は、深刻な依存関係の混乱が含まれるシナリオに適用できます。rm composer.lock vendor/ composer clear-cache composer install重要この操作により、インストールされているすべての依存関係が削除されます。
依存関係パッケージが PHP 8 をサポートしていない場合は、互換性を維持するために一時的に以前の PHP バージョンにダウングレードします。
質問 14:「Script @php think service:discover handling the post-autoload-dump event returned with error code 255」というエラーメッセージが返された場合はどうすればよいですか?
原因:
composer install コマンドまたは update コマンドを実行した後、Composer は ThinkPHP の
php think service:discoverコマンドを実行してサービスを自動的に検出しようとしますが、失敗します。 その結果、インストールプロセス全体が中断されます。メモリ不足(OOM)またはその他の問題。
解決策:
サービス検出スクリプトを一時的に無効にし、ルートディレクトリの
composer.jsonファイルを変更します。{ "scripts": { "post-autoload-dump": "@php think service:discover" } }変更後:
{ "scripts": { "post-autoload-dump": "@echo Skipping 'php think service:discover'" } }composer dump-autoloadコマンドを再度実行します。php.iniファイルに次の構成を追加して、PHP メモリ制限を追加します。memory_limit = 512M
質問 15: 「Undefined property: Darabonba\OpenApi\Models\Config::$tlsMinVersion」エラーが発生する
原因: alibabacloud/darabonba-openapi のバージョンが 0.2.14 より前です。
解決策: 次のコマンドを実行して、alibabacloud/darabonba-openapi のバージョンを 0.2.14 以降に更新します。
composer require alibabacloud/darabonba-openapi >=0.2.14 テクニカルサポート
上記の課題に対する解決策は、Alibaba Cloud SDK をより適切に使用するために役立ちます。 Alibaba Cloud SDK の使用中にその他の問題が発生した場合は、次の方法でお問い合わせください。
質問やフィードバックがある場合は、テクニカルサポートのために DingTalk グループ(ID:60965016010)にご参加ください。