Bonjour à toutes et tous,
Je rencontre un souci avec un site que j'héberge.
Je m'explique: j'ai créé, dans l'administration, une gestion d'images (pour que l'administrateur puisse choisir les images qu'il veut voir présentes dans un slider).
J'ai donc un fichier PHP, qui contient mon formulaire d'envoi:
Code PHP:
include '../lib/includes.php';
/**
* SAUVEGARDER un SLIDER
**/
if(isset($_POST['slug'])){
checkCsrf();
$slug = $_POST['slug'];
if(preg_match('/^[a-z\-0-9]+$/', $slug)){
$name = $db->quote($_POST['name']);
$slug = $db->quote($_POST['slug']);
$page_id = $db->quote($_POST['page_id']);
if(isset($_GET['id'])){
$id = $db->quote($_GET['id']);
$update = $db->query("UPDATE sliders SET name=$name, slug=$slug, page_id=$page_id WHERE id=$id");
}else{
$db->query("INSERT INTO sliders SET name=$name, page_id=$page_id, slug=$slug");
}
setFlash('Le slider a bien été ajouté');
/**
* ENVOI DES IMAGES
**/
$slider_id = $db->quote($_GET['id']);
$files = $_FILES['images'];
$images = array();
include '../lib/image.php';
foreach ($files['tmp_name'] as $k => $v) {
$image = array(
'name' => $files['name'][$k],
'tmp_name' => $files['tmp_name'][$k]
);
$extension = pathinfo($image['name'], PATHINFO_EXTENSION);
if (in_array($extension, array('jpg', 'png'))) {
$db->query("INSERT INTO images SET slider_id=$slider_id");
$image_id = $db->lastInsertId();
$image_name = $image_id . '.' . $extension;
move_uploaded_file($image['tmp_name'], IMAGES . '/sliders/' . $image_name);
// Redimensionnement des images
resizeImage(IMAGES . '/sliders/' . $image_name, 680, 390) . $image_name = $db->quote($image_name);
$db->query("UPDATE images SET name=$image_name WHERE id = $image_id");
}
}
header('Location:slider.php');
die();
}else{
setFlash('Le slug n\'est pas valide', 'danger');
}
}
/**
* VOIR UN SLIDER
**/
if(isset($_GET['id'])){
$id = $db->quote($_GET['id']);
$select = $db->query("SELECT * FROM sliders, posts WHERE sliders.id=$id");
if($select->rowCount() == 0){
setFlash("Il n'y a pas de slider avec cet ID", 'danger');
header('Location:slider.php');
die();
}
$_POST = $select->fetch();
}
/**
* SUPPRESSION D'UNE IMAGE
**/
if(isset($_GET['delete_image'])){
checkCsrf();
$id = $db->quote($_GET['delete_image']);
$select = $db->query("SELECT name, slider_id FROM images WHERE id=$id");
$image = $select->fetch();
$images=glob(IMAGES . '/works/' . pathinfo($image['name'], PATHINFO_FILENAME) . '_*x*.*');
if(is_array($images)){
foreach($images as $v){
unlink($v);
}
}
unlink(IMAGES . '/sliders/' . $image['name']);
$db->query("DELETE FROM images WHERE id=$id");
setFlash("L'image a bien été supprimée");
header('Location:slider_edit.php?id=' . $image['slider_id']);
die();
}
/**
* RECUPERER LA LISTE DES PAGES (sur quelle page se trouve le slider?)
**/
$select = $db->query("SELECT id, name, type FROM posts WHERE type='page' ORDER by id ASC");
$pages = $select->fetchAll();
$pages_list = array();
foreach($pages as $page){
$pages_list[$page['id']] = $page['name'];
}
/**
* RECUPERER LES IMAGES
**/
if(isset($_GET['id'])){
$slider_id = $db->quote($_GET['id']);
$select = $db->query("SELECT id, name, slider_id FROM images WHERE slider_id=$slider_id");
$images = $select->fetchAll();
}else{
$images = array();
}
include '../partials/admin_header.php';
?>
Editer un slider
(); ?>
= ob_get_clean(); ?>
include '../partials/admin_footer.php'; ?>
Ensuite, j'ai le fichier image.php, qui permet de renommer et de redimensionner l'image:
Code PHP:
function resizedName($file, $width, $height){
$info = pathinfo($file);
$return = '';
if($info['dirname'] != '.'){
$return .= $info['dirname'] . '/';
}
$return .= $info['filename'] . "_$width". "x$height." . $info['extension'];
return $return;
}
function resizeImage($file, $width, $height){
# We find the right file
$pathinfo = pathinfo(trim($file, '/'));
$output = $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '_' . $width . 'x' . $height . '.' . $pathinfo['extension'];
# Setting defaults and meta
$info = getimagesize($file);
list($width_old, $height_old) = $info;
# Create image ressource
switch ( $info[2] ) {
case IMAGETYPE_GIF: $image = imagecreatefromgif($file); break;
case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($file); break;
case IMAGETYPE_PNG: $image = imagecreatefrompng($file); break;
default: return false;
}
# We find the right ratio to resize the image before cropping
$heightRatio = $height_old / $height;
$widthRatio = $width_old / $width;
$optimalRatio = $widthRatio;
if ($heightRatio < $widthRatio) {
$optimalRatio = $heightRatio;
}
$height_crop = ($height_old / $optimalRatio);
$width_crop = ($width_old / $optimalRatio);
# The two image ressources needed (image resized with the good aspect ratio, and the one with the exact good dimensions)
$image_crop = imagecreatetruecolor( $width_crop, $height_crop );
$image_resized = imagecreatetruecolor($width, $height);
# This is the resizing/resampling/transparency-preserving magic
if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
$transparency = imagecolortransparent($image);
if ($transparency >= 0) {
$transparent_color = imagecolorsforindex($image, $trnprt_indx);
$transparency = imagecolorallocate($image_crop, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
imagefill($image_crop, 0, 0, $transparency);
imagecolortransparent($image_crop, $transparency);
imagefill($image_resized, 0, 0, $transparency);
imagecolortransparent($image_resized, $transparency);
}elseif ($info[2] == IMAGETYPE_PNG) {
imagealphablending($image_crop, false);
imagealphablending($image_resized, false);
$color = imagecolorallocatealpha($image_crop, 0, 0, 0, 127);
imagefill($image_crop, 0, 0, $color);
imagesavealpha($image_crop, true);
imagefill($image_resized, 0, 0, $color);
imagesavealpha($image_resized, true);
}
}
imagecopyresampled($image_crop, $image, 0, 0, 0, 0, $width_crop, $height_crop, $width_old, $height_old);
imagecopyresampled($image_resized, $image_crop, 0, 0, ($width_crop - $width) / 2, ($height_crop - $height) / 2, $width, $height, $width, $height);
# Writing image according to type to the output destination and image quality
switch ( $info[2] ) {
case IMAGETYPE_GIF: imagegif($image_resized, $output, 80); break;
case IMAGETYPE_JPEG: imagejpeg($image_resized, $output, 80); break;
case IMAGETYPE_PNG: imagepng($image_resized, $output, 9); break;
default: return false;
}
return true;
}
?>
En local, cela fonctionne bien: dans le dossier slider, mon image de base s'enregistre comme cela: nom_image.jpg
Ensuite, un deuxième fichier est enregistré: nom_image_680x390.jpg.
Mais une fois le site hébergé chez OVH, j'ai un souci: mon nom_image.jpg est bien crée dans le dossier slider, mais pas le fichier nom_image_680x390.jpg
Je n'ai pas de message d'erreur, et mon code est exactement identique en local/chez OVH.
J'aimerai comprendre pourquoi cela arrive, et surtout comment régler le problème.
Si quelqu'un par ici pouvait m'aider, ça serait bien cool car cela fait maintenant plus d'une semaine que j'ai ce souci, et je ne trouve pas d'aide.
D'avance merci pour votre aide