Bonjour,
J'ai suivie le Tuto Upload Drag and drop jQuery et j'ai voulu ajouter la possibilité d'uploader des dossier (compresser en zip obligatoire :) ) ou des fichiers.
J'ai donc crée une class PHP qui permet de de définir certaine variable tel que le chmod des fichier et dossier, les fichiers autorisé etc..
J'aurais aimer avoir de l'aide sur le code car en effet je connais le PHP mais pas tous les racourci :).
Je m'explique, je souhaiterai lors de la vérification d'une fonction la faire comme ceci :
[code]
if(!ma_fonction){
instructions .....
}
[/code]
Pour cela j'ai ajouter dans chaque fonction :
[code]
if(condition){
instructions...
return true;
}else{
return false;
}
[/code]
Je suis sur qu'il y a plus propre a écrit et c'est pourquoi je demande de l'aide pour ceci mais également sur certain fonctions php que je ne connait pas et qui remplacerai peut être d'autre que j'ai utilisée :)
J'aimerai également si possible avoir votre avis sur ce qui est bien et pas bien mais également une idée a rajouter a se plugin que je compte améliorer car les évènement Drag and Drop sont vraiment intéressant et je remercie Grafikart pour ce Tuto :).
Je précise également que je n'est pas encore mi les variables en privée ainsi que les getter setter mais il seront intégrer une fois finaliser :)
code PHP :
[code]
<?php
class dropFile{
var $chmodDir = 0775;
var $chmodFile = 0775;
var $permsDir = Array('uploadFolder', 'texte', 'image');
var $permsImg = Array('image/png', 'image/gif', 'image/jpeg');
var $permsFile = Array('application/zip');
var $uploadFolder = 'uploadFolder/';
var $uploadExtract = true;
var $convertToUTF8 = true;
var $error = null;
/**
return $obj objet contenant le nom et l'image uploader si il n'y a eu aucune erreur
**/
public function uploadImg($source,$header){
$obj = new stdClass();
$this->uploadFolder = isset($header['x-param-folder']) ? $header['x-param-folder'].'/' : $this->uploadFolder;
if (!$this->permissions($this->uploadFolder, $this->permsDir)) {
$this->error = $obj->error = 'Le dossier n\'existe pas';
return false;
}else{
//Si le dossier n'existe pas on le crée
if (!is_dir($this->uploadFolder && (!in_array(needle, haystack)))) {
umask(0000);
mkdir($this->uploadFolder, $this->chmodDir);
}
//Vérification des autorisations
if (!$this->permissions($header['x-file-type'],$this->permsImg)) {
return false;
}else{
if(isset($header['x-param-value'])){
unlink($this->uploadFolder.$header['x-param-value']);
}
$this->imageresize($source ,$this->uploadFolder.$header['x-file-name'],150,100,true);
$obj->name = $header['x-file-name'];
$obj->content = '<img src="'.$this->uploadFolder.$header['x-file-name'].'"/>';
return $obj;
}
}
}
/**
return $obj objet contenant le nom et le type du fichier uploader si il n'y a eu aucune erreur
**/
public function uploadFile($source, $header, $removeZip=false){
//Vérification de l'autorisation
if (!$this->permissions($header['x-file-type'],$this->permsFile)){
return false;
}else{
$this->uploadFolder = isset($header['x-param-folder']) ? $header['x-param-folder'].'/' : $this->uploadFolder;
if (!$this->permissions($this->uploadFolder, $this->permsDir)) {
$this->error = $obj->error = 'Le dossier n\'existe pas';
return false;
}else{
$obj = new stdClass();
file_put_contents($this->uploadFolder.$header['x-file-name'], $source);
//Extrait le fichier si celui-ci est un fichier zip et si on a autorisée l'extraction
if ($this->uploadExtract == true && $header['x-file-type'] == 'application/zip') {
//arrête la fonction si il y a eu une erreur dans l'extraction du fichier
if (!$this->extractZip($this->uploadFolder,$header['x-file-name'])) {
return false;
}else{
//Si la suppression du fichier zip est vrai alors on le supprime
if ($removeZip == true) {
unlink($this->uploadFolder.$header['x-file-name']);
}
//Si la convertion en UTF-8 à été autorisée
if ($this->convertToUTF8 == true){
$NameFile = explode(".", $header['x-file-name']);
//Si le fichier décompressé est un dossier on applique la récursivité
if (is_dir($this->uploadFolder.$NameFile[0].'/')) {
if (!$this->dirToUTF8($this->uploadFolder.$NameFile[0].'/')) {
$this->error = 'Un problème est survenue lors de la convertion en UTF-8 du dossier '.$NewFolder[0].'/';
return false;
}
}else{
//Sinon on convertie le fichier
if (!toUTF8($src, $this->chmodFile)){
$obj->error = 'Un problème est survenue lors de la convertion en UTF-8 du fichier '.$NewFolder[0];
return false;
}
}
}
$obj->name = $NameFile;
return $obj;
}
}else{
$obj->name = $header['x-file-name'];
return $obj;
}
}
}
}
/**
@param $permsType type d'upload à vérifier
**/
public function permissions($header,$permsType){
if(!in_array($header,$permsType)){
$this->error = 'Format non autorisé';
return false;
}else{
return true;
}
}
/**
@param $nameZip nom du fichier zip
**/
public function extractZip($folder,$nameZip){
$zip = new ZipArchive;
umask(0000);
chmod($folder.$nameZip, $this->chmodFile);
if ($zip->open($folder.$nameZip) === TRUE) {
$zip->extractTo($folder);
$zip->close();
unset($zip);
return true;
}else{
$this->error = 'Erreur lors de la décompression du fichier '.$nameZip;
return false;
}
}
/**
@param $dir_src dossier source à parcourir
**/
public function dirToUTF8($dir_src){
if (is_dir($dir_src)){
if ($dir = opendir($dir_src)) {
while (($file = readdir($dir)) !== false) {
if(is_dir($dir_src.$file) && $file != '..' && $file != '.'){
$this->dirToUTF8( $dir_src.$file.'/');
}elseif($file != '..' && $file != '.'){
if (!$this->toUTF8($dir_src.$file, $this->chmodFile)) {
return false;
}else{
return true;
}
}
}
closedir($dir);
}
return true;
}else{
$this->error("Le dossier que vous essayez de convertir n\'existe pas : ".$dir_src);
return false;
}
}
/**
@param $chmod modifie le chmod du fichier
**/
public function toUTF8($src, $chmod){
umask(0000);
chmod($src, $chmod);
$content = file_get_contents($src);
$convert_utf8 = utf8_encode($content);
if (!file_put_contents($src,$convert_utf8)) {
return false;
$this->error("Erreur lors de la convertion : ".$src);
}else{
return true;
}
}
/**
[/code]
Je n'est pas encor optimiser le code js :)
code Jquery :
[code]
$('.dropfile').dropfile({
clone : false,
complete: function(json){
console.log(json);
if (json.error) {
$('.alert').addClass('alert-error');
$('.alert h4').text('Erreur :').append(json.error);
$('.alert').hide().slideDown(500);
}else{
$('.alert').addClass('alert-success');
$('.alert h4').text('Succès : ').append(json.success);
$('.alert').hide().slideDown(500);
}
}
});
[/code]
le fichier php de l'utilisation de la class PHP :
[code]
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
header('content-type: application/json');
include('../../class/class_dropFile.php');
$source = file_get_contents('php://input');
$h = getallheaders();
$upload = new dropFile();
$result = $upload->uploadFile($source,$h,true);
if (!$result) {
echo json_encode($upload->error);
}else{
echo json_encode($result);
}
?>
[/code]
Je vous remercie d'avance de votre aide :)
WebMaster junior chez [url=http://www.123plantes.com]123plantes[/url]