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