519 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			519 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | ||
| require_once __DIR__ . '/Common.php';
 | ||
| 
 | ||
| use OSS\OssClient;
 | ||
| use OSS\Core\OssException;
 | ||
| 
 | ||
| $bucket = Common::getBucketName();
 | ||
| $ossClient = Common::getOssClient();
 | ||
| if (is_null($ossClient)) exit(1);
 | ||
| //******************************* Simple usage ***************************************************************
 | ||
| 
 | ||
| // Upload the in-memory string (hi, oss) to an OSS file
 | ||
| $result = $ossClient->putObject($bucket, "b.file", "hi, oss");
 | ||
| Common::println("b.file is created");
 | ||
| Common::println($result['x-oss-request-id']);
 | ||
| Common::println($result['etag']);
 | ||
| Common::println($result['content-md5']);
 | ||
| Common::println($result['body']);
 | ||
| 
 | ||
| // Uploads a local file to an OSS file
 | ||
| $result = $ossClient->uploadFile($bucket, "c.file", __FILE__);
 | ||
| Common::println("c.file is created");
 | ||
| Common::println("b.file is created");
 | ||
| Common::println($result['x-oss-request-id']);
 | ||
| Common::println($result['etag']);
 | ||
| Common::println($result['content-md5']);
 | ||
| Common::println($result['body']);
 | ||
| 
 | ||
| // Download an oss object as an in-memory variable
 | ||
| $content = $ossClient->getObject($bucket, "b.file");
 | ||
| Common::println("b.file is fetched, the content is: " . $content);
 | ||
| 
 | ||
| // Add a symlink to an object
 | ||
| $content = $ossClient->putSymlink($bucket, "test-symlink", "b.file");
 | ||
| Common::println("test-symlink is created");
 | ||
| Common::println($result['x-oss-request-id']);
 | ||
| Common::println($result['etag']);
 | ||
| 
 | ||
| // Get a symlink
 | ||
| $content = $ossClient->getSymlink($bucket, "test-symlink");
 | ||
| Common::println("test-symlink refer to : " . $content[OssClient::OSS_SYMLINK_TARGET]);
 | ||
| 
 | ||
| // Download an object to a local file.
 | ||
| $options = array(
 | ||
|     OssClient::OSS_FILE_DOWNLOAD => "./c.file.localcopy",
 | ||
| );
 | ||
| $ossClient->getObject($bucket, "c.file", $options);
 | ||
| Common::println("b.file is fetched to the local file: c.file.localcopy");
 | ||
| Common::println("b.file is created");
 | ||
| 
 | ||
| // Copy an object
 | ||
| $result = $ossClient->copyObject($bucket, "c.file", $bucket, "c.file.copy");
 | ||
| Common::println("lastModifiedTime: " . $result[0]);
 | ||
| Common::println("ETag: " . $result[1]);
 | ||
| 
 | ||
| // Check whether an object exists
 | ||
| $doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
 | ||
| Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
 | ||
| 
 | ||
| // Delete an object
 | ||
| $result = $ossClient->deleteObject($bucket, "c.file.copy");
 | ||
| Common::println("c.file.copy is deleted");
 | ||
| Common::println("b.file is created");
 | ||
| Common::println($result['x-oss-request-id']);
 | ||
| 
 | ||
| // Check whether an object exists
 | ||
| $doesExist = $ossClient->doesObjectExist($bucket, "c.file.copy");
 | ||
| Common::println("file c.file.copy exist? " . ($doesExist ? "yes" : "no"));
 | ||
| 
 | ||
| // Delete multiple objects in batch
 | ||
| $result = $ossClient->deleteObjects($bucket, array("b.file", "c.file"));
 | ||
| foreach($result as $object)
 | ||
|     Common::println($object);
 | ||
| 
 | ||
| sleep(2);
 | ||
| unlink("c.file.localcopy");
 | ||
| 
 | ||
| //******************************* For complete usage, see the following functions ****************************************************
 | ||
| 
 | ||
| listObjects($ossClient, $bucket);
 | ||
| listAllObjects($ossClient, $bucket);
 | ||
| createObjectDir($ossClient, $bucket);
 | ||
| putObject($ossClient, $bucket);
 | ||
| uploadFile($ossClient, $bucket);
 | ||
| getObject($ossClient, $bucket);
 | ||
| getObjectToLocalFile($ossClient, $bucket);
 | ||
| copyObject($ossClient, $bucket);
 | ||
| modifyMetaForObject($ossClient, $bucket);
 | ||
| getObjectMeta($ossClient, $bucket);
 | ||
| deleteObject($ossClient, $bucket);
 | ||
| deleteObjects($ossClient, $bucket);
 | ||
| doesObjectExist($ossClient, $bucket);
 | ||
| getSymlink($ossClient, $bucket);
 | ||
| putSymlink($ossClient, $bucket);
 | ||
| /**
 | ||
|  * Create a 'virtual' folder
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function createObjectDir($ossClient, $bucket)
 | ||
| {
 | ||
|     try {
 | ||
|         $ossClient->createObjectDir($bucket, "dir");
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Upload in-memory data to oss
 | ||
|  *
 | ||
|  * Simple upload---upload specified in-memory data to an OSS object
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function putObject($ossClient, $bucket)
 | ||
| {
 | ||
|     $object = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     $content = file_get_contents(__FILE__);
 | ||
|     $options = array();
 | ||
|     try {
 | ||
|         $ossClient->putObject($bucket, $object, $content, $options);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Uploads a local file to OSS
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function uploadFile($ossClient, $bucket)
 | ||
| {
 | ||
|     $object = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     $filePath = __FILE__;
 | ||
|     $options = array();
 | ||
| 
 | ||
|     try {
 | ||
|         $ossClient->uploadFile($bucket, $object, $filePath, $options);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Lists all files and folders in the bucket. 
 | ||
|  * Note if there's more items than the max-keys specified, the caller needs to use the nextMarker returned as the value for the next call's maker paramter.
 | ||
|  * Loop through all the items returned from ListObjects.
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function listObjects($ossClient, $bucket)
 | ||
| {
 | ||
|     $prefix = 'oss-php-sdk-test/';
 | ||
|     $delimiter = '/';
 | ||
|     $nextMarker = '';
 | ||
|     $maxkeys = 1000;
 | ||
|     $options = array(
 | ||
|         'delimiter' => $delimiter,
 | ||
|         'prefix' => $prefix,
 | ||
|         'max-keys' => $maxkeys,
 | ||
|         'marker' => $nextMarker,
 | ||
|     );
 | ||
|     try {
 | ||
|         $listObjectInfo = $ossClient->listObjects($bucket, $options);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
|     $objectList = $listObjectInfo->getObjectList(); // object list
 | ||
|     $prefixList = $listObjectInfo->getPrefixList(); // directory list
 | ||
|     if (!empty($objectList)) {
 | ||
|         print("objectList:\n");
 | ||
|         foreach ($objectList as $objectInfo) {
 | ||
|             print($objectInfo->getKey() . "\n");
 | ||
|         }
 | ||
|     }
 | ||
|     if (!empty($prefixList)) {
 | ||
|         print("prefixList: \n");
 | ||
|         foreach ($prefixList as $prefixInfo) {
 | ||
|             print($prefixInfo->getPrefix() . "\n");
 | ||
|         }
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Lists all folders and files under the bucket. Use nextMarker repeatedly to get all objects.
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function listAllObjects($ossClient, $bucket)
 | ||
| {
 | ||
|     // Create dir/obj 'folder' and put some files into it.
 | ||
|     for ($i = 0; $i < 100; $i += 1) {
 | ||
|         $ossClient->putObject($bucket, "dir/obj" . strval($i), "hi");
 | ||
|         $ossClient->createObjectDir($bucket, "dir/obj" . strval($i));
 | ||
|     }
 | ||
| 
 | ||
|     $prefix = 'dir/';
 | ||
|     $delimiter = '/';
 | ||
|     $nextMarker = '';
 | ||
|     $maxkeys = 30;
 | ||
| 
 | ||
|     while (true) {
 | ||
|         $options = array(
 | ||
|             'delimiter' => $delimiter,
 | ||
|             'prefix' => $prefix,
 | ||
|             'max-keys' => $maxkeys,
 | ||
|             'marker' => $nextMarker,
 | ||
|         );
 | ||
|         var_dump($options);
 | ||
|         try {
 | ||
|             $listObjectInfo = $ossClient->listObjects($bucket, $options);
 | ||
|         } catch (OssException $e) {
 | ||
|             printf(__FUNCTION__ . ": FAILED\n");
 | ||
|             printf($e->getMessage() . "\n");
 | ||
|             return;
 | ||
|         }
 | ||
|         // Get the nextMarker, and it would be used as the next call's marker parameter to resume from the last call
 | ||
|         $nextMarker = $listObjectInfo->getNextMarker();
 | ||
|         $listObject = $listObjectInfo->getObjectList();
 | ||
|         $listPrefix = $listObjectInfo->getPrefixList();
 | ||
|         var_dump(count($listObject));
 | ||
|         var_dump(count($listPrefix));
 | ||
|         if ($nextMarker === '') {
 | ||
|             break;
 | ||
|         }
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Get the content of an object.
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function getObject($ossClient, $bucket)
 | ||
| {
 | ||
|     $object = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     $options = array();
 | ||
|     try {
 | ||
|         $content = $ossClient->getObject($bucket, $object, $options);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
|     if (file_get_contents(__FILE__) === $content) {
 | ||
|         print(__FUNCTION__ . ": FileContent checked OK" . "\n");
 | ||
|     } else {
 | ||
|         print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Put symlink
 | ||
|  *
 | ||
|  * @param OssClient $ossClient  The Instance of OssClient
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function putSymlink($ossClient, $bucket)
 | ||
| {
 | ||
|     $symlink = "test-samples-symlink";
 | ||
|     $object = "test-samples-object";
 | ||
|     try {
 | ||
|         $ossClient->putObject($bucket, $object, 'test-content');
 | ||
|         $ossClient->putSymlink($bucket, $symlink, $object);
 | ||
|         $content = $ossClient->getObject($bucket, $symlink);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
|     if ($content == 'test-content') {
 | ||
|         print(__FUNCTION__ . ": putSymlink checked OK" . "\n");
 | ||
|     } else {
 | ||
|         print(__FUNCTION__ . ": putSymlink checked FAILED" . "\n");
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Get symlink
 | ||
|  *
 | ||
|  * @param OssClient $ossClient  OssClient instance
 | ||
|  * @param string $bucket  bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function getSymlink($ossClient, $bucket)
 | ||
| {
 | ||
|     $symlink = "test-samples-symlink";
 | ||
|     $object = "test-samples-object";
 | ||
|     try {
 | ||
|         $ossClient->putObject($bucket, $object, 'test-content');
 | ||
|         $ossClient->putSymlink($bucket, $symlink, $object);
 | ||
|         $content = $ossClient->getSymlink($bucket, $symlink);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
|     if ($content[OssClient::OSS_SYMLINK_TARGET]) {
 | ||
|         print(__FUNCTION__ . ": getSymlink checked OK" . "\n");
 | ||
|     } else {
 | ||
|         print(__FUNCTION__ . ": getSymlink checked FAILED" . "\n");
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Get_object_to_local_file
 | ||
|  *
 | ||
|  * Get object
 | ||
|  * Download object to a specified file.
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function getObjectToLocalFile($ossClient, $bucket)
 | ||
| {
 | ||
|     $object = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     $localfile = "upload-test-object-name.txt";
 | ||
|     $options = array(
 | ||
|         OssClient::OSS_FILE_DOWNLOAD => $localfile,
 | ||
|     );
 | ||
| 
 | ||
|     try {
 | ||
|         $ossClient->getObject($bucket, $object, $options);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK, please check localfile: 'upload-test-object-name.txt'" . "\n");
 | ||
|     if (file_get_contents($localfile) === file_get_contents(__FILE__)) {
 | ||
|         print(__FUNCTION__ . ": FileContent checked OK" . "\n");
 | ||
|     } else {
 | ||
|         print(__FUNCTION__ . ": FileContent checked FAILED" . "\n");
 | ||
|     }
 | ||
|     if (file_exists($localfile)) {
 | ||
|         unlink($localfile);
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Copy object
 | ||
|  * When the source object is same as the target one, copy operation will just update the metadata.
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function copyObject($ossClient, $bucket)
 | ||
| {
 | ||
|     $fromBucket = $bucket;
 | ||
|     $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     $toBucket = $bucket;
 | ||
|     $toObject = $fromObject . '.copy';
 | ||
|     $options = array();
 | ||
| 
 | ||
|     try {
 | ||
|         $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Update Object Meta
 | ||
|  * it leverages the feature of copyObject: when the source object is just the target object, the metadata could be updated via copy
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function modifyMetaForObject($ossClient, $bucket)
 | ||
| {
 | ||
|     $fromBucket = $bucket;
 | ||
|     $fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     $toBucket = $bucket;
 | ||
|     $toObject = $fromObject;
 | ||
|     $copyOptions = array(
 | ||
|         OssClient::OSS_HEADERS => array(
 | ||
|             'Cache-Control' => 'max-age=60',
 | ||
|             'Content-Disposition' => 'attachment; filename="xxxxxx"',
 | ||
|         ),
 | ||
|     );
 | ||
|     try {
 | ||
|         $ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Get object meta, that is, getObjectMeta
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function getObjectMeta($ossClient, $bucket)
 | ||
| {
 | ||
|     $object = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     try {
 | ||
|         $objectMeta = $ossClient->getObjectMeta($bucket, $object);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
|     if (isset($objectMeta[strtolower('Content-Disposition')]) &&
 | ||
|         'attachment; filename="xxxxxx"' === $objectMeta[strtolower('Content-Disposition')]
 | ||
|     ) {
 | ||
|         print(__FUNCTION__ . ": ObjectMeta checked OK" . "\n");
 | ||
|     } else {
 | ||
|         print(__FUNCTION__ . ": ObjectMeta checked FAILED" . "\n");
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Delete an object
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function deleteObject($ossClient, $bucket)
 | ||
| {
 | ||
|     $object = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     try {
 | ||
|         $ossClient->deleteObject($bucket, $object);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| /**
 | ||
|  * Delete multiple objects in batch
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function deleteObjects($ossClient, $bucket)
 | ||
| {
 | ||
|     $objects = array();
 | ||
|     $objects[] = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     $objects[] = "oss-php-sdk-test/upload-test-object-name.txt.copy";
 | ||
|     try {
 | ||
|         $ossClient->deleteObjects($bucket, $objects);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|  * Check whether an object exists
 | ||
|  *
 | ||
|  * @param OssClient $ossClient OssClient instance
 | ||
|  * @param string $bucket bucket name
 | ||
|  * @return null
 | ||
|  */
 | ||
| function doesObjectExist($ossClient, $bucket)
 | ||
| {
 | ||
|     $object = "oss-php-sdk-test/upload-test-object-name.txt";
 | ||
|     try {
 | ||
|         $exist = $ossClient->doesObjectExist($bucket, $object);
 | ||
|     } catch (OssException $e) {
 | ||
|         printf(__FUNCTION__ . ": FAILED\n");
 | ||
|         printf($e->getMessage() . "\n");
 | ||
|         return;
 | ||
|     }
 | ||
|     print(__FUNCTION__ . ": OK" . "\n");
 | ||
|     var_dump($exist);
 | ||
| }
 | ||
| 
 |