s3_test.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. use Aws\S3\S3Client;
  3. require_once(dirname(__FILE__).'/vendor/autoload.php');
  4. $CONFIG = dirname(__FILE__).'/storage.config.php';
  5. include($CONFIG);
  6. echo "\nconnect to S3...\n";
  7. $bucket_name = $CONFIG['objectstore']['arguments']['bucket'];
  8. $s3 = new S3Client([
  9. 'version' => 'latest',
  10. 'endpoint' => 'http://'.$CONFIG['objectstore']['arguments']['hostname'],
  11. 'region' => $CONFIG['objectstore']['arguments']['region'],
  12. 'credentials' => [
  13. 'key' => $CONFIG['objectstore']['arguments']['key'],
  14. 'secret' => $CONFIG['objectstore']['arguments']['secret'],
  15. ],
  16. 'use_path_style_endpoint' => $CONFIG['objectstore']['arguments']['use_path_style']
  17. ]);
  18. $buckets = $s3->listBuckets([
  19. ]);
  20. echo $buckets;
  21. echo "\n";
  22. try {
  23. foreach ($buckets['Buckets'] as $bucket){
  24. echo "{$bucket['Name']}\t{$bucket['CreationDate']}\n";
  25. }
  26. } catch (S3Exception $e) {
  27. echo $e->getMessage();
  28. echo "\n";
  29. }
  30. echo "\n".
  31. "\nread files in S3...\n";
  32. echo "The contents of your bucket $bucket_name are: \n\n";
  33. $objects = S3list($s3, $bucket_name);
  34. //$objects = $s3->listObjectsV2([
  35. // 'Bucket' => $bucket_name,
  36. //]);
  37. //foreach ($objects['Contents'] as $object){
  38. // echo "{$object['Key']}\t{$object['LastModified']}\n";
  39. //}
  40. //echo "\n";
  41. echo 'S3list:'.print_r($objects);
  42. echo "\n";
  43. /*
  44. $result_s3 = S3put($s3, $bucket, [
  45. 'SourceFile' => './nextcloud_25.tar.gz',
  46. ]);
  47. echo 'S3put:'.$result_s3;
  48. $bucket = 'nextcloud';
  49. $file_Path = './nextcloud_25.tar.gz';
  50. $key = basename($file_Path);
  51. try{
  52. $result = $s3->putObject([
  53. 'Bucket' => $bucket,
  54. 'Key' => $key,
  55. 'SourceFile' => $file_Path,
  56. 'ACL' => 'private',
  57. ]);
  58. } catch (S3Exception $e) {
  59. echo $e->getMessage() . "\n";
  60. }
  61. */
  62. //#########################################################################################
  63. function S3list($s3, $bucket, $maxIteration = 10000000) {
  64. $objects = [];
  65. try {
  66. $iteration = 0;
  67. $marker = '';
  68. do {
  69. //$result = $s3->listObjectsV2(['Bucket' => $bucket, 'Marker' => $marker]);
  70. $result = $s3->listObjectsV2(['Bucket' => $bucket]);
  71. if (rand(0,100) > 75 ) { echo '.'; }
  72. if ($result->get('Contents')) {
  73. $objects = array_merge($objects, $result->get('Contents'));
  74. }
  75. if (count($objects)) {
  76. $marker = $objects[count($objects) - 1]['Key'];
  77. }
  78. } while ($result->get('IsTruncated') && ++$iteration < $maxIteration);
  79. if ($result->get('IsTruncated')) {
  80. echo "\n".'WARNING: The number of keys greater than '.count($objects).' (the first part is loaded)';
  81. }
  82. return $objects;
  83. } catch (S3Exception $e) {
  84. return 'ERROR: Cannot retrieve objects: '.$e->getMessage();
  85. }
  86. }
  87. //#########################################################################################
  88. function S3put($s3, $bucket, $vars = array() ) {
  89. #return 'dummy';
  90. if (is_string($vars) ) {
  91. if (file_exists($vars)) {
  92. $vars = array('SourceFile' => $vars);
  93. }
  94. else {
  95. return 'ERROR: S3put($cms, $bucket, $vars)';
  96. }
  97. }
  98. if (empty($vars['Bucket']) ) { $vars['Bucket'] = $bucket; }
  99. if (empty($vars['Key'])
  100. && !empty($vars['SourceFile'])) { $vars['Key'] = $vars['SourceFile']; }
  101. if (empty($vars['ACL']) ) { $vars['ACL'] = 'private'; }
  102. if (empty($vars['Bucket']) ) { return 'ERROR: no Bucket'; }
  103. if (empty($vars['Key']) ) { return 'ERROR: no Key'; }
  104. if (!file_exists($vars['SourceFile'])) { return 'ERROR: file \''.$vars['SourceFile'].'\' does not exist'; }
  105. try {
  106. if (isset($GLOBALS['MULTIPART_THRESHOLD'])
  107. && filesize($vars['SourceFile']) > $GLOBALS['MULTIPART_THRESHOLD']*1024*1024) {
  108. $uploader = new MultipartUploader($s3,
  109. $vars['SourceFile'],
  110. $vars);
  111. $result = $uploader->upload();
  112. } else {
  113. if (filesize($vars['SourceFile']) > 2*1024*1024*1024) {
  114. echo "\n".'WARNING: file \''.$vars['SourceFile'].'\' is larger then 2 Gb, consider enabeling \'MultipartUploader\'';
  115. }
  116. print_r($vars);
  117. $result = $s3->putObject($vars);
  118. }
  119. if (!empty($result['ObjectURL'])) {
  120. return 'OK: '.'ObjectURL:'.$result['ObjectURL'];
  121. } else {
  122. return 'ERROR: '.$vars['Key'].' was not uploaded';
  123. }
  124. } catch (MultipartUploadException | S3Exception | Exception $e) {
  125. return 'ERROR: ' . $e->getMessage();
  126. }
  127. }