Documentation phpblobmysql.zip

C'est dans cette section uniquement que vous pouvez entrer en contact avec moi en postant votre question.
Attention : en raison d'un trop grand nombre de spams, vous devez vous enregistrer pour poster.
Shinigami Delroën

Documentation phpblobmysql.zip

Messagepar Shinigami Delroën » 07 juin 2007 17:05

Salut !

J'ai téléchargé ta doc sur le stockage d'images dans une base MySQL.

J'ai la version 1.1 de Juillet 2005. Dans le point 2, à la page 7, tu donne l'URL d'un benchmark se proposant de comparer les temps de chargement d'une image en fonction de la technique de stockage.

Le problème est que cette URL n'est plus valide. Je me demandais donc si je ne pourrais pas tout simplement faire un benchmark moi-même, mais je m'interroge sur les conditions à remplir pour que ce benchmark reflète effectivement la réalité (taille de l'image à utiliser, conditions pour que la base soit représentative, etc).

De ce fait, je me demandais si par hasard tu saurais me conseiller, ou pas, ou si tu n'en a rien à foutre...

En tout cas, à ce petit détail près, la doc est pas mal, mais un peu "à l'arrache" par endroits (codage malpropre/bourrin).

Bien cordialement,

Samuel

Bidouille
Webmestre
Messages : 502
Enregistré le : 21 mai 2007 16:08

Re: Documentation phpblobmysql.zip

Messagepar Bidouille » 08 juin 2007 13:29

Bonjour,

Shinigami Delroën a écrit :J'ai la version 1.1 de Juillet 2005. Dans le point 2, à la page 7, tu donne l'URL d'un benchmark [...]

Le problème est que cette URL n'est plus valide.

Depuis 2005, c'est un peu normal non ? Les machines et les logiciels évoluent.

Shinigami Delroën a écrit :De ce fait, je me demandais si par hasard tu saurais me conseiller, ou pas, ou si tu n'en a rien à foutre...

Le dernier terme est fort déplacé. Je vous conseille d'aller poster votre demande sur les excellents forums de Developpez.com.


Shinigami Delroën a écrit :En tout cas, à ce petit détail près, la doc est pas mal, mais un peu "à l'arrache" par endroits (codage malpropre/bourrin).

Merci de votre appréciation. Il me serait agréable de vous voir justifier ce que vous appelez code malpropre et bourrin.

A vous lire.

Shinigami Delroën

Re: Documentation phpblobmysql.zip

Messagepar Shinigami Delroën » 11 juin 2007 02:15

Bonjour,
Bidouille a écrit :
Shinigami Delroën a écrit :J'ai la version 1.1 de Juillet 2005. Dans le point 2, à la page 7, tu donne l'URL d'un benchmark [...]
Le problème est que cette URL n'est plus valide.
Depuis 2005, c'est un peu normal non ? Les machines et les logiciels évoluent.
Bien évidemment. Il n'y a point de reproche la-dessous, je cherchais simplement à cerner clairement mon problème. Ce que je n'ai pas tout à fait réussi, semble-t-il...

Bidouille a écrit :
Shinigami Delroën a écrit :De ce fait, je me demandais si par hasard tu saurais me conseiller, ou pas, ou si tu n'en a rien à foutre...
Le dernier terme est fort déplacé.
Veuillez m'excuser d'avoir employé ce terme, qui, j'en convient, est déplacé.
Sur le fond, cependant, cela venait plus ou moins en écho à la FAQ de cette partie du forum, que j'ai trouvée un peu sèche et qui m'a semblé avoir pour but plus ou moins avoué de décourager un maximum de questions (y compris celles qui ne sont pas traitées dans cette FAQ)

Bidouille a écrit : Je vous conseille d'aller poster votre demande sur les excellents forums de Developpez.com.
Merci pour le lien.


Bidouille a écrit :
Shinigami Delroën a écrit :En tout cas, à ce petit détail près, la doc est pas mal, mais un peu "à l'arrache" par endroits (codage malpropre/bourrin).

Merci de votre appréciation. Il me serait agréable de vous voir justifier ce que vous appelez code malpropre et bourrin.

Pour ce qui est des problèmes au niveau du code, j'ai eu toutes les peines du monde à stocker proprement une image dans une base, puis ensuite à l'afficher. Peut-être votre code fonctionne-t-il sur votre serveur, mais ce n'est pas le cas sur le mien. C'est ce qui me fait dire que ce code est malpropre.

Voici les points qu'il m'a fallu corriger :
addslashes modifie la chaîne, cependant, la fonction mysql_query supprime automatiquement ces modifications, mais pas complètement ! Il est imprudent de se reposer pleinement sur les fonctionnalités "gadgets" de MySQL, qui sont moins fiables que les fonctions PHP dédiées à une tâche bien précises.
J'ai donc tenté un stripslashes, qui malheureusement détruit la chaîne binaire dès lors que celle-ci contient par hasard la suite de bit correspondant au caractère \ (la chaîne est plus courte de 2-3% après stripslashes que avant addslashes...)
J'ai fini par trouver la solution, mais ce sont ces petits désagréments qui m'ont fait perdre le plus de temps, bien que ce ne soient pas de grosses erreurs de codage, mais plutôt des petites négligences qui en sont à l'origine.

En revanche, ce n'est rien à côté de l'affichage, pour lequel on peut vraiment parler de codage bourrin, puisque sous un en-tête MIME de type fichier image jpeg (par exemple), vous affichez une variable de type chaîne binaire ! Y'a des fonctions pour ça !
Il ne vous a pas effleuré que puisque vous partez d'un fichier dont vous extrayez une chaîne avec file_get_contents, il fallait "refaire le chemin en sens inverse" ?

Bidouille
Webmestre
Messages : 502
Enregistré le : 21 mai 2007 16:08

Messagepar Bidouille » 11 juin 2007 11:49

Shinigami Delroën a écrit :Sur le fond, cependant, cela venait plus ou moins en écho à la FAQ de cette partie du forum, que j'ai trouvée un peu sèche et qui m'a semblé avoir pour but plus ou moins avoué de décourager un maximum de questions

En effet car à une époque, je recevais plus de 50 questions par jour. Des questions dont la réponse pouvait être obtenue avec un minimum de recherche sur les forums que je cite.

Shinigami Delroën a écrit :Peut-être votre code fonctionne-t-il sur votre serveur, mais ce n'est pas le cas sur le mien. C'est ce qui me fait dire que ce code est malpropre.

Dans ce cas, ce n'est peut être pas le code mais tout simplement une différence de configuration. Dans le tuto, je précise ma plateforme. A vous d'être à l'identique pour être dans les mêmes conditions.

Shinigami Delroën a écrit :Voici les points qu'il m'a fallu corriger :
addslashes modifie la chaîne, cependant, la fonction mysql_query supprime automatiquement ces modifications, mais pas complètement ! Il est imprudent de se reposer pleinement sur les fonctionnalités "gadgets" de MySQL, qui sont moins fiables que les fonctions PHP dédiées à une tâche bien précises.

Les fonctions de MySQL sont également là pour alléger les temps de traitement. C'est une question d'équilibrage entre moteur web et SGBD.

Shinigami Delroën a écrit :bien que ce ne soient pas de grosses erreurs de codage, mais plutôt des petites négligences qui en sont à l'origine.

Il fallait trouver un compromis pour ce tuto qui devait rester très simple pour un public de débutants.

Shinigami Delroën a écrit :En revanche, ce n'est rien à côté de l'affichage, pour lequel on peut vraiment parler de codage bourrin, puisque sous un en-tête MIME de type fichier image jpeg (par exemple), vous affichez une variable de type chaîne binaire ! Y'a des fonctions pour ça !

Un fichier JPEG n'est pas une chaîne binaire pour vous ? Certes il existe d'autres fonctions. Je ne voulais que montrer comment afficher une image directement car c'est une demande récurente sur les forums.

Shinigami Delroën a écrit :Il ne vous a pas effleuré que puisque vous partez d'un fichier dont vous extrayez une chaîne avec file_get_contents, il fallait "refaire le chemin en sens inverse" ?

Ce tuto ne donne pas toutes les réponses mais met le pied à l'étrier. Il appartient à chacun d'aller ensuite plus loin et pourquoi pas de mettre en ligne ses connaissances pour une 2e partie de ce tuto.

Invité

Messagepar Invité » 11 juin 2007 16:59

Bidouille a écrit :
Shinigami Delroën a écrit :Peut-être votre code fonctionne-t-il sur votre serveur, mais ce n'est pas le cas sur le mien. C'est ce qui me fait dire que ce code est malpropre.

Dans ce cas, ce n'est peut être pas le code mais tout simplement une différence de configuration. Dans le tuto, je précise ma plateforme. A vous d'être à l'identique pour être dans les mêmes conditions.
Un code bien rédigé s'exécute sur n'importe quelle configuration. J'utilise un serveur LAMP, vous EasyPHP, votre code ne s'exécute pas chez moi, il est donc malpropre.

Bidouille a écrit :
Shinigami Delroën a écrit :Voici les points qu'il m'a fallu corriger :
addslashes modifie la chaîne, cependant, la fonction mysql_query supprime automatiquement ces modifications, mais pas complètement ! Il est imprudent de se reposer pleinement sur les fonctionnalités "gadgets" de MySQL, qui sont moins fiables que les fonctions PHP dédiées à une tâche bien précises.

Les fonctions de MySQL sont également là pour alléger les temps de traitement. C'est une question d'équilibrage entre moteur web et SGBD.
Tout à fait d'accord, cependant elles ne sont pas fiables à 100%, ce qui fait que votre code, qui est correctement interprété sur votre plate-forme, ne l'est pas sur la mienne.

Bidouille a écrit :
Shinigami Delroën a écrit :bien que ce ne soient pas de grosses erreurs de codage, mais plutôt des petites négligences qui en sont à l'origine.

Il fallait trouver un compromis pour ce tuto qui devait rester très simple pour un public de débutants.
Ajouter un trim ne rend pas un tuto inaccessible aux débutants...

Bidouille a écrit :
Shinigami Delroën a écrit :En revanche, ce n'est rien à côté de l'affichage, pour lequel on peut vraiment parler de codage bourrin, puisque sous un en-tête MIME de type fichier image jpeg (par exemple), vous affichez une variable de type chaîne binaire ! Y'a des fonctions pour ça !

Un fichier JPEG n'est pas une chaîne binaire pour vous ?
Pas dans ce cas. La fonction file_get_contents, comme son nom l'indique, récupère le contenu du fichier, pas le fichier lui-même. Le fait de lui mettre un en-tête fichier JPEG ne fait pas de la chaîne un fichier JPEG. Elle n'a pas la même nature. S'il se trouve que ça marche, tant mieux, mais c'est sans garantie, donc ce n'est pas "propre".

Bidouille a écrit :
Shinigami Delroën a écrit :Il ne vous a pas effleuré que puisque vous partez d'un fichier dont vous extrayez une chaîne avec file_get_contents, il fallait "refaire le chemin en sens inverse" ?

Ce tuto ne donne pas toutes les réponses mais met le pied à l'étrier. Il appartient à chacun d'aller ensuite plus loin et pourquoi pas de mettre en ligne ses connaissances pour une 2e partie de ce tuto.
En fait, vous distribuez un tuto incomplet/approximatif, à chacun ensuite de se débrouiller pour que ça marche...
Si je suis choqué de cette attitude, c'est parce que j'ai lu dans votre FAQ que vous vendez vos tuto. Pour ma part, je l'ai trouvé gratuitement, mais j'aurais trouvé tout à fait inacceptable que ce ce tuto soit incomplet si je l'avais acheté.
En revanche, si vous avez toujours distribué ce tuto gratuitement, il serait ingrat de vous jeter des pierres, et effectivement, il n'est nullement déplacé de distribuer des connaissances incomplètes s'il n'y a pas mieux ailleurs.

Bidouille
Webmestre
Messages : 502
Enregistré le : 21 mai 2007 16:08

Messagepar Bidouille » 12 juin 2007 17:48

Anonymous a écrit :En fait, vous distribuez un tuto incomplet/approximatif, à chacun ensuite de se débrouiller pour que ça marche...

Malpropre, incomplet, approximatif : plus de 10.000 lecteurs se sont "débrouillés" avec ce tuto sans employer cette terminologie.

Anonymous a écrit :Si je suis choqué de cette attitude, c'est parce que j'ai lu dans votre FAQ que vous vendez vos tuto. Pour ma part, je l'ai trouvé gratuitement, mais j'aurais trouvé tout à fait inacceptable que ce ce tuto soit incomplet si je l'avais acheté.

Ce qui n'est pas le cas puisqu'il est aussi gratuit sur ce site. Donc gardez-vous d'être choqué de quoi que ce soit.

Anonymous a écrit :En revanche, si vous avez toujours distribué ce tuto gratuitement, il serait ingrat de vous jeter des pierres, et effectivement, il n'est nullement déplacé de distribuer des connaissances incomplètes s'il n'y a pas mieux ailleurs.

Ceci conclura donc ce passionnant débat et j'attends avec impatience votre production de code propre, complet et précis où vous nous exposerez vos connaissances en programmation dont vous vous gargarisez à chaque ligne.

Shinigami Delroën

Messagepar Shinigami Delroën » 13 juin 2007 02:14

Bidouille a écrit :
Shinigami Delroën a écrit :En fait, vous distribuez un tuto incomplet/approximatif, à chacun ensuite de se débrouiller pour que ça marche...

Malpropre, incomplet, approximatif : plus de 10.000 lecteurs se sont "débrouillés" avec ce tuto sans employer cette terminologie.
[...]
Ceci conclura donc ce passionnant débat et j'attends avec impatience votre production de code propre, complet et précis où vous nous exposerez vos connaissances en programmation dont vous vous gargarisez à chaque ligne.
"débrouillé", voila une terminologie adaptée. Dans mon cas, il m'a fallu me débrouiller pour adapter ce code afin qu'il fonctionne sur ma configuration, et ce code que j'ai rédigé et dont je me "gargarise", j'ai la prétention de croire qu'il tournera sur n'importe quelle plate-forme "aux normes".

Cela dit, mon code n'est qu'une amélioration du votre, dont je suis prêt à vous faire part. Libre à vous ensuite de conserver ce qui vous plaira et/ou de l'ajouter à votre tuto. En revanche, je ne créerai pas un nouveau tuto puisqu'il serait indéniablement basé sur le vôtre, que je ne puis modifier et/ou réutiliser sans votre autorisation.

Bidouille a écrit :
Shinigami Delroën a écrit :Si je suis choqué de cette attitude, c'est parce que j'ai lu dans votre FAQ que vous vendez vos tuto. Pour ma part, je l'ai trouvé gratuitement, mais j'aurais trouvé tout à fait inacceptable que ce ce tuto soit incomplet si je l'avais acheté.

Ce qui n'est pas le cas puisqu'il est aussi gratuit sur ce site. Donc gardez-vous d'être choqué de quoi que ce soit.
Soit. C'est tout à votre honneur et je vous en remercie, car ce tuto, même s'il me paraît incomplet, m'a indéniablement servi pour commencer.
Je vous prie donc d'accepter mes excuses pour les termes peu agréables que j'ai pu employer précédemment.
Veuillez également excuser mon manque de précision délibéré, motivé par l'inquiétude que mon code soit réutilisé à des fins commerciales.

Voici donc les améliorations concrètes que j'apporterai à votre code :
- Remplacer addslashes par mysql_real_escape_char (qui protège plus sûrement que addslashes, qui n'est à l'origine pas prévu pour MySQL)
- Effectuer une fonction trim sur la chaîne binaire en sortie de la base (trim enlève les espaces en début et fin de chaîne ; c'est exactement le problème que j'ai rencontré)
- remplacer echo $var_chaine_binaire par imagejpeg(imagecreatefromstring($var_chaine_binaire)), afin de respecter les types de variables (imagecreatefromstring agit sur une chaîne binaire, imagejpeg agit sur une ressource image et renvoie un fichier image)

À mon sens, il n'est pas particulièrement lourd pour des débutants d'assimiler ces quelques concepts (étant moi-même débutant quand j'ai été confronté à ces problèmes), mais ce tuto reste le vôtre, aussi n'appartient-t-il qu'à vous d'en juger.

Bien cordialement,

Delroën

Bidouille
Webmestre
Messages : 502
Enregistré le : 21 mai 2007 16:08

Messagepar Bidouille » 13 juin 2007 09:23

Shinigami Delroën a écrit :Voici donc les améliorations concrètes que j'apporterai à votre code

Merci de rendre ces précisions disponibles pour tout le monde. J'emets à mon tour des réserves sur votre code.

Il aurait été également utile de préciser les versions de votre plateforme afin qu'il n'y ait pas encore de nouvelles ambiguïtés soulevées par d'autres pour la compréhension de celui-ci.

Remplacer addslashes par mysql_real_escape_char

Certes mais cette fonction n'est apparue qu'avec PHP 4.3.0. Ce qui fonctionne chez vous, risque de poser problème chez d'autres.

Effectuer une fonction trim sur la chaîne binaire en sortie de la base

A priori je ne vois pas pourquoi des espaces seraient ajoutés dans le processus de stockage de la chaîne dans MySQL.

remplacer echo $var_chaine_binaire par imagejpeg(remplacer echo $var_chaine_binaire par imagejpeg(imagecreatefromstring($var_chaine_binaire))($var_chaine_binaire))

Le problème de imagecreatefromstring c'est sa consommation excessive de RAM sur de grosses images. Cela risque de ne pas fonctionner sur de petits serveurs dont la limite mémoire est souvent paramétrée sur 8 Mo par défaut.

Shinigami Delroën

Messagepar Shinigami Delroën » 13 juin 2007 10:16

Bidouille a écrit :
Shinigami Delroën a écrit :Voici donc les améliorations concrètes que j'apporterai à votre code

Merci de rendre ces précisions disponibles pour tout le monde. J'emets à mon tour des réserves sur votre code.
Je vous en prie.

Bidouille a écrit :Il aurait été également utile de préciser les versions de votre plateforme afin qu'il n'y ait pas encore de nouvelles ambiguïtés soulevées par d'autres pour la compréhension de celui-ci.
Je ne suis pas sûr d'avoir bien compris, mais voici la configuration de mon serveur :
- noyau linux 2.6.20-16
- Apache 2.2.3
- MySQL Ver 14.12 Distrib 5.0.38
- PHP 5.2.1

Bidouille a écrit :
Shinigami Delroën a écrit :Remplacer addslashes par mysql_real_escape_char

Certes mais cette fonction n'est apparue qu'avec PHP 4.3.0. Ce qui fonctionne chez vous, risque de poser problème chez d'autres.
PHP 4.3.0 est sorti le 27 décembre 2002, c'est à dire il y a 4 ans et demi.

Bidouille a écrit :
Shinigami Delroën a écrit :remplacer echo $var_chaine_binaire par imagejpeg(imagecreatefromstring($var_chaine_binaire))

Le problème de imagecreatefromstring c'est sa consommation excessive de RAM sur de grosses images. Cela risque de ne pas fonctionner sur de petits serveurs dont la limite mémoire est souvent paramétrée sur 8 Mo par défaut.
Comme vous le disiez dans votre premier post "Les machines et les logiciels évoluent." Je pense en particulier à PHP 4.3.0.
Concernant le problème de mémoire, pour l'instant mon site est auto-hébergé, aussi je ne souffre pas de ce problème, mais je ferais attention à ce détail si je loue un jour un hébergement. Je ne sais pas comment je peux surveiller l'occupation mémoire du serveur pour une fonction précise (cela dit je m'en rendrait probablement compte si je fais un bench sur l'efficacité des différentes techniques)

Bidouille a écrit :
Shinigami Delroën a écrit :Effectuer une fonction trim sur la chaîne binaire en sortie de la base

A priori je ne vois pas pourquoi des espaces seraient ajoutés dans le processus de stockage de la chaîne dans MySQL.
Moi non plus. C'est pourtant ce qui se passe parfois ! Je n'ai trouvé aucune mention à ce sujet dans la doc de MySQL, aussi je ne sais pas trop s'il faut considérer ça comme un bug, mais il faut savoir que ça arrive.


Retourner vers « Contactez le webmestre / support area »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 103 invités