Vor ein paar Wochen veröffentlichte Nettuts + eine Einführung in das Simple Storage System (S3) von Amazon. Es ist großartig, eine unbegrenzte Anzahl von Dateien für fast kein Geld hochladen zu können, aber es wäre noch besser, wenn Ihre Benutzer Dateien von Ihrer Website hochladen könnten. Auf diese Weise müssen Sie sich keine Sekunde um die Größe Ihres Webservers kümmern. Lass es uns versuchen!
Im Grunde werden wir ein Standard-HTML-Dateielement und eine einfach zu verwendende S3-PHP-Klasse verwenden, um eine Seite zu erstellen, auf der Benutzer eine Datei in Ihr S3-Konto hochladen können und Informationen zu den bereits hochgeladenen Dateien erhalten. Dazu benötigen Sie ein Amazon S3-Konto und einen PHP-fähigen Webserver. Wenn Sie noch nicht von Amazon S3 gehört haben oder noch kein Konto besitzen, lesen Sie zuerst das Einführungskurs-Tutorial von Collis.
Als Erstes benötigen wir eine Möglichkeit, mit der PHP mit dem S3-Server kommunizieren kann. Donovan Schonknecht hat dafür eine PHP-Klasse geschrieben. Statt das Rad neu zu erfinden, verwenden wir es!
Als nächstes erstellen Sie eine neue Datei namens page.php in demselben Ordner. Als erstes müssen wir die Datei S3.php einbinden. Wir werden die Funktion required_once () in php verwenden. Diese Funktion schließt die Datei nur ein, wenn sie zuvor nicht auf derselben Seite enthalten war. Dadurch wird sichergestellt, dass bei der Neudefinition von Funktionen keine Probleme auftreten, wenn das Skript versehentlich versucht, die Datei ein zweites Mal einzuschließen.
Als Nächstes müssen wir die AWS-Zugriffsinformationen (Amazon Web Services) eingeben, die das Skript für den Zugriff auf unseren S3-Server benötigt. Dies sind der Acces-Schlüssel und der geheime Schlüssel, die von Amazon bereitgestellt werden. Wenn Sie nicht wissen, worüber ich spreche, lesen Sie das NETTUTS-Einführungs-Tutorial. Jetzt haben wir alle Informationen, um die Klasse zu initiieren. Dieser Code wurde ganz oben in den Karosserie Stichworte.
Lassen Sie uns nun ein einfaches HTML-Formular mit einem Dateielement erstellen. Mit diesem Element können Benutzer ihr lokales Laufwerk nach einer Datei durchsuchen. Wenn der Benutzer den Submit-Button drückt, wird die Datei automatisch als temporäre Datei auf den Server hochgeladen und Informationen über die Datei werden in der POST-Variablen gesendet.
Hier ist der Code-Ausschnitt. Vergiss nicht, es zu vergessen enctype = "multipart / form-data" was für das File-Element notwendig ist, um zu funktionieren. Dieser Code sollte außerhalb der Tags, da es sich um HTML handelt.
Nun, für diejenigen, die mit Formen nicht vertraut sind, action = "" teilt dem Skript mit, auf welche Seite es nach dem Senden gehen soll. Da wir dort eine leere Zeichenfolge angegeben haben, werden die Variablen vom Formular bereitgestellt und die aktuelle Seite aktualisiert. Wenn die Seite geladen wird, möchten wir also prüfen, ob ein Formular gesendet wurde oder nicht. Wenn ein Formular gesendet wurde, sollte die Seite das Skript ausführen, in dem die Post-Variablen gespeichert werden, und die Dateien auf den S3-Server verschoben werden.
Die vom file-Element gesendete Post-Variable ist ein Array, das Informationen zur Datei enthält. Zum Beispiel: Dateiname, Größe, Typ und temporärer Name. Wir brauchen nur den Dateinamen und den temporären Namen. Beachten Sie, dass das Dateielement im Gegensatz zu anderen Formularelementen die Variablen an sendet $ _FILES und nicht zu $ _POST.
Der folgende PHP-Code prüft, ob ein Formular gesendet wurde, und speichert die Post-Variablen. Wir werden uns später mit dem S3-Server beschäftigen. Dieser Code sollte direkt hinter dem Ort platziert werden, an dem wir die s3-Klasse initiiert haben.
// Prüfen Sie, ob ein Formular gesendet wurde, wenn (isset ($ _ POST ['Submit']))) // Rückstellungsvariablen $ fileName = $ _FILES ['theFile'] ['name']; $ fileTempName = $ _FILES ['theFile'] ['tmp_name']; // Wir setzen unser Skript im nächsten Schritt fort!
Ok, jetzt haben wir ein Formular, das eine temporäre Datei an den Server sendet und Ihnen einige Informationen hinterlässt. Wenn Sie möchten, können Sie die Datei auf einen Server hochladen und testen. Sie werden feststellen, dass die Verarbeitung des Formulars tatsächlich einige Zeit in Anspruch nimmt, da es sich tatsächlich um das Hochladen einer Datei handelt. Auf jeden Fall wird die Datei nirgends auf Ihrem Server angezeigt, da sie nur als temporäre Datei gespeichert wurde. Jetzt müssen Sie nur noch die hochgeladene Datei in einen Bucket verschieben. Zuerst erstellen wir einen neuen Bucket und verschieben dann die Datei in diesen Bucket.
Um einen Bucket zu erstellen, verwenden wir die Funktion putBucket (Eimer, acl) wobei "Bucket" der Name des Buckets ist (das Wort von Amazon für Ihren Hauptordner oder das Verzeichnis der Dateien). Das zweite Argument ist die Zugriffssteuerungsliste (Access Control List, ACL), in der Sie festlegen können, wer von diesem Bucket lesen oder schreiben darf. Wir möchten, dass jeder unsere Dateien lesen kann, also verwenden wir S3 :: ACL_PUBLIC_READ. Beachten Sie, dass ein Bucket nur einmal erstellt werden muss, sodass diese Funktion bei der nächsten Ausführung dieses Skripts nichts tut, da der Bucket bereits vorhanden ist.
Um die Datei zu verschieben, verwenden wir die Funktion putObjectFile (Quelldatei, Bucket, neuerDateiname, acl).Die Quelldatei ist der Pfad zu der Datei, die wir verschieben möchten. In unserem Fall handelt es sich also um die temporäre Datei, die über unser Formular hochgeladen wurde. Bucket ist der Bucket, in den die Datei verschoben werden soll. Dies ist der Bucket, den wir gerade erstellt haben. Neuer Dateiname ist der Dateiname, den die Datei im Bucket erhält. In diesem Lernprogramm verwenden wir denselben Dateinamen wie auf dem lokalen Laufwerk. In einigen Fällen möchten Sie möglicherweise Dateinamen ändern. Acl ist wieder die Zugriffskontrollliste, die wir erneut auf S3 :: ACL_PUBLIC_READ setzen.
// einen neuen Bucket erstellen $ s3-> putBucket ("jurgens-nettuts-tutorial", S3 :: ACL_PUBLIC_READ);
// Verschiebe die Datei if ($ s3-> putObjectFile ($ fileTempName, "jurgens-nettuts-tutorial", $ fileName, S3 :: ACL_PUBLIC_READ)) echo "Wir haben Ihre Datei erfolgreich hochgeladen."; else echo "Beim Hochladen Ihrer Datei ist ein Fehler aufgetreten ... sorry.";
Wenn Sie nun eine Datei auswählen und auf "Hochladen" klicken, wird die Datei auf dem Amazon-Server gespeichert. Sie können es bereits anzeigen, indem Sie einfach eine URL eingeben, die wie folgt aussieht: http: //Ihr Bucketname.s3.amazoneaws.com/Ihre Datei.ext
Zum Schluss möchten wir, dass das Skript eine Liste der Dateien im Bucket ausgibt. Dafür verwenden wir die Funktion getBucket (Eimer), In welchem Eimer ist der Eimer, den wir ausgeben möchten. Diese Funktion gibt ein Array mit Informationen zu den Dateien zurück. Jeder wurde auch als Array zurückgegeben. Visualisieren:
Wir möchten jede Datei im $ bucket_contents-Array ausgeben. Dafür verwenden wir eine für jeden() Schleife, die das Array durchläuft, bis alle Elemente verarbeitet wurden. Es speichert das aktuelle Element in der $ file-Variablen und führt den Code zwischen den Klammern aus. Jetzt müssen wir nur noch einen Link zur Datei angeben.
Fügen Sie diesen Code unter dem Formular ein, um die Liste dort anzuzeigen.
getBucket ("jurgens-nettuts-tutorial"); foreach ($ bucket_contents als $ file) $ fname = $ file ['name']; $ furl = "http://jurgens-nettuts-tutorial.s3.amazonaws.com/".$fname; // einen Link zur Datei echo "$ fname" ausgeben
";?>
Mit ein wenig CSS-Styling könnte Ihr Endergebnis so aussehen:
Da haben Sie also Ihr eigenes, unbegrenztes Datei-Upload-Skript. Natürlich können Sie mit der S3-PHP-Klasse noch viel mehr tun. Werfen Sie einfach einen kurzen Blick auf die Readme-Datei, und Sie können loslegen. Es ist sehr einfach zu bedienen!
Laden Sie die Quelldateien herunter
Demo anzeigen