Bon, j'ai refait la class Pictures pour corriger quelques bugs, elle semble maintenant au point.
Concernant la classe sql, elle n'est momentanément plus présente sur le wiki car je suis en train de la refaire de manière simplifiée.
salut,
j'ai jamais eu besoin d'utiliser une classe pour les photos (enfin de traiter des photos tout court), mais elle m'a l'air intéressante
j'aurais quelques remarques:
la taille max d'une photo est de 800x600 => la vignette sera au max = 120x90
le nom des répertoires par défaut n'est pas vérifié (si les repertoires n'existent pas)
makeThumb n'est pas utilisable en dehors de la classe (imageInfos ne serait pas défini)
voilà une petite contribution
ah oui, j'allais oublié, par curiosité, l'anglais c'est par habitude, ou c'est un choix délibéré?
Alors, réponses en vrac:
- les dimensions données ne correspondent pas car une copie de l'image originelle, sans redimmensionnement, est aussi effectuée, cette image peut donc être utilisée comme source.
- le nom des répertoire est bien vérifié: j'appelle la fonction Makedir() qui a pour but de vérifier leur existence et de les créer si besoin est. J'aurais pu l'intégrer dans la classe mais j'ai préféré scinder.
- en fait, tu veux dire si on ne fait pas d'upload d'image. C'est vrai et c'est une erreur de ma part, je suis parti sur les fonctionnalités de base, à savoir que la classe n'était utilisée que pour envoyer des images, ce sera vite corrigé.
Et l'anglais, c'est les deux

par défaut, je commente mon code en anglais (ce qui est plus pratique pour le diffuser) de même que mes variables sont toujours en anglais, ça permet de garder une cohérence vu que les mots-clé du code sont en anglais.
pour les répertoires, ce que je voulais dire, c'est que tu vérifies les noms passé au constructeur qui lui même appelle setImagedir(), mais si les paramètres d'initialisation sont vides:
if (!empty($imageDir)) {
$this->setImageDir('imageDir',$imageDir);
}
setImageDir() ne sera pas appelé et le répértoire par défaut non créé
mais bon ca dépend de ce que tu voyais comme fonctionnement... les répertoires par défaut sont peut etre toujours valables.
oui, la classe instancie des variables (var $imageDir = ), donc si on ne passe pas par setImageDir(), c'est cette variable qui est prise en compte.
C'est l'intérêt de définir des variables dans les classes.
... j'ai du raté quelque chose
"var $imageDir", j'ai saisi, mais le répertoire "/images/", il est crée quand?
La méthode setImagedir() appelle la fonction Makedir() qui se charge de la vérification et, si besoin est, de la création.
Méthode setImagedir
<?
/**
* Method to assign directory and create it if needed
* @param string $type
* @param string $dir
* @see MakeDir()
*/
function setImagedir($type, $dir) {
if (MakeDir($dir)) {
$this->{$type} = $dir;
} else {
$this->error[] = 'Error creating '.$dir;
}
}
?>
Fonction Makedir
<?
/**
* Function to create recursive path
*
* @param string $path
*/
function MakeDir($path) {
$curpath = '';
$subpaths = explode("/", $path);
foreach ($subpaths as $pathname) {
$curpath .= "/".$pathname;
if (!is_dir($curpath)) {
if (!mkdir($curpath, 0777)) {
return false;
}
}
}
return $curpath;
}
?>
bon, je vais pas insister, mon dernier post à ce sujet
<?php
$photos = new Pictures;
/* à ce niveau, si j'ai bien compris, /images n'est pas créé
* Pictures::setImagedir() n'est pas appelée
* supposant je récupère depuis une autre page le fichier
*/
$photos->uploadImage ($_FILES['photo']);
/* la je devrais avoir l'erreur:
* Error moving file xxx to yyy
*/
?>
PS: le message d'erreur affiche le vrai nom de l'image et non celui retravaillé, mais c'est peut etre voulu.
Je suis entièrement d'accord: ma classe est actuellement faite pour traiter les fichiers uploadés (elle est appelé sur un boucle qui traite les $_FILES), elle doit donc se mettre en erreur dans ton fonctionnement.
Ce point sera très vite corrigé, c'est promis.
Concernant le message d'erreur qui renvoit le nom de l'image originale, c'est normal et voulu: si l'upload échoue, et comme je traite plusieurs images envoyées, je signale l'erreur sur l'image d'origine (dont je connais le nom) et pas sur l'image de destination.
Bon, gros boulot en perspective pour rendre cette classe plus "passe-partout", mais le forum est là pour ça.
Par contre, je pense garder en externe la fonction de gestion des répertoires, tout simplement parce que je pense ensuite créer une classe de gestion des répertoires, mais si tu penses que ce serait plus judicieux que la classe Pictures traite tout, dis le moi et on avisera.
P.S.: les autres peuvent participer, ne serait-ce que sur les discussions de principe
Par contre, je pense garder en externe la fonction de gestion des répertoires, tout simplement parce que je pense ensuite créer une classe de gestion des répertoires, mais si tu penses que ce serait plus judicieux que la classe Pictures traite tout, dis le moi et on avisera.
Pour la modularité, créer une classe de gestion des répertoires autonome me semble tout à fait pertinent, vu qu'elle pourra être utile dans bien d'autres applications. Je ne vois donc pas du tout quelle raison pourrait faire que ce soit la classe Pictures qui traite tout.