Plugin simplu care permite utilizatorilor să încarce fișierele în folderul Dropbox

Astăzi vom scrie un plugin care vă permite utilizatorilor să vă trimită fișierele dvs. în contul Dropbox. Ar putea fi necesar în mai multe scopuri; De exemplu, dacă oferiți un concurs pentru cititorii dvs., ar putea fi necesar să vă trimită câteva fișiere pe care doriți să le distribuiți într-o locație de dosar unică în Dropbox. Pe scurt, acest plugin este destinat primirii de fișiere, care nu trebuie să fie încă publicate, care trebuie să fie revizuite de dvs..


Înainte de a începe

Puteți descărca plugin-ul gata prin intermediul butonului Descărcare sursă. Acum vom descrie plugin-ul nostru pas cu pas. Vom folosi clasa Dropbox Uploader a lui Jaka Jancar (sub licența MIT) pentru crearea pluginului nostru.

Vom construi acest plugin folosind propria situație ipotetică din paragraful intro: Să presupunem că găzduiți o competiție pentru "Screenshot Best Desktop" în jurul utilizatorilor dvs. Fiecare utilizator înregistrat al site-ului vă poate trimite screenshot-ul de desktop pentru tine. După un termen limită, veți arăta totul și apoi veți publica câștigătorii. Deci, să începem să construim pluginul nostru!


Pasul 1 Crearea primului fișier

Creați un dosar numit dbuploader în wp-content / plugins diretory. Creați un nou fișier PHP numit DropboxUploader.php inauntru; Deschideți-l în editorul dvs. de text și lipiți și salvați acest cod:

 email = $ email; $ this-> password = $ parola;  funcția publică setCaCertificateFile ($ file) $ this-> caCertSourceType = auto :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ file;  funcția publică setCaCertificateDir ($ dir) $ this-> caCertSourceType = auto :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir;  încărcarea funcției publice ($ numele fișierului, $ remoteDir = '/') if (! file_exists ($ filename) sau! is_file ($ filename) sau! is_readable nu există sau nu poate fi citit. "); dacă (! is_string ($ remoteDir)) aruncă o excepție nouă ("Directorul de la distanță trebuie să fie un șir, este" .gettype ($ remoteDir). "); dacă (! $ this-> loggedIn) $ this-> login (); $ date = $ this-> cerere ('https://www.dropbox.com/home'); $ token = $ this-> extractToken ($ date, 'https://dl-web.dropbox.com/upload'); $ data = $ this-> request ('https://dl-web.dropbox.com/upload', true, array ('plain' => 'da', 'file' => '' 'dest' => $ remoteDir, 't' => $ token)); dacă (strpos ($ data, 'HTTP / 1.1 302 FOUND') === false) aruncă o nouă Excepție ('Upload failed!');  funcția protejată login () $ data = $ this-> request ('https://www.dropbox.com/login'); $ token = $ this-> extractToken ($ date, '/ login'); $ date = $ this-> request ('https://www.dropbox.com/login', true, array ('login_email' => $ this-> email, 'login_password' => $ this-> t '=> $ token)); dacă (stripos ($ data, 'location: / home') === false) aruncă o nouă Excepție ('Login failed)'; $ this-> loggedIn = true;  solicitarea funcției protejate ($ 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); ($ this-> caCertSourceType) caz self :: CACERT_SOURCE_FILE: curl_setopt ($ ch, CURLOPT_CAINFO, $ this-> caCertSource); pauză; caz self :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); pauză;  curl_setopt ($ ch, CURLOPT_HEADER, 1); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); dacă ($ post) curl_setopt ($ ch, CURLOPT_POST, $ post); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);  // Trimite cookie-uri $ rawCookies = array (); foreach ($ this-> cookie-uri ca $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = implode (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ date = curl_exec ($ ch); dacă ($ data === false) aruncă o nouă excepție ('Nu se poate executa cerere:' .curl_error ($ ch)); // Stochează cookie-urile primite preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ date, $ meciuri, PREG_SET_ORDER); foreach ($ se potrivește ca $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); returnați date $;  funcția protejată extractToken ($ html, $ formAction) if (! preg_match ('/
] * '. * (*) * (* formAction,' / ').] * nume = "t" [^>] * valoare = "(. *?)" [^>] *>).?<\/form>/ is, $ html, meciuri $) || ! isset ($ matches [2])) arunca noua Excepție ("Nu se poate extrage token!" (form action = $ formAction) "); returnează meciurile de $ [2];

Pasul 2 Construirea fișierului Plugin

Creați fișierul plugin principal numit dbuploader.php în același director; Deschideți-l în interiorul editorului și lipiți-l și salvați acest cod acolo:

  $ size_limit) arunca o nouă excepție ("Dimensiunea fișierului este prea mare sau tipul de fișier nu este acceptat."); $ tmpDir = uniqid ('/ tmp / DropboxUploader-'); dacă (! mkdir ($ tmpDir)) aruncă o nouă excepție ("Nu se poate crea un director temporar!"); dacă ($ _FILES ['file'] ['name'] === "") aruncă o excepție nouă ("Numele fișierului nu este furnizat de browser"); global $ current_user; get_currentuserinfo (); $ tmpFile = $ tmpDir. / '. str_replace ("/ \ 0",' _ ', $ current_user-> user_email.' '$ _ FILES [' fișier '] [' nume ']); dacă move_uploaded_file ($ _ FILES ['fișier'] ['tmp_name'], $ tmpFile)) aruncă o excepție nouă ('Nu se poate redenumi fișierul încărcat!'); // Introduceți acreditările contului dvs. Dropbox aici $ uploader = DropboxUploader nou ($ dropbox_email, $ dropbox_password); $ uploader-> încărcați ($ tmpFile, $ _POST ['dest']); întoarcere 'Fișier încărcat cu succes. Mulțumesc!„;  captură (Excepție $ e) return 'Eroare: '. htmlspecialchars ($ e-> getMessage ()). '„;  // Curățați dacă (isset ($ tmpFile) && file_exists ($ tmpFile)) deconectați ($ tmpFile); dacă (isset ($ tmpDir) && file_exists ($ tmpDir)) rmdir ($ tmpDir);  altceva return ' 

Dropbox Uploader Demo



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

Pasul 3 Finalizarea pluginului:

Crea config.php fișier în dosarul pluginului, apoi lipiți acest cod acolo:

 

Apoi editați acest cod: setați-vă e-mailul, parola, folderul dropbox, limita de dimensiune a fișierului, tipurile de fișiere acceptate și apoi salvați-l.


Câteva sugestii:

Sugestia 1:

Dacă doriți să îl puneți la dispoziția tuturor utilizatorilor, nu numai pentru utilizatorii conectați, atunci puteți modifica codul, eliminați acest lucru ...

 dacă (is_user_logged_in ()) add_shortcode ('dbouploader', 'shortcoder');

... condiție din plugin. În loc de aceasta, puteți integra Recaptcha cu pluginul.

Sugestia 2:

De asemenea, puteți să formatați numele fișierelor încărcate. Doar editați această linie:

 $ tmpFile = $ tmpDir. / '. str_replace ("/ \ 0",' _ ', $ current_user-> user_email.' '$ _ FILES [' fișier '] [' nume ']);

Asta-i tot, noroc!

Cod