OVH Community, votre nouvel espace communautaire.

souci envoi de fichier image: fonctionne en local mais bug chez OVH


pl.lamballais
09/06/2014, 20h50
Juste un détail pour ceux qui sont sur Mac et penseraient que ma réponse était fausse: sous "Panther" (10.3), l'option de formatage disque HSFX a été ajoutée, permettant la gestion des fichiers avec différenciation majuscules-minuscules. Par défaut, l'utilitaire disque propose le formatage "non sensible à la casse" mais on peut néanmoins choisir un "Mac OS étendu sensible à la casse journalisé" et même une option avec chiffrage.

Mais en général, on est pas "sensible" à la casse.

A++
FL

Gaston_Phone
08/06/2014, 23h04
@ pl.lamballais, tu as raison pour "cette différence n'est pas entre Windows et OVH mais entre quasi tous les systèmes et UNIX.".

Mon souci était de séparer Windows et Unix et pour cela lui montrer, dans son cas, où se trouvaient l'un et l'autre.

pl.lamballais
08/06/2014, 22h57
Pour ajouter un détail à la bonne remarque de Gaston-Phone, cette différence n'est pas entre Windows et OVH mais entre quasi tous les systèmes et UNIX. Je suis sur Mac et la même chose se vérifie facilement: sur le bureau, crée un dossier nommé "TOTO", Ensuite essaye de créer un dossier nommé "toto". Tu verras que le système (que ce soit Windows ou Mac OSX) ne t'autorise pas à créer ce dossier, et indique que le nom est déjà pris.

Amitiés
FL

Gaston_Phone
13/05/2014, 17h53
Attention :
  • En local sous Windows les Majuscules et les minuscules -> Même caractère
  • Chez OVH en Unix : les Majuscules et les minuscules -> Caractères différents

pl.lamballais
13/05/2014, 17h50
Je serais tenté de commencer par vérifier les configurations. Un coup de phpinfo() en local, idem sur OVH, un coup d'imprimante et tu compares, ligne à ligne. Souvent on pense avec la même config en local et en ligne alors qu'il y a de petites différences (version de GD par exemple?)

Amitiés
FL

Gaston_Phone
14/02/2014, 07h36
@ caema, à quelle ligne de ton script se produit ton erreur ?

Utilises-tu des liens/adresses avec des références relatives ?

tuxxos
13/02/2014, 23h54
Salut caema ,

Quels sont les droits des fichiers sur le dossiers en question ? Est-ce que tes scripts ont les droits d'écrire sur les dossiers ?

caema
10/02/2014, 16h36
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_name680390) . $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


 

    
        
            
                Nom du slider
                ('name'); ?>
            

            
                    URL de la réalisation
                    ('slug'); ?>
                

            
                Page sur laquelle apparait le slider:
                ('page_id'$pages_list); ?>
            

 
            foreach ($images as $k => $image): ?>
                


                    ?>img/sliders/['name']; ?>
                         width="100">
                    ['id']; ?>&(); ?>" class="btn btn-danger" 
                       onclick="return confirm('Etes-vous certain de vouloir supprimer cette image? ?');">Supprimer
                


            endforeach ?>
 
            
                
                
            

            


                Ajouter une image
                (Taille max. par fichier : 10MO )
            


                (); ?>
            Enregistrer
        

    

 
(); ?>

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_crop00$transparency);
            
imagecolortransparent($image_crop$transparency);
            
imagefill($image_resized00$transparency);
            
imagecolortransparent($image_resized$transparency);
        }elseif (
$info[2] == IMAGETYPE_PNG) {
            
imagealphablending($image_cropfalse);
            
imagealphablending($image_resizedfalse);
            
$color imagecolorallocatealpha($image_crop000127);
            
imagefill($image_crop00$color);
            
imagesavealpha($image_croptrue);
            
imagefill($image_resized00$color);
            
imagesavealpha($image_resizedtrue);
        }
    }
 
    
imagecopyresampled($image_crop$image0000$width_crop$height_crop$width_old$height_old);
    
imagecopyresampled($image_resized$image_crop00, ($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$output80);    break;
      case 
IMAGETYPE_JPEG:  imagejpeg($image_resized$output80);   break;
      case 
IMAGETYPE_PNG:   imagepng($image_resized$output9);    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