Vandaag zullen we een plug-in schrijven waarmee uw gebruikers hun bestanden naar u kunnen verzenden, naar uw Dropbox-account. Het kan nodig zijn voor verschillende doeleinden; Als u bijvoorbeeld een wedstrijd voor uw lezers indient, moeten ze u mogelijk enkele bestanden sturen die u wilt partitioneren op een unieke maplocatie in Dropbox. Kort gezegd, deze plug-in is voor het ontvangen van bestanden, die nog niet openbaar gemaakt moeten worden, die door u beoordeeld moeten worden.
U kunt de klaar-plugin downloaden via de knop Download Source. Nu gaan we onze plugin stap voor stap beschrijven. We zullen de Dropbox Uploader-klasse van Jaka Jancar gebruiken (onder MIT-licentie) voor het maken van onze plug-in.
We zullen deze plug-in bouwen met behulp van onze eigen hypothetische situatie uit de intro-paragraaf: Stel dat u een competitie host voor de "Best Desktop Screenshot" rond uw gebruikers. Elke geregistreerde sitegebruiker kan zijn / haar bureaublad screenshot naar u verzenden. Na een deadline zul je alles zien en dan publiceer je de winnaars. Laten we beginnen met het bouwen van onze plug-in!
Maak een map met de naam dbuploader in wp-content / plugins diretory. Maak een nieuw PHP-bestand met de naam DropboxUploader.php in het; Open het in je teksteditor en plak en bewaar deze code:
email = $ email; $ this-> wachtwoord = $ wachtwoord; public function setCaCertificateFile ($ file) $ this-> caCertSourceType = self :: CACERT_SOURCE_FILE; $ this-> caCertSource = $ bestand; public function setCaCertificateDir ($ dir) $ this-> caCertSourceType = self: CACERT_SOURCE_DIR; $ this-> caCertSource = $ dir; public function upload ($ filename, $ remoteDir = '/') if (! file_exists ($ filename) or! is_file ($ filename) or! is_readable ($ filename)) gooi nieuwe Exception ("File '$ filename' does does bestaat niet of is niet leesbaar. "); if (! is_string ($ remoteDir)) gooi nieuwe uitzondering ("Remote map moet een string zijn, is" .gettype ($ remoteDir). "instead."); if (! $ 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' =>'@'.$ bestandsnaam, 'dest' => $ remoteDir, 't' => $ token)); if (strpos ($ data, 'HTTP / 1.1 302 FOUND') === false) gooi nieuwe uitzondering ('Upload failed!'); beveiligde functie login () $ 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-> wachtwoord, ' t '=> $ token)); if (stripos ($ data, 'location: / home') === false) gooi nieuwe uitzondering ('Aanmelden mislukt.'); $ this-> loggedIn = true; beveiligd functie-verzoek ($ 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); breken; case self :: CACERT_SOURCE_DIR: curl_setopt ($ ch, CURLOPT_CAPATH, $ this-> caCertSource); breken; 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); // Stuur cookies $ rawCookies = array (); foreach ($ this-> cookies als $ k => $ v) $ rawCookies [] = "$ k = $ v"; $ rawCookies = imploderen (';', $ rawCookies); curl_setopt ($ ch, CURLOPT_COOKIE, $ rawCookies); $ data = curl_exec ($ ch); if ($ data === false) gooi nieuwe Exception ('Can not execute request:' .curl_error ($ ch)); // Bewaar ontvangen cookies preg_match_all ('/ Set-Cookie: ([^ =] +) = (. *?); / I', $ data, $ matches, PREG_SET_ORDER); foreach ($ matches als $ match) $ this-> cookies [$ match [1]] = $ match [2]; curl_close ($ ch); return $ data; beschermde functie extractToken ($ html, $ formAction) if (! preg_match ('/