Idag skriver vi ett plugin som låter dina användare skicka sina filer till dig, till ditt Dropbox-konto. Det kan behövas för flera ändamål; Om du till exempel gör en tävling för dina läsare, kan det hända att de kanske behöver skicka några filer som du vill dela upp på en unik mappplacering i Dropbox. Kort sagt, det här pluginet är för att ta emot filer, vilket inte får offentliggöras ännu, vilket måste ses över av dig.
Du kan ladda ner färdigt plugin via Download Source-knappen. Nu ska vi beskriva vårt plugin steg för steg. Vi använder Jaka Jancars Dropbox Uploader-klass (under MIT-licens) för att skapa vårt plugin.
Vi kommer att bygga detta plugin med vår egen hypotetiska situation från intro-stycket: Anta att du är värd en tävling för "Bästa skrivbordsskärmbilden" runt dina användare. Varje registrerad webbplatsanvändare kan skicka sin skärmdump till dig. Efter en deadline ser du allt och då publicerar du vinnarna. Så låt oss börja bygga vårt plugin!
Skapa en mapp som heter dbuploader i wp-content / plugins diretory. Skapa en ny PHP-fil som heter DropboxUploader.php innuti; Öppna den i din textredigerare och klistra in och spara den här koden:
email = $ email; $ this-> password = $ password; allmän funktion setCaCertificateFile ($ file) $ this-> caCertSourceType = själv :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ file; allmän funktion setCaCertificateDir ($ dir) $ this-> caCertSourceType = själv :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir; public function upload ($ filnamn, $ remoteDir = '/') om (! file_exists ($ filnamn) eller! is_fil ($ filnamn) eller! is_readable ($ filnamn)) slänga nya undantag existerar inte eller kan inte läsas. "); om (! is_string ($ remoteDir)) kasta ny Undantag ("Fjärrkatalog måste vara en sträng, är" .gettype ($ remoteDir). "istället."); om (! $ this-> loggedIn) $ 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 ('vanlig' => 'ja', 'fil' =>'@'.$ filnamn, 'dest' => $ remoteDir, 't' => $ token)); om (strpos ($ data, 'HTTP / 1.1 302 FONDS') === false) kasta ny Undantag ('Upload failed!'); skyddad funktion inloggning () $ data = $ this-> request ('https://www.dropbox.com/login'); $ token = $ this-> extractToken ($ data, '/ login'); $ data = $ this-> request ('https://www.dropbox.com/login', sant, array ('login_email' => $ this-> email, 'login_password' => $ this-> lösenord, ' t '=> token $)); om (stripos ($ data, 'location: / home') === false) kasta ny Undantag ('Logga in misslyckad.'); $ this-> loggedIn = true; skyddad funktionsförfrågan ($ 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) fall själv :: CACERT_SOURCE_FILE: curl_setopt ($ ch, CURLOPT_CAINFO, $ this-> caCertSource); ha sönder; fallet själv :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); ha sönder; curl_setopt ($ ch, CURLOPT_HEADER, 1); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); om ($ post) curl_setopt ($ ch, CURLOPT_POST, $ post); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData); // Skicka cookies $ rawCookies = array (); foreach ($ this-> cookies som $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = implode (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ data = curl_exec ($ ch); om ($ data === false) kasta ny undantag ('Kan inte utföra begäran:' .curl_error ($ ch)); // Store mottagna cookies preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matchningar, PREG_SET_ORDER); foreach ($ matchningar som $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); returnera $ data; skyddad funktion extraktToken ($ html, $ formAction) om (! preg_match ('/