242 lines
12 KiB
PHP
Executable File
242 lines
12 KiB
PHP
Executable File
<?php
|
|
// -----------------------------------------------------
|
|
// Init
|
|
// -----------------------------------------------------
|
|
if (isset($debug[1]) && $debug[1] == '1') $debugMsg .= monDebug (1,['sys_get_temp_dir' => sys_get_temp_dir() ],'uploadGenerique.php');
|
|
if (isset($debug[4]) && $debug[4] == '1') $debugMsg .= monDebug (4,['print_r($_FILES)' => $_FILES ],'');
|
|
|
|
$uploadOk = 1;
|
|
$check='';
|
|
|
|
// -----------------------------------------------------
|
|
// Valeures par défaut
|
|
// -----------------------------------------------------
|
|
|
|
if (empty($targetExtension)) $targetExtension =['jpeg', 'jpg', 'png', 'gif', 'ico', 'svg'];
|
|
if (empty($targetSize)) $targetSize =3145728;
|
|
// $maxsize = " 2 097 152 2MB in octets/bytes
|
|
// 3 145 728 3Mb
|
|
// 4 194 304 4Mb
|
|
// 5 242 880 5Mb
|
|
// 6 291 456 6Mb
|
|
|
|
// -----------------------------------------------------
|
|
// Chemin + Nom du fichier cible
|
|
// -----------------------------------------------------
|
|
if (is_dir ($target_dir)) {
|
|
$target_file = $target_dir.basename($_FILES['fileToUpload']['name']);
|
|
if (isset($debug[1]) && $debug[1] == '1' ) {
|
|
monDebug (1,[
|
|
'fichier' => $_FILES["fileToUpload"]["name"],
|
|
'fichier_temp' => $_FILES["fileToUpload"]["tmp_name"],
|
|
'target_file' => $target_file,
|
|
'target_dir' => $target_dir
|
|
],'');
|
|
}
|
|
|
|
// -----------------------------------------------------
|
|
// Récup de l'extension
|
|
// -----------------------------------------------------
|
|
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
|
|
|
|
// -----------------------------------------------------
|
|
// Check if image file is a actual image or fake image sauf SVG
|
|
// -----------------------------------------------------
|
|
if ($imageFileType == "svg" ) {$upSvg=1;}
|
|
|
|
if (isset($_FILES["fileToUpload"]["tmp_name"]) && !empty($_FILES["fileToUpload"]["tmp_name"])) {
|
|
|
|
// -----------------------------------------------------
|
|
// Vérifier les dimensions
|
|
// -----------------------------------------------------
|
|
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
|
|
if ($check !== false) {
|
|
$uploadOk = 1;
|
|
// dimension
|
|
$largeur = $check[0]; // largeur de l'image
|
|
$hauteur = $check[1]; // hauteur de l'image
|
|
$type = $check[2]; // Type de l'image
|
|
$html = $check[3]; // info html de type width="468" height="60"
|
|
|
|
// fonctionne mais ce n'est pas une bonne idée de bloquer la hauteur
|
|
// if ($hauteur<300) {$uploadOk =0;$admMsg .= ' Hauteur < 300px.(' .$hauteur. ')'; $admMsgClass='ko';}
|
|
// if ($largeur<300) {$uploadOk =0;$admMsg .= ' Largeur < 300px.(' .$largeur. ')'; $admMsgClass='ko';}
|
|
|
|
|
|
// -----------------------------------------------------
|
|
// http://dev.petitchevalroux.net/linux/incrustation-image-linux.204.html
|
|
// http://dev.petitchevalroux.net/linux/redimensionner-lot-images-ligne-commande-linux.392.html
|
|
// -----------------------------------------------------
|
|
// Installation de GraphicsMagick
|
|
// Avant de commencer il faut bien entendu installer GraphicsMagick. Sous debian ou ubuntu il suffit d'installer le paquet graphicsmagick :
|
|
|
|
// root@home:~# zypper in GraphicsMagick
|
|
// Redimensionner une image
|
|
// Voici la ligne de commande que j'utilise le plus, elle permet de retailler l'image en 640 de large (le ratio auteur largeur est conservé) uniquement si l'image fait plus de 640 pixels de large (le >)
|
|
|
|
// root@home:~# gm mogrify +profile "*" -resize '640>' monimage.jpg
|
|
// L'option +profile "*" est un petit bonus qui permet de supprimer les métadonnées de l'image (Exif ...).
|
|
|
|
// GraphicsMagick propose une option équivalente à resize mais qui utilise un algorithme plus rapide, c'est l'option thumbnail qui permet la création de miniature. La ligne de commande devient :
|
|
|
|
// root@home:~# gm mogrify +profile "*" -thumbnail '640>' monimage.jpg
|
|
// Redimensionner un lot d'image
|
|
// Habituellement j'utilise xargs et find pour traiter des fichiers par lots (cf : Optimiser de jpeg) mais dans le cas du redimensionnement d'images, je me suis aperçu que j'avais des doubles traitements. Qu'à cela ne tienne, je me suis rappelé que find avait une option exec qui permet de lancer une commande sur les fichiers trouvés.
|
|
|
|
// Assez de blah blah voici donc la commande qui permet de retailler un lot d'image :
|
|
|
|
// root@home:~# find /chemin/vers/mon/lot/images/ -type f -name '*.jpg' -exec gm mogrify -resize '640>' {} \;
|
|
// Pour ceux qui les auraient manqués voici quelques articles que j'ai publié sur le traitement d'image en ligne de commande :
|
|
// -----------------------------------------------------
|
|
|
|
if (isset($debug[1]) && $debug[1] == '1' ) $debugMsg .= monDebug (1,[
|
|
'hauteur' => $hauteur,
|
|
'largeur' => $largeur,
|
|
'type' => $type,
|
|
'Pour memoire : type6' => 'BMP',
|
|
'html' => $html
|
|
],'');
|
|
}
|
|
else {
|
|
$admMsg .= "La taille de votre fichier ne convient pas. " .$check;
|
|
$uploadOk = 0;
|
|
$admMsgClass='ko';
|
|
}
|
|
|
|
// -----------------------------------------------------
|
|
// Autoriser les extensions prévues : rem si on copie colle le chemin de l'image et bouton validé, on passe ici sans download, hors le chemin peut etre valide. donc !empty($imageFileType) pour ne pas avoir d'erreur
|
|
// -----------------------------------------------------
|
|
if (!empty($imageFileType) & !in_array($imageFileType, $targetExtension)) {
|
|
$uploadOk = 0;
|
|
// $admMsg .="<br>not in array ".var_dump($targetExtension);
|
|
// $admMsg .="<br>not in array 2 ".var_dump($imageFileType);
|
|
$admMsgClass='ko';
|
|
$admMsg .="<br>Désolé, seulement les formats : ";
|
|
$c=count($targetExtension);
|
|
for($t=0;$t<$c; $t++) {
|
|
$admMsg .= '• ' .$targetExtension[$t]. ' ';
|
|
}
|
|
$admMsg .=" sont applicables. Vous avez choisi : " .$imageFileType;
|
|
}
|
|
else {
|
|
$uploadOk = 1;
|
|
}
|
|
|
|
// -----------------------------------------------------
|
|
// Vérifier la taille max : valeur du code doit etre < à php.ini
|
|
// -----------------------------------------------------
|
|
if ($_FILES["fileToUpload"]["size"] > $targetSize) {
|
|
// Pour mémoire :
|
|
// si taille dépasse le fichier php.ini (max_post, max_upload) la taille de .$_FILES["fileToUpload"]["tmp_name"] sera à zero car php n'aura rien fait.
|
|
// Si on veut faire bien : js (generique ) avant le post...voir aussi balise hidden : "MAX_FILE_SIZE"
|
|
$uploadOk = 0;
|
|
$admMsgClass='ko';
|
|
$admMsg .="Vous dépassez la taille autorisée : " .$targetSize. " octets. Votre fichier fait " .$_FILES["fileToUpload"]["size"] . " octets";
|
|
}
|
|
}
|
|
|
|
|
|
// -----------------------------------------------------
|
|
// Message erreur au cas ou, sinon copie
|
|
// -----------------------------------------------------
|
|
if ($uploadOk == 0) {$admMsg .= "Votre fichier n'a pas été chargé. ";}
|
|
else {
|
|
|
|
// -----------------------------------------------------
|
|
// créer le dossier cible si existe pas
|
|
// -----------------------------------------------------
|
|
if (!is_dir($target_dir)) {
|
|
$execute=mkdir($target_dir, 0775, true);
|
|
if (isset($debug[1]) && $debug[1] == '1' ) $debugMsg .='execute=' .$execute;
|
|
}
|
|
|
|
$execute=shell_exec('chown -R wsites:wsites ' .$target_dir. '');
|
|
if (isset($debug[1]) && $debug[1] == '1' ) { $debugMsg .= monDebug (1,['execute 1' => $execute]);}
|
|
|
|
// -----------------------------------------------------
|
|
// Mettre les droits sur le fichier uploadé
|
|
// -----------------------------------------------------
|
|
if (!empty($_FILES["fileToUpload"]["tmp_name"])) chmod($_FILES["fileToUpload"]["tmp_name"], 0775);
|
|
|
|
// -----------------------------------------------------
|
|
// Move du fichier
|
|
// -----------------------------------------------------
|
|
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
|
|
|
|
$execute=shell_exec('chown -R wsites:wsites ' .$target_file. '');
|
|
$execute=chmod($target_file, 0775);
|
|
|
|
if (isset($debug[1]) && $debug[1] == '1' ) { $debugMsg .= monDebug (1,['execute 2' => $execute]);}
|
|
|
|
// -----------------------------------------------------
|
|
// Message utilisateur
|
|
// -----------------------------------------------------
|
|
$admMsg .="Le fichier ".basename($_FILES["fileToUpload"]["name"]). " a été chargé.<br>";
|
|
|
|
// -----------------------------------------------------
|
|
// Mettre à jour la valeur pour la base de données, on n'est pas à la cible en profondeur, on corrige la profondeur, on la remettra dans les previews
|
|
// -----------------------------------------------------
|
|
if (isset($_SESSION['absolu'])) $absolu=$_SESSION['absolu']; else $absolu=0;
|
|
if (isset($debug[1]) && $debug[1] == '1' ) { $debugMsg .= monDebug (1,['absolu' => $absolu]);}
|
|
if ($absolu==1) {
|
|
if ($_SESSION['jeviensDeAdminIndex']==0) $test=str_replace("../", $_SESSION['prodServer']. '/',$target_file);
|
|
if ($_SESSION['jeviensDeAdminIndex']==1) $test=str_replace("../../", $_SESSION['prodServer']. '/',$target_file);
|
|
if ($_SESSION['jeviensDeAdminIndex']==2) $test=str_replace("../../../", $_SESSION['prodServer']. '/',$target_file);
|
|
|
|
// -----------------------------------------------------
|
|
// Si absolu = copier aussi le fichier sur le repertoire de prod correspondant : on remonte d'un cran encore
|
|
// -----------------------------------------------------
|
|
if ($_SESSION['jeviensDeAdminIndex']==0) $target_file_prod=str_replace('./', '../' .$_SESSION['siteDossierProd']. '/', $target_dir);
|
|
if ($_SESSION['jeviensDeAdminIndex']==1) $target_file_prod=str_replace('../../', '../../../' .$_SESSION['siteDossierProd']. '/', $target_dir);
|
|
if ($_SESSION['jeviensDeAdminIndex']==2) $target_file_prod=str_replace('../../../', '../../../../' .$_SESSION['siteDossierProd']. '/', $target_dir);
|
|
|
|
if (isset($debug[1]) && $debug[1] == '1' ) {
|
|
monDebug (1,[
|
|
'target_dir' => $target_dir,
|
|
'_SESSION[siteDossierProd]' => $_SESSION['siteDossierProd'],
|
|
'target_file' => $target_file,
|
|
'target_file_prod' => $target_file_prod],
|
|
'');
|
|
}
|
|
|
|
if (isset($debug[1]) && $debug[1] == '1' ) { $debugMsg .= monDebug (1, [ 'copy = '=> $target_file. ' ' .$target_file_prod.basename($_FILES["fileToUpload"]["name"]) ],'');}
|
|
$execute='';
|
|
$execute=shell_exec('cp ' .$target_file. ' ' .$target_file_prod.basename($_FILES["fileToUpload"]["name"]) );
|
|
if (isset($debug[1]) && $debug[1] == '1' ) {$admMsg .= ' <br> execute copy resultat => ' .$execute;}
|
|
}
|
|
else {
|
|
if ($_SESSION['jeviensDeAdminIndex']==0) $test= str_replace("../","./",$target_file);
|
|
if ($_SESSION['jeviensDeAdminIndex']==1) $test= str_replace("../../","./",$target_file);
|
|
if ($_SESSION['jeviensDeAdminIndex']==2) $test= str_replace("../../../","./",$target_file);
|
|
}
|
|
|
|
// $target_file=$test;
|
|
$theImage= $test;
|
|
if (isset($debug[1]) && $debug[1] == '1' ) { $debugMsg .= monDebug (1, [ 'image finale en base' => $test, '$target_file' => $target_file, '$_SESSION[jeviensDeAdminIndex]' => $_SESSION['jeviensDeAdminIndex'] ],'') ;}
|
|
|
|
// -----------------------------------------------------
|
|
// Pour creation de pages la variable theImage s''appelle theFichier, mais c\'est normal, car ca peut etre des mp3.., idem Notice
|
|
// Idem emails, la variable s''apelle imgMails
|
|
// Il vaut mieux garder les 3 variables pour ne pas tout changer et trop d''impacts, voir plus tard peut-être : une seule variable pour tout
|
|
|
|
// -----------------------------------------------------
|
|
$theFichier= $theImage;
|
|
$uploadOk = 1;
|
|
$admMsgClass='ok';
|
|
}
|
|
else {
|
|
if (!empty($_FILES["fileToUpload"]["tmp_name"])) $admMsg .= "Désolé, il y a eu une erreur en chargeant votre fichier.<br>";
|
|
$uploadOk = 0;
|
|
}
|
|
|
|
// -----------------------------------------------------
|
|
// On remet les droits
|
|
// -----------------------------------------------------
|
|
// je suis wsites, pas de sudo a valider
|
|
// -----------------------------------------------------
|
|
shell_exec('chmod -R 775' .$target_dir. '');
|
|
}
|
|
}
|
|
else
|
|
{$admMsg .= '<br>Le dossier cible n\'existe pas : ' .$target_dir. ''; $uploadOk = 0;}
|
|
?>
|