Meilleure approche pour le débogage rapide et efficace de fixation grande image fichiers échec de téléchargement

StackOverflow https://stackoverflow.com/questions/3966365

Question

Considérons une fonctionnalité de téléchargement d'images PHP normal (ne pas utiliser AJAX) et il se produit ce problème de grande image upload ne parfois - moins souvent sur un serveur de test et plus souvent sur un autre serveur de test. En supposant que le débogueur n'a pas encore commencé le débogage du problème et il n'y a pas de fichier / dossier problèmes d'autorisation, comment procéder?

Je suis sûr que j'ai file_uploads sur. Je ne veux pas mettre aveuglément des valeurs sûres ou augmenter les valeurs jusqu'à ce que cela fonctionne. Au fond, je veux que les valeurs soient exactement selon mes modules concernés. Je suis prêt à remplacer les paramètres dans mes modules concernés, si cela est la meilleure approche.

Selon liés au téléchargement de fichiers , ce sont tous les paramètres pertinents / connexes -
    * file_uploads
    * upload_max_filesize
    * max_input_time
    * memory_limit
    * max_execution_time
    * post_max_size

  1. Paramètres Trouver / Valeurs du script concernées -
    Pour que je puisse savoir lequel d'entre eux est / combien d'entre eux sont effectivement violés par mon script et provoquant l'échec, je dois trouver d'abord les valeurs correspondantes pour mon script. Comment trouver les valeurs suivantes pour mon script:

    • Total téléchargé taille des fichiers
    • Temps d'entrée
    • Utilisation de la mémoire
    • temps d'exécution de script
    • Publié la taille des données

    Quel outil (s) peut être utilisé pour la même chose. En utilisant le code PHP, je pense, je peux trouver quelques-unes:

    • le temps d'exécution de script -. La différence entre microtime(true) au début et à la fin du script
    • Total Uploaded taille du fichier - boucle Foreach sur $_FILES pour trouver la somme d'attribut ['size']

    Comment trouver le reste comme utilisation de la mémoire, le temps d'entrée, etc.?

  2. Où / Comment remplacer Enfin, quand j'ai trouvé le réglage ne respecte pas (s), suppose que je dois augmenter / valeurs de remplacement pour 2 des paramètres. Où appliquer la dérogation? Je suppose que ce n'est pas correct de définir memory_limit etc. pour tous les modules htaccess ou dans le script PHP. Au contraire, l'application uniquement dans le module concerné est mieux. Ai-je raison?

  3. Paramètres des modules moins exigeants En outre, pour d'autres modules, où beaucoup de ressources ne sont pas nécessaires, il est bon / sage de remplacer les paramètres pour les réduire, après avoir étudié attentivement les besoins en ressources des modules? Est-il réduire la consommation inutile de ressources? Si oui, que diriez-vous d'avoir 2 ou 3 combinaisons de ces paramètres (en fonction des exigences du projet, en les nommant script normale, lourd de téléchargement de fichier) et d'appeler une fonction unique pour charger une combinaison pour chaque module?

  4. Précautions memory_limit En ce qui concerne memory_limit il est mentionné ici que -

      

    Réglage une valeur trop élevée peut être très dangereux, car si plusieurs ajouts sont traités en même temps toute la mémoire disponible sera utilisée et d'autres scripts non apparentés qui consomment beaucoup de mémoire pourrait affecter l'ensemble du serveur ainsi.

Quelles sont les précautions générales à prendre à ce sujet?

Merci,
Sandeepan

Était-ce utile?

La solution

Quelques idées pour le débogage:

Pour les tests manuels, je préparerait une série d'images avec des dimensions différentes dont la taille nette (largeur x hauteur) augmente en petites étapes: 100 x 100, 100 x 200, 100 x 300 .... et les essayer. À un certain moment, ils pourraient commencer à défaut si le problème est la limite de mémoire. Vous pouvez activer le error_reporting() pour vous seul (en utilisant peut-être un cookie de débogage de quelque sorte) de sorte que vous voyez ce qui échoue exactement.

Si ce n'est pas une option, je mis en place un mécanisme de quelque sorte pour l'enregistrement à long terme qui stocke les dimensions de l'image dans un fichier journal ou d'une table avant le début de redimensionnement, ainsi que le contenu du tableau de $_FILES. A la fin réussie du script, ajoutez un « OK » pour cette entrée. De cette façon, vous pourrez en savoir plus sur les ajouts ont échoué, s'ils le font par au script (et ne manquent pas à l'avance en raison d'un délai d'inactivité).

  

En outre, pour d'autres modules, où beaucoup de ressources ne sont pas nécessaires, il est bon / sage de passer outre les réglages pour les réduire

Je pense que la réponse est toujours « non ». Pour autant que je sache, la limite de mémoire est la limite maximale de la mémoire qui peut être allouée, mais ce montant n'est pas réservé à chaque demande. Je ne l'ai jamais entendu parler de personne peaufinage la limite de mémoire de cette façon.

Toutefois, si certaines parties du système (par exemple l'image resizer) ont besoin d'une limite de mémoire extrêmement élevé, il peut être judicieux d'appliquer des paramètres de memory_limit spécifiques seulement pour eux, par exemple par de réglage .htaccess.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top