Einfaches Plugin, mit dem Benutzer Dateien in Ihren Dropbox-Ordner hochladen können

Heute schreiben wir ein Plugin, mit dem Ihre Benutzer Ihre Dateien an Ihr Dropbox-Konto senden können. Es kann für mehrere Zwecke erforderlich sein; Wenn Sie beispielsweise Ihren Lesern einen Wettbewerb anbieten, müssen diese möglicherweise einige Dateien an einen eindeutigen Ordner in Dropbox senden, die Sie partitionieren möchten. Kurz gesagt, dieses Plugin dient zum Empfang von Dateien, die noch nicht veröffentlicht werden dürfen und von Ihnen überprüft werden müssen.


Bevor wir anfangen

Sie können das fertige Plugin über die Schaltfläche Download Source herunterladen. Nun werden wir unser Plugin Schritt für Schritt beschreiben. Wir werden die Dropbox Uploader-Klasse (unter MIT-Lizenz) von Jaka Jancar verwenden, um unser Plugin zu erstellen.

Wir werden dieses Plugin mit unserer eigenen hypothetischen Situation aus dem Intro-Abschnitt erstellen: Nehmen Sie an, Sie veranstalten einen Wettbewerb für den "Best Desktop Screenshot" um Ihre Benutzer. Jeder registrierte Site-Benutzer kann seinen Desktop-Screenshot an Sie senden. Nach einer Frist werden Sie alles durchsehen und dann die Gewinner veröffentlichen. Also fangen wir an, unser Plugin zu bauen!


Schritt 1 Erste Datei erstellen

Erstellen Sie einen Ordner mit dem Namen Dbuploader im WP-Inhalt / Plugins Verzeichnis. Erstellen Sie eine neue PHP-Datei mit dem Namen DropboxUploader.php im Inneren; Öffnen Sie es in Ihrem Texteditor und fügen Sie den folgenden Code ein:

 email = $ email; $ this-> password = $ password;  public function setCaCertificateFile ($ file) $ this-> caCertSourceType = self :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ file;  public function setCaCertificateDir ($ dir) $ this-> caCertSourceType = self :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir;  public function upload ($ Dateiname, $ remoteDir = '/') Wenn (! file_exists ($ Dateiname) oder! is_file ($ Dateiname) oder! is_readable ($ Dateiname)) eine neue Ausnahme auslösen ("Datei '$ Dateiname') nicht vorhanden oder nicht lesbar. "); if (! is_string ($ remoteDir)) löst neue Exception aus ("Remote-Verzeichnis muss ein String sein, ist" .gettype ($ remoteDir). "Stattdessen."); if (! $ this-> eingeloggt) $ this-> login (); $ data = $ this-> request ('https://www.dropbox.com/home'); $ token = $ this-> extractToken ($ data, 'https://dl-web.dropbox.com/upload'); $ data = $ this-> request ('https://dl-web.dropbox.com/upload'), true, array ('plain' => 'yes', 'file' =>'@ '. 'dest' => $ remoteDir, 't' => $ token)); if (strpos ($ data, 'HTTP / 1.1 302 FOUND') === false) Neue Exception auslösen ('Upload fehlgeschlagen!');  protected function login () $ data = $ this-> request ('https://www.dropbox.com/login'); $ token = $ this-> extractToken ($ data, '/ login'); $ data = $ this-> request ('https://www.dropbox.com/login', true, array ('login_email' => $ this-> email, 'login_password' => $ this-> password, ' t '=> $ token)); if (stripos ($ data, 'location: / home') === false) Neue Exception auslösen ('Login nicht erfolgreich.'); $ this-> protocolIn = true;  geschützte Funktionsanforderung ($ url, $ post = false, $ postData = array ()) $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, true); switch ($ this-> caCertSourceType) case self :: CACERT_SOURCE_FILE: curl_setopt ($ ch, CURLOPT_CAINFO, $ this-> caCertSource); brechen; case self :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); brechen;  curl_setopt ($ ch, CURLOPT_HEADER, 1); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); if ($ post) curl_setopt ($ ch, CURLOPT_POST, $ post); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);  // Cookies senden $ rawCookies = array (); foreach ($ this-> cookies als $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = implode (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ data = curl_exec ($ ch); if ($ data === false) Neue Exception ausgeben ('Anforderung kann nicht ausgeführt werden:' .curl_error ($ ch)); // Gespeicherte Cookies speichern preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ entspricht, PREG_SET_ORDER); foreach ($ entspricht als $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); $ data zurückgeben;  geschützte Funktion extractToken ($ html, $ formAction) if (! preg_match ('/
] * '. preg_quote ($ formAction,' / ').' [^>] *>. *? (] * name = "t" [^>] * value = "(. *?)" [^>] *>). *?<\/form>/ ist ', $ html, $ stimmt überein) || ! isset ($ matches [2])) löst neue Ausnahme aus ("Token kann nicht extrahiert werden! (form action = $ formAction)"); return $ match [2];

Schritt 2 Erstellen der Plugin-Datei

Erstellen Sie die Hauptplugin-Datei mit dem Namen dbuploader.php im selben Verzeichnis; Öffnen Sie es in Ihrem Editor und fügen Sie diesen Code dort ein:

  $ size_limit) Neue Exception auslösen ('Die Dateigröße ist zu groß oder der Dateityp wird nicht unterstützt.'); $ tmpDir = uniqid ('/ tmp / DropboxUploader-'); if (! mkdir ($ tmpDir)) löst neue Ausnahme aus ('Temporäres Verzeichnis kann nicht erstellt werden!'); if ($ _FILES ['file'] ['name'] === "") Neue Exception auslösen ('Dateiname wird vom Browser nicht angegeben.'); global $ current_user; get_currentuserinfo (); $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email. '_'. $ _ FILES ['file'] ['name']); if (! move_uploaded_file ($ _ FILES ['file'] ['tmp_name'], $ tmpFile)) Neue Exception auslösen ('Uploaded file kann nicht umbenannt werden!'); // Geben Sie hier Ihre Anmeldeinformationen für das Dropbox-Konto ein. $ Uploader = new DropboxUploader ($ dropbox_email, $ dropbox_password); $ uploader-> upload ($ tmpFile, $ _POST ['dest']); Rückkehr 'Datei erfolgreich hochgeladen Vielen Dank!';  catch (Ausnahme $ e) return 'Error: ' . htmlspecialchars ($ e-> getMessage ()). '';  // Bereinigen Sie if (isset ($ tmpFile) && file_exists ($ tmpFile)) unlink ($ tmpFile); if (isset ($ tmpDir) && file_exists ($ tmpDir)) rmdir ($ tmpDir);  else return ' 

Dropbox Uploader Demo



'; ////////////// add_action ('the_content', 'dbouploader'); ?>

Schritt 3 Beenden des Plugins:

Erstellen config.php Datei in Ihrem Plugin-Ordner, fügen Sie diesen Code dort ein:

 

Bearbeiten Sie dann diesen Code: Legen Sie Ihre E-Mail-Adresse, Ihr Kennwort, den Dropbox-Ordner, die Dateigrößenbegrenzung und die unterstützten Dateitypen fest und speichern Sie sie.


Einige Vorschläge:

Vorschlag 1:

Wenn Sie es für alle Benutzer verfügbar machen möchten, nicht nur für angemeldete Benutzer, können Sie den Code bearbeiten, diesen entfernen…

 if (is_user_logged_in ()) add_shortcode ('dbouploader', 'shortcoder');

… Zustand vom Plugin. Stattdessen können Sie Recaptcha in Ihr Plugin integrieren.

Vorschlag 2:

Sie können auch den Namen der hochgeladenen Dateien formatieren. Bearbeiten Sie einfach diese Zeile:

 $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email. '_'. $ _ FILES ['file'] ['name']);

Das ist alles viel Glück!