2009-10-12 3 views
0

J'ai un script qui obtient les données d'image binaires brutes via une requête url. Il prend ensuite les données et les met dans mysql.Problèmes de chargement de données en bloc dans mysql en utilisant php

Assez simple non? Eh bien, j'insère quelques 8 000 jpeg 600x400 de bonne taille et, pour une raison étrange, certaines images sont coupées. Peut-être que la partie de mon script qui itère à travers chaque image doit aller vite?

Lorsque je fais une requête directe à l'adresse URL, je peux voir toutes les données d'image brutes, mais de mon côté, les données sont coupées en bas de la ligne.

Toutes les idées pourquoi?

+0

Quel type de blob utilisez-vous pour stocker l'image? – txyoji

+0

juste blob avec l'attribut binaire – Mickey

Répondre

1

Y a-t-il quelque chose dans la chaîne qui traite les données binaires comme une chaîne, en particulier une chaîne à terminaison nulle de style C? Cela pourrait entraîner une coupure au premier octet nul ('\0').

+0

je veux dire quoi d'autre pourrais-je le faire sans utiliser une chaîne? – Mickey

+0

mais à part ça, je pense que vous pourriez être sur quelque chose ... – Mickey

0

Avez-vous essayé d'appeler simplement votre script qui récupère l'image binaire et la vide. Si vous voyez l'image correctement, alors sa partie ne tire pas, pourrait être quelque chose à voir avec l'insertion.

+0

$ this-> query ("insérer dans les images (db, pid, raw) valeurs ('". $ S. "', '". $ Valid_pid . "',.". mysql_real_escape_string ($ new_image). "')"); Voilà comment je l'insère – Mickey

+0

avez-vous essayé add_slashes? – Darkerstar

+0

en plus de, à l'intérieur ou à l'extérieur de mon "mysql_real_escape_string()", ou quoi? et quelle serait la différence s'il y en avait? – Mickey

0

Définissez-vous correctement les en-têtes?

-à-dire:

header('Content-Length: '.strlen($imagedata)); 
header('Content-Type: image/png'); 
... 
+0

est la longueur du contenu nécessaire? – Mickey

0

Un type de chaîne serait certainement pas être l'optimum pour stocker des images dans un DB.

En fait, j'ai vu plusieurs recommandations que l'image devrait aller dans un dossier quelque part dans votre système de fichiers et la base de données contient uniquement le chemin d'accès adresse/fichier.

This est un lien vers une page sur l'insertion d'images.

Il contient la suggestion au sujet de la filepath et qu'un blob mieux si type_données les images doivent aller dans la base de données.

Si c'est un blob, alors le traiter comme une chaîne ne fonctionnera pas.

+0

Ok, je ne suis pas sûr de ce que vous entendez par chaîne. Si vous faites référence à une chaîne PHP, ou à une chaîne MySQL, si c'est la dernière, je n'ai jamais entendu parler de ça. Les images doivent aller dans la base de données, j'utilise blob, et il est réglé sur binaire. Se pourrait-il que mon script itère à travers la boucle pour accélérer, la partie qui fait la requête http pour les données et l'insère dans la base de données? – Mickey

+0

Ok, donc le type de données MySQL 'string' serait appelé VARCHAR ou CHAR, mais tout ce que cela signifie est une série de caractères. Dans la plupart des langages de programmation, et les autres réponses, cela s'appellerait une chaîne. Comme l'a dit John Kugelman, traiter les données binaires comme une chaîne peut causer des problèmes. Depuis sa réponse, vous avez commenté que vous utilisez un blob. C'est bien, mais je pensais que la suggestion de John était bonne à l'époque et je l'ai mise à jour. Maintenant, il semble que la réponse se trouve ailleurs. Je ne blâmerais pas votre boucle parce que je ne l'ai pas vu. – pavium

0

Si vous faites des demandes répétées à la même URL, l'image finit par charger?

Si cela indique un problème de réseau. La prise en charge des gros paquets est activée dans votre noyau (en supposant linux) qui ne fonctionne pas correctement pour beaucoup de clients Windows. J'ai vu un problème similaire avec de grandes bibliothèques javascript (1 + Mo) servies à partir d'une machine Linux.

http://en.wikipedia.org/wiki/TCP_window_scale_option

http://support.microsoft.com/kb/314053

+0

Il charge le même indépendamment du nombre de fois que vous le regardez, ou ctrl + f5 l'enfer, lol. Croyez-moi, je suis paresseux, j'ai déjà essayé. – Mickey

Questions connexes