Maison  >  Article  >  développement back-end  >  L'exécution du programme expire lors du traitement d'images par lots en PHP

L'exécution du programme expire lors du traitement d'images par lots en PHP

小云云
小云云original
2018-02-22 11:04:532113parcourir

La raison de ce traitement par lots est que le projet lui-même a été externalisé à plusieurs reprises, et que les images sont stockées partout, et que les vignettes et les images de taille uniforme ne sont pas spécifiquement générées. Cette fois, les images sont extraites du mixage original. données d'image et de texte, stockez-les dans le répertoire spécifié, recadrez la taille et générez la vignette correspondante, puis stockez le résultat dans la base de données.

Dans le processus de traitement du programme par lots, il est inévitable que le temps d'exécution du programme soit trop long, entraînant des erreurs 504, etc. Ajuster la configuration du serveur n'est en fait pas une bonne solution. , cela affectera l'environnement de production...

Mais je suis paresseux et je ne veux pas effectuer de traitement de demande de pagination pour les images extraites une fois^_^

Au fait, le plus les données extraites des images traitées en une seule fois sont de 3000~

Entrons dans le vif du sujet. Notre objectif principal est de prolonger le temps d'exécution du programme autant que possible afin que toutes les images qui doivent être capturées soient capturées, et le le traitement est terminé et écrit dans la base de données.

Notre environnement est PHP5.6 basé sur nginx Tout d'abord, il faut faire attention au code. La première consiste à mettre set_time_limit(0), ce qui évite d'ajuster php.ini. des éléments de base tels que la mémoire maximale, etc. Il doit encore être ajusté, et je ne le présenterai pas ici ; un autre doit définir CURLOPT_TIMEOUT de curl (j'utilise CURL pour capturer des images distantes étant donné que les images se trouvent sur plusieurs serveurs connus). , il doit y avoir un problème s'ils ne peuvent pas être capturés après un délai d'attente. Abandonnez simplement, si vous ne définissez pas ce délai d'attente, le moteur d'exécution continuera à vous signaler les erreurs.

La prochaine étape est le serveur. La première est le temps d'exécution du programme nginx :

fastcgi_connect_timeout 900s;

fastcgi_send_timeout 900s;

fastcgi_read_timeout 900s;

Cette configuration est dans nginx.conf. Si vous modifiez la valeur, ne l'ajoutez pas. Réglez l'heure en fonction de votre propre situation et redémarrez le service après ajustement.

MYSQL signalera également une erreur de délai d'attente. Modifiez my.ini pour ajouter ou modifier la configuration :

wait_timeout=2880000

interactive_timeout=2880000

max_allowed_packet. =100M

Après l'ajustement, redémarrez MySQL pour prendre effet. Après les paramètres ci-dessus, diverses situations d'erreurs de délai d'attente ont été pratiquement éliminées. Mon programme a fonctionné pendant 2 jours et 3 nuits, collectant et générant un total de 86 Go. images.

Je tiens à souligner encore une fois que cette opération n'est pas très recommandée, surtout dans un environnement de production, elle posera de nombreux problèmes. Le plus important est de restaurer les paramètres ci-dessus après avoir terminé la tâche batch~

Recommandations associées :

Résumé des problèmes liés au traitement d'image dans les mini-programmes WeChat

(Avancé) Classes communes de traitement d'image PHP

Introduction à l'utilisation des paramètres phpThumb dans la classe de traitement d'image PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn