Oggi scriveremo un plugin che consente agli utenti di inviare i loro file a te, al tuo account Dropbox. Potrebbe essere necessario per diversi scopi; Ad esempio, se offri un concorso per i tuoi lettori, potrebbe essere necessario inviarti alcuni file che vuoi partizionare su una cartella unica in Dropbox. In breve, questo plugin serve per ricevere i file, che non devono essere ancora resi pubblici, che devono essere esaminati dall'utente.
È possibile scaricare il plug-in pronto tramite il pulsante Scarica sorgente. Ora descriveremo il nostro plugin passo dopo passo. Utilizzeremo la classe Dropbox Uploader di Jaka Jancar (sotto la licenza MIT) per creare il nostro plugin.
Costruiremo questo plug-in usando la nostra situazione ipotetica dal paragrafo introduttivo: supponiamo che tu stia ospitando una competizione per il "Miglior Screenshot del desktop" intorno ai tuoi utenti. Ogni utente del sito registrato può inviarti il suo screenshot sul desktop. Dopo una scadenza, guarderai tutti e poi pubblicherai i vincitori. Quindi iniziamo a costruire il nostro plugin!
Crea una cartella chiamata dbuploader nel wp-content / plugins diretory. Crea un nuovo file PHP chiamato DropboxUploader.php dentro; Aprilo nel tuo editor di testo e incolla e salva questo codice:
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; upload di funzioni pubbliche ($ filename, $ remoteDir = '/') if (! file_exists ($ nomefile) o! is_file ($ nomefile) o! is_readable ($ nomefile)) lanciare una nuova eccezione ("File '$ nomefile' fa non esiste o non è leggibile. "); if (! is_string ($ remoteDir)) lancia una nuova eccezione ("La directory remota deve essere una stringa, è" .gettype ($ remoteDir). "invece."); se (! $ 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 ('plain' => 'yes', 'file' =>'@'. filename nome file, 'dest' => $ remoteDir, 't' => $ token)); if (strpos ($ data, 'HTTP / 1.1 302 FOUND') === false) lancia una nuova eccezione ('Upload failed!'); login funzione protetta () $ 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) lancia una nuova Exception ('Login fallito.'); $ this-> loggedIn = true; richiesta di funzione protetta ($ 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); rompere; case self :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); rompere; 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); // Invia cookie $ rawCookies = array (); foreach ($ this-> cookie come $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = implode (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ data = curl_exec ($ ch); if ($ data === false) lancia la nuova Exception ('Can not execute request:' .curl_error ($ ch)); // Memorizza i cookie ricevuti preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matches, PREG_SET_ORDER); foreach ($ corrisponde a $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); restituire $ dati; funzione protetta extractToken ($ html, $ formAction) if (! preg_match ('/