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.
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!
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 ('/