Envoyer des fichiers vers Dropbox en PHP
ShareLaTeX est gratuit et libre, malheureusement pour nous, ces créateurs ont décidé de garder certaines options payantes. Il faut bien que chacun gagne ça vie. Donc pas de Dropbox.
Ca peut être assez génant si on veut garder une copie des données.
Heureusement, j’ai trouvé une class PHP sur Github qui permet d’envoyer des fichiers sur sont compte Dropbox!!! Le projet Github: DropboxUploader.
On récupère le code de la class à inclure à cette adresse: https://github.com/jakajancar/DropboxUploader/blob/master/DropboxUploader.php
Donc pour l’utiliser, on a juste à l’inclure au code php:
require 'DropboxUploader.php';
Ensuite on démarre la class:
$uploader = new DropboxUploader('adresse_mail@gmail.com', 'mot_de_passe');
Avant de continuer, il faut voir qu’elle projet ShareLaTeX on veut sauvegarder. Pour cela il faut récupérer la suite de caractères dans l’url, chez moi c’est: `5431885d10e76b041626ffd6`.
Il faut ensute le compiler pour générer les fichiers .tex et tous le reste…
Ensuite si vous avez bien installé ShareLaTeX dans /opt vous devriez avoir un path comme cesi:
$path = '/opt/sharelatex/data/compiles/5431885d10e76b041626ffd6/';
On peut maintenant lister les fichiers du projet:
$scandir = scandir($path); unset($scandir[0],$scandir[1]); // On supprime . et ..
Ce qui donne toute une liste de fichier .tex, .pdf, les log si on les affiche…
Pour envoyer les fichier il suffit juste de mettre:
$uploader->upload($path.$le_fichier, '/path/sur/dropbox');
Sauf que nous on veut envoyer plusieurs fichiers, on va donc faire une boucle.
Le code complet:
// La fonction qui affiche la taille des fichiers: function taille_fichier($nom_fichier) { $nom_fichier = filesize($nom_fichier); $t_unites = array('octets', 'Ko', 'Mo', 'Go', 'To'); $i = 0; $nombre_a_afficher = 0; while($nom_fichier >= 1) { $nombre_a_afficher = $nom_fichier; $nom_fichier /= 1024; $i++; } if(!$i) $i=1; $d = explode(".", $nombre_a_afficher); if($d[0] != $nombre_a_afficher) { $nombre_a_afficher = number_format($nombre_a_afficher, 2, ",", " "); } return $nombre_a_afficher." ".$t_unites[$i-1]; } //---- require 'DropboxUploader.php'; // La class $path = '/opt/sharelatex/data/compiles/5431885d10e76b041626ffd6/'; // Le path vers le projet //---- @$scandir = scandir($path); // On liste les fichiers du projet unset($scandir[0],$scandir[1]); // On onlève . et .. //---- if(is_array($scandir)) // Si on a une liste de fichier, on obtient un array { $uploader = new DropboxUploader('adresse_mail@gmail.com', 'mot_de_passe'); // On se connecte a Dropbox echo 'L\'envoi des fichiers peut-être long s’ils sont volumineux<hr>'; foreach ( $scandir as $key => $value) // On boucle sur les fichiers { echo 'Envoie vers Dropbox du fichier `<i>'.$value.'</i>` ('.taille_fichier($path.$value).')<br>'; // On affiche le nom du fichier qu'on envoi et ça taille $uploader->upload($path.$value, '/Path/vers/Dropbox/'); // Le fichier est envoyé } echo '<span style="color: green">Tous les fichiers ont été envoyés vers Dropbox!</span>'; echo '<script>setTimeout(function() { window.close(); }, 1000);</script>'; // Code JS qui ferme la Popup } else { echo 'Aucun fichier trouvé<br>'; }
Nos fichiers sont maintnenant en sécurité sur Dropbox. Vous pouvez bien sûr adapter ce tuto pour envoyer d’autre fichier que vos projet ShareLaTeX sur Dropbox^^.
Pour gagner du temps, il est possible comme on la vu dans tuto précédants e’ajouter un code JS dans un marque page pour faire divers action:
On va donc mettre le code JS avec le lien de la page qui envoie les fichier sur Dropbox ce qui va ouvir une popup:
javascript:javascript:(function(){window.open('http://domaine.fr/adresse_du_script/','_blank','menubar=no,height=390,width=600,toolbar=no,scrollbars=yes,status=no,dialog=1');})();
Maintenant à chaque fois qu’on voudra envoyé nos fichiers sur Dropbox, il suffira juste de clique sur ce marque page.
Pour rappelle: Installer Sharelatex sur son serveur
Tous les codes sont testés et sont fonctionnels, si il arrive qu'un de ces codes ne fonctionne pas chez vous, merci de me le signaler.
Is it possible to get an english translation from this? This sounds extremely interesting to me. Thanks a lot!
Il vaut mieux utiliser ça: http://blog.simonbhb.fr/2014/07/24/telecharger-une-video-youtube-en-ligne-de-commande/
PS: je ne pourrais pas traduire, je suis nul en anglais