Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud SDK:Handle an exception

Son Güncelleme:Oct 07, 2026

PHP için Alibaba Cloud SDK V2.0 tarafından tetiklenen istisna türlerini ve her birini nasıl yakalayıp işleyeceğinizi öğrenin.

PHP için SDK V2.0, nedenleri ve yanıt stratejileri farklı olan üç istisna türü tetikler:

  1. InvalidArgumentException: SDK istemcisini başlatırken gerekli bir parametre eksikse veya geçersiz bir değere sahipse oluşur. Dönen hata mesajındaki istisna ayrıntılarını görüntüleyin.

  2. TeaUnretryableException: Tüm yeniden deneme girişimleri tükendikten sonra ağ hatası devam ediyorsa oluşur. Son yeniden deneme girişimindeki talep bilgilerini almak için getLastException yöntemini çağırın.

  3. TeaError: API bir iş mantığı hatası döndürdüğünde oluşur. Hatanın teşhis edilmesine yardımcı olan özellikler şunlardır:

    1. code: API tarafından döndürülen hata kodu.

    2. message: Başarısız API çağrısının talep kimliğini içeren hata mesajı.

    3. data: Sunucu tarafından döndürülen ham hata ayrıntıları.

Aşağıdaki örnek, temel \Exception sınıfını yakalar ve belirli istisna türünü tanımlamak için instanceof kontrolünü kullanır. Her türü uygun yanıtla işlemek için genel yedekleme durumundan önce TeaError ve TeaUnableRetryError durumlarını kontrol edin.

Önemli

Örnek, yalnızca referans amaçlı olarak hata mesajlarını yazdırır. Üretim ortamında istisnaları sessizce yok saymayın. Bunları günlüğe kaydedin, daha üst bir katmana iletin veya her istisna türüne uygun olarak üstel geri çekilme (exponential backoff) ile yeniden deneyin.

<?php

require_once 'vendor/autoload.php';
use AlibabaCloud\SDK\Ecs\V20140526\Ecs;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Ecs\V20140526\Models\DescribeInstancesRequest;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Exception\TeaUnableRetryError;

class ProxyDemo
{

    public static function main()
    {
        try {
            $config = new Config([
                "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                "endpoint" => "ecs.cn-beijing.aliyuncs.com", // <endpoint>
            ]);
            $client = new Ecs($config);

            $runtime = new RuntimeOptions([]);
            $describeInstancesRequest = new DescribeInstancesRequest([
                "regionId" => "cn-beijing"
            ]);
            $resp = $client->describeInstancesWithOptions($describeInstancesRequest, $runtime);
            var_dump($resp);
        } catch (\Exception $error) {
            if ($error instanceof TeaError) {
                // Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only. 
                print_r("message:" . $error->getMessage() . "\n");
                print_r("code:" . $error->getCode() . "\n");
                print_r($error->data);
            } elseif ($error instanceof TeaUnableRetryError) {
                // Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only. 
                print_r($error->getLastException());
            } else {
                // Handle exceptions with caution in your actual business scenario and do not ignore exceptions in your project. In this example, error messages are printed for reference only. 
                print_r("message:" . $error->getMessage());
            }
        }
    }
}
ProxyDemo::main();

Yanıt rehberi

İstisna türüne göre uygun yanıtı seçin:

  • **InvalidArgumentException**: Yeniden denemeden önce parametre değerini düzeltin. Bu hata bir programlama hatasını gösterir; kod değişikliği yapmadan yeniden denemek başarılı olmaz.

  • **TeaUnableRetryError**: Bir gecikme sonrası yeniden deneyin. Sunucunun aşırı yüklenmesini önlemek için üstel geri çekilme kullanın. Yeniden denemeden önce kök nedeni günlüğe kaydetmek için getLastException() yöntemini çağırın.

  • **TeaError**: Nedeni belirlemek için code ve message değerlerini kontrol edin. Kimlik doğrulama hataları veya eksik kaynaklar gibi API hataları, yeniden denemeden önce düzeltici eylem gerektirir.