2010-08-01 21 views
2

J'ai un webhosting qui donne maximum memory_limit de 80M (c'est-à-dire ini_set ("memory_limit", "80M");). J'utilise le téléchargement de photos qui utilise la fonction imagecreatefromjpeg(); Lorsque je télécharge de grandes images, il donne l'erreur "Erreur fatale: taille de mémoire autorisée de 83886080 octets épuisés" Quelle taille maximale (en octets) pour l'image que je peux restreindre aux utilisateurs? ou memory_limit dépend d'un autre facteur?memory_limit = 80M. Quelle est la taille d'image maximale pour imagecreateformjpeg()?

+1

On dirait que votre hébergement limite la mémoire à 8M, pas à 80 –

+0

Que voulez-vous faire avec l'image 'createfromjpeg()'? Il pourrait y avoir une solution efficace pour la mémoire. – MvanGeest

Répondre

2

La taille de la mémoire de 8388608 est de 8 mégaoctets, pas 80. Vous pouvez vérifier si vous pouvez toujours augmenter la valeur quelque part.

A part cela, la règle générale pour la manipulation de l'image est qu'il faudra au moins

image width x image height x 3 

octets de mémoire à charger ou à créer une image. (Un octet pour le rouge, un octet pour le vert, un octet pour le bleu, éventuellement un de plus pour la transparence alpha)

Selon cette règle, une image de 640 x 480 pixels nécessitera au moins 9,2 mégaoctets d'espace - sans compter les frais généraux et l'espace occupé par le script lui-même.

Il est impossible de déterminer une limite sur la taille du fichier JPG en octets car JPG est un format compressé avec des taux de compression variables. Vous devrez passer par la résolution d'image et définir une limite à cela.

Si vous n'avez pas beaucoup de mémoire disponible, vous pouvez rechercher des méthodes plus efficaces pour faire ce que vous voulez, par exemple. faire du carrelage (traiter une partie d'une image à la fois) ou, si votre fournisseur le permet, utiliser un outil externe tel que ImageMagick (qui consomme de la mémoire, mais en dehors de la limite de mémoire du script PHP).

+0

Salut Pekka, Merci pour la réponse et désolé j'ai écrit par erreur comme 8388608 c'est en fait 83886080 octets.Et quand j'ai essayé de télécharger 3200X2400 avec 3,5 Mo, il donne erreur. Quelle largeur maximale ou taille ou taille je peux restreindre pour le téléchargement pour éviter l'erreur? Merci à l'avance :-) –

+0

@Arun difficile à dire! L'image au format 3200 x 2400 convient parfaitement à 80 Mo. Il se peut que le script ne soit pas écrit efficacement et stocke toute l'image dans plusieurs variables. –

0

Votre script utilise probablement plus de mémoire que l'image elle-même. Essayer de déboguer votre consommation de mémoire.

Un moyen rapide et sale est d'utiliser memory_get_usage et memory_get_usagememory_get_peak_usage sur certains points dans votre code et en particulier dans une coutume error_handler et shutdown_function. Cela peut vous permettre de savoir quelles opérations exactes provoquent l'épuisement de la mémoire.