全部产品
Search
文档中心

Object Storage Service:Hapus objek (PHP SDK V1)

更新时间:Nov 30, 2025

Topik ini menjelaskan cara menghapus satu objek, beberapa objek tertentu, objek dengan awalan nama tertentu, atau direktori beserta seluruh objek di dalamnya.

Peringatan

Berhati-hatilah saat melakukan operasi penghapusan. Objek yang telah dihapus tidak dapat dipulihkan.

Catatan penggunaan

  • Pada topik ini digunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Buat OssClient.

  • Untuk menghapus objek, Anda harus memiliki izin oss:DeleteObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.

Hapus satu objek

Kode berikut menunjukkan cara menghapus objek exampleobject.txt dari bucket examplebucket.

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tetapkan endpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = "examplebucket";
// Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Path lengkap tidak boleh mengandung nama bucket.
$object = "exampledir/exampleobject.txt";

try{
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

    $ossClient->deleteObject($bucket, $object);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . "OK" . "\n");          

Hapus beberapa objek

Anda dapat menghapus hingga 1.000 objek sekaligus secara manual. Anda dapat menghapus beberapa objek tertentu, objek dengan awalan tertentu, atau direktori beserta seluruh objek di dalamnya.

OSS juga mendukung penghapusan objek otomatis dengan mengonfigurasi aturan siklus hidup. Untuk informasi selengkapnya, lihat Aturan siklus hidup berdasarkan waktu modifikasi terakhir.

Hapus beberapa objek dengan nama tertentu

Kode berikut menunjukkan cara menghapus beberapa objek dengan nama tertentu.

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// Tetapkan endpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = "examplebucket";

try {
   $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
   // Tentukan path lengkap objek yang ingin dihapus. Path lengkap tidak boleh mengandung nama bucket.
   $objects = array();
   $objects[] = "exampleobjecta.txt";
   $objects[] = "exampledir/sampleobject.txt";
   $result = $ossClient->deleteObjects($bucket, $objects);

   foreach ($result as $info){
      $obj = strval($info);
      printf("Delete ".$obj." : Success" . "\n");
   }
   printf("Delete Objects : OK" . "\n");
} catch (OssException $e) {
   printf("Delete Objects : Failed" . "\n");
   printf($e->getMessage() . "\n");
   return;
}            

Hapus beberapa objek dengan awalan tertentu atau dalam direktori

Kode berikut menunjukkan cara menghapus beberapa objek dengan awalan tertentu, atau direktori beserta seluruh objek di dalamnya.

Peringatan

Jika nilai OSS_PREFIX pada kode berikut adalah string kosong atau NULL, semua objek dalam bucket akan dihapus. Gunakan fitur ini dengan hati-hati.

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
   require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
   require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// Tetapkan endpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = "examplebucket";

try {
   $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
   $option = array(
      OssClient::OSS_MARKER => null,
      // Untuk menghapus semua objek yang namanya diawali dengan "src", tetapkan prefix ke "src". Operasi ini menghapus semua objek non-folder dengan awalan tersebut, folder "src", serta semua objek di dalam folder "src".
      OssClient::OSS_PREFIX => "src",
      // Untuk menghapus hanya folder "src" dan semua objek di dalamnya, tetapkan prefix ke "src/".
      // OssClient::OSS_PREFIX => "src/",
   );
   $bool = true;
   while ($bool){
      // Daftarkan dan hapus beberapa objek.
      $result = $ossClient->listObjects($bucket,$option);
      $objects = array();
      if(count($result->getObjectList()) > 0){
         foreach ($result->getObjectList() as $key => $info){
            printf("key name:".$info->getKey().PHP_EOL);
            $objects[] = $info->getKey();
         }
         $delObjects = $ossClient->deleteObjects($bucket, $objects);
         foreach ($delObjects as $info){
            $obj = strval($info);
            printf("Delete ".$obj." : Success" . PHP_EOL);
         }
      }

      if($result->getIsTruncated() === 'true'){
         $option[OssClient::OSS_MARKER] = $result->getNextMarker();
      }else{
         $bool = false;
      }
   }
   printf("Delete Objects : OK" . PHP_EOL);
} catch (OssException $e) {
   printf("Delete Objects : Failed" . PHP_EOL);
   printf($e->getMessage() . PHP_EOL);
   return;
}
Catatan

Jika terjadi pengecualian (exception) dan ditangkap dalam blok try{}catch{}, objek tidak dihapus. Dalam kasus ini, Anda dapat menggunakan $e->getMessage() untuk mendapatkan pesan error dan menganalisis penyebabnya.

Referensi

  • Untuk kode contoh lengkap mengenai penghapusan satu objek atau beberapa objek, lihat contoh di GitHub.

  • Untuk informasi selengkapnya mengenai operasi API untuk menghapus satu objek, lihat DeleteObject.

  • Untuk informasi selengkapnya mengenai operasi API untuk menghapus beberapa objek, lihat DeleteMultipleObjects.