Eenvoudige plug-in waarmee gebruikers bestanden in uw Dropbox-map kunnen uploaden

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.


Voor we beginnen

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!


Stap 1 Eerste bestand maken

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 ('/
] * '. preg_quote ($ formAction,' / ').' [^>] *>. *? (] * name = "t" [^>] * value = "(. *?)" [^>] *>). *?<\/form>/ is ', $ html, $ overeenkomsten) || ! isset ($ komt overeen met [2])) gooit een nieuwe uitzondering ("Can not extract token! (form action = $ formAction)"); return $ matches [2];

Stap 2 Het plugin-bestand bouwen

Maak een hoofd plugin bestand genaamd dbuploader.php in dezelfde map; Open het in je editor en plak en bewaar deze code daar:

  $ size_limit) gooi een nieuwe uitzondering ('Bestandsgrootte is te groot of het bestandstype wordt niet ondersteund.'); $ tmpDir = uniqid ('/ tmp / DropboxUploader-'); if (! mkdir ($ tmpDir)) gooi nieuwe Exception ('Can not create temporary directory!'); if ($ _FILES ['file'] ['name'] === "") gooi nieuwe uitzondering ('Bestandsnaam niet geleverd door de browser.'); global $ current_user; get_currentuserinfo (); $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email .'_ '. $ _ FILES [' file '] [' name ']); if (! move_uploaded_file ($ _ FILES ['file'] ['tmp_name'], $ tmpFile)) gooi nieuwe uitzondering ('Kan het geüploade bestand niet hernoemen!'); // Voer hier de inloggegevens van je Dropbox-account in $ uploader = nieuwe DropboxUploader ($ dropbox_email, $ dropbox_password); $ uploader-> upload ($ tmpFile, $ _POST ['dest']); terug 'Bestand met succes geüpload. Dank je!';  vangst (uitzondering $ e) ga terug 'Fout: ' . htmlspecialchars ($ e-> getMessage ()). '';  // Opschonen als (isset ($ tmpFile) && file_exists ($ tmpFile)) ontkoppelen ($ tmpFile); if (isset ($ tmpDir) && file_exists ($ tmpDir)) rmdir ($ tmpDir);  else retourneer ' 

Dropbox Uploader Demo



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

Stap 3 De plug-in voltooien

creëren config.php bestand in je plugin-map, plak dan deze code daar:

 

Bewerk vervolgens deze code: stel uw e-mailadres, wachtwoord, dropbox-map, bestandsgroottelimiet, ondersteunde bestandstypen in en sla deze vervolgens op.


Enkele suggesties:

Suggestie 1:

Als u het beschikbaar wilt maken voor alle gebruikers, niet alleen voor ingelogde gebruikers, kunt u de code bewerken, deze verwijderen ...

 if (is_user_logged_in ()) add_shortcode ('dbouploader', 'shortcoder');

... voorwaarde van de plug-in. In plaats daarvan kunt u Recaptcha integreren met uw plug-in.

Suggestie 2:

U kunt ook de naam van de geüploade bestanden opmaken. Bewerk deze regel gewoon:

 $ tmpFile = $ tmpDir. '/'. str_replace ("/ \ 0", '_', $ current_user-> user_email .'_ '. $ _ FILES [' file '] [' name ']);

Dat is alles, veel succes!