I dag skal vi skrive et plugin som lar brukerne sende sine filer til deg, til Dropbox-kontoen din. Det kan være nødvendig for flere formål; Hvis du for eksempel gir en konkurranse til leserne dine, kan de kanskje sende deg noen filer du vil partisjonere på, på en unik mappeplass i Dropbox. Kort sagt, dette pluginet er for å motta filer, som ikke må publiseres enda, som må vurderes av deg.
Du kan laste ned klar plugin via Download Source-knappen. Nå skal vi beskrive vår plugin trinnvis. Vi bruker Jaka Jancars Dropbox Uploader-klasse (under MIT-lisens) for å lage vårt plugin.
Vi vil bygge dette pluginet ved hjelp av vår egen hypotetiske situasjon fra intro-avsnittet. Anta at du er vert for en konkurranse om "Best Desktop Screenshot" rundt brukerne. Hver registrert bruker kan sende skjermbilde til deg. Etter en frist, vil du se alt og da vil du publisere vinnerne. Så la oss begynne å bygge vårt plugin!
Opprett en mappe som heter dbuploader i wp-innhold / tillegg diretory. Opprett en ny PHP-fil kalt DropboxUploader.php inni det; Åpne den i tekstredigeringsprogrammet og lim inn og lagre denne koden:
e-post = $ email; $ dette-> passord = $ passord; offentlig funksjon setCaCertificateFile ($ file) $ this-> caCertSourceType = selv :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ file; offentlig funksjon setCaCertificateDir ($ dir) $ this-> caCertSourceType = selv :: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir; offentlig funksjon opplasting ($ filnavn, $ remoteDir = '/') hvis (! file_exists ($ filnavn) eller! is_fil ($ filnavn) eller! is_readable ($ filnavn)) kaste nye unntak ikke eksisterer eller er ikke lesbar. "); hvis (! is_string ($ remoteDir)) kaste ny unntak ("Fjern katalogen må være en streng, er" .gettype ($ remoteDir). "i stedet."); hvis (! $ 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' =>'@'.$ filnavn, 'dest' => $ remoteDir, 't' => $ token)); hvis (strpos ($ data, 'HTTP / 1.1 302 FUNDET') === falsk) kaste ny unntak ('Upload mislyktes!'); beskyttet funksjon logg inn () $ data = $ this-> forespørsel ('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' => $ dette-> passord, ' t '=> $ token)); hvis (stripos ($ data, 'location: / home') === false) kaste ny unntak ('Logg inn mislykket.'); $ this-> loggedIn = true; beskyttet funksjonsforespørsel ($ 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); bytt ($ this-> caCertSourceType) tilfelle selv :: CACERT_SOURCE_FILE: curl_setopt ($ ch, CURLOPT_CAINFO, $ this-> caCertSource); gå i stykker; tilfelle selv :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); gå i stykker; curl_setopt ($ ch, CURLOPT_HEADER, 1); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); hvis ($ post) curl_setopt ($ ch, CURLOPT_POST, $ post); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData); // Send 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); hvis ($ data === false) kaste ny unntak ('Kan ikke utføre forespørsel:' .curl_error ($ ch)); // Store mottatte informasjonskapsler preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matches, PREG_SET_ORDER); foreach ($ matcher som $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); returner $ data; beskyttet funksjon extractToken ($ html, $ formAction) if (! preg_match ('/