Mit PHP auf Ceph Object Gateway zugreifen

Verwenden Sie PHP-Scripts für S3 -Zugriff. Diese Prozedur stellt einige PHP-Beispielscripts bereit, um verschiedene Tasks auszuführen, wie z. B. das Löschen eines Buckets oder eines Objekts.

Wichtig: Die Beispiele wurden gegen php v5.4.16 und aws-sdk v2.8.24getestet.

Voraussetzungen

  • Zugriff auf Stammebene auf eine Entwicklungsworkstation.

  • Internetzugang.

  1. Installieren Sie das Paket php :

    [root@dev ~]# yum install php
  2. Laden Sie das Zip-Archiv herunter von aws-sdk für PHP und extrahieren Sie es.

  3. Erstellen Sie ein Projektverzeichnis:

    [user@dev ~]$ mkdir php_s3
    [user@dev ~]$ cd php_s3
  4. Kopieren Sie das extrahierte Verzeichnis aws in das Projektverzeichnis. Zum Beispiel:

    [user@dev ~]$ cp -r ~/Downloads/aws/ ~/php_s3/
  5. Erstellen Sie die Verbindungsdatei:

    [user@dev ~]$ vim conn.php
  6. Fügen Sie den folgenden Inhalt in die Datei conn.php ein:

    Syntax

    <?php
    define(AWS_KEY, MY_ACCESS_KEY);
    define(AWS_SECRET_KEY, MY_SECRET_KEY);
    define(HOST, FQDN_OF_GATEWAY_NODE);
    define(PORT, 8080);
    
    // require the AWS SDK for php library
    require /PATH_TO_AWS/aws-autoloader.php;
    
    use Aws\S3\S3Client;
    
    // Establish connection with host using S3 Client
    client = S3Client::factory(array(
        base_url => HOST,
        port => PORT,
        key      => AWS_KEY,
        secret   => AWS_SECRET_KEY
    ));
    ?>

    Ersetzen Sie FQDN_OF_GATEWAY_NODE durch den FQDN des Gateway-Knotens. Ersetzen Sie PATH_TO_AWS durch den absoluten Pfad zum extrahierten Verzeichnis aws , das Sie in das Projektverzeichnis php kopiert haben.

    Speichern Sie die Datei und beenden Sie den Editor.

  7. Führen Sie die Datei aus:

    [user@dev ~]$ php -f conn.php | echo $?

    Wenn Sie die Werte in der Datei korrekt angegeben haben, lautet die Ausgabe des Befehls 0.

  8. Erstellen Sie eine neue Datei zum Erstellen eines Buckets:

    [user@dev ~]$ vim create_bucket.php

    Fügen Sie den folgenden Inhalt in die neue Datei ein:

    Syntax

    <?php
    
    include 'conn.php';
    
    client->createBucket(array('Bucket' => 'my-new-bucket3'));
    
    ?>

    Speichern Sie die Datei und beenden Sie den Editor.

  9. Führen Sie die Datei aus:

    [user@dev ~]$ php -f create_bucket.php
  10. Erstellen Sie eine neue Datei zum Auflisten eigener Buckets:

    [user@dev ~]$ vim list_owned_buckets.php

    Fügen Sie den folgenden Inhalt in die Datei ein:

    Syntax

    <?php
    
    include 'conn.php';
    
    blist = client->listBuckets();
    echo "Buckets belonging to " . blist['Owner']['ID'] . ":\n";
    foreach (blist['Buckets'] as b) {
        echo "{b['Name']}\t{b['CreationDate']}\n";
    }
    
    ?>

    Speichern Sie die Datei und beenden Sie den Editor.

  11. Führen Sie die Datei aus:

    [user@dev ~]$ php -f list_owned_buckets.php

    Die Ausgabe sollte der nachfolgenden ähnlich sein:

    my-new-bucket3 2020-01-21 10:33:19 UTC
  12. Erstellen Sie ein Objekt, indem Sie zuerst eine Quellendatei namens hello.txterstellen:

    [user@dev ~]$ echo "Hello World!" > hello.txt
  13. Neue PHP-Datei erstellen:

    [user@dev ~]$ vim create_object.php

    Fügen Sie den folgenden Inhalt in die Datei ein:

    Syntax

    <?php
    
    include 'conn.php';
    
    key         = 'hello.txt';
    source_file = './hello.txt';
    acl         = 'private';
    bucket      = 'my-new-bucket3';
    client->upload(bucket, key, fopen(source_file, 'r'), acl);
    
    ?>

    Speichern Sie die Datei und beenden Sie den Editor.

  14. Führen Sie die Datei aus:

    [user@dev ~]$ php -f create_object.php

    Dadurch wird das Objekt hello.txt im Bucket my-new-bucket3erstellt.

  15. Erstellen Sie eine neue Datei zum Auflisten des Bucketinhalts:

    [user@dev ~]$ vim list_bucket_content.php

    Fügen Sie den folgenden Inhalt in die Datei ein:

    Syntax

    <?php
    
    include 'conn.php';
    
    o_iter = client->getIterator('ListObjects', array(
        'Bucket' => 'my-new-bucket3'
    ));
    foreach (o_iter as o) {
        echo "{o['Key']}\t{o['Size']}\t{o['LastModified']}\n";
    }
    ?>

    Speichern Sie die Datei und beenden Sie den Editor.

  16. Führen Sie die Datei aus:

    [user@dev ~]$ php -f list_bucket_content.php

    Die Ausgabe ähnelt der folgenden:

    hello.txt    12    Fri, 22 Jan 2020 15:54:52 GMT
  17. Erstellen Sie eine neue Datei zum Löschen eines leeren Buckets:

    [user@dev ~]$ vim del_empty_bucket.php

    Fügen Sie den folgenden Inhalt in die Datei ein:

    Syntax

    <?php
    
    include 'conn.php';
    
    client->deleteBucket(array('Bucket' => 'my-new-bucket3'));
    ?>

    Speichern Sie die Datei und beenden Sie den Editor.

  18. Führen Sie die Datei aus:

    [user@dev ~]$ php -f del_empty_bucket.php | echo $?
    Wenn das Bucket erfolgreich gelöscht wurde, gibt der Befehl 0 als Ausgabe zurück.
    Wichtig: Das Löschen eines nicht leeren Buckets wird in PHP 2 und neueren Versionen von aws-sdkderzeit nicht unterstützt.
    Hinweis: Bearbeiten Sie die Datei create_bucket.php , um leere Buckets zu erstellen, z. B. my-new-bucket4, my-new-bucket5. Bearbeiten Sie anschließend die Datei del_empty_bucket.php entsprechend, bevor Sie die leeren Buckets löschen.
  19. Erstellen Sie eine neue Datei zum Löschen eines Objekts:

    [user@dev ~]$ vim delete_object.php

    Fügen Sie den folgenden Inhalt in die Datei ein:

    Syntax

    <?php
    
    include 'conn.php';
    
    client->deleteObject(array(
        'Bucket' => 'my-new-bucket3',
        'Key'    => 'hello.txt',
    ));
    ?>

    Speichern Sie die Datei und beenden Sie den Editor.

  20. Führen Sie die Datei aus:

    [user@dev ~]$ php -f delete_object.php

    Dadurch wird das Objekt hello.txtgelöscht.