2009-06-23 5 views
0

Je travaille sur un script PHP (5.2.6) qui migre plusieurs millions de lignes de base de données MySQL (5.0.45) vers un autre format dans un autre tableau tout en conservant (beaucoup) données en mémoire pour les calculs incrémentiels. Les données sont calculées de manière incrémentielle. (en blocs d'environ 1000 lignes)Le script de mise à jour s'arrête au hasard

Le script s'arrête de façon inattendue dans des points aléatoires sans message d'erreur. Ma question est comment puis-je savoir quelle est la raison pour laquelle le script s'arrête. (indisponibilité de la mémoire? Timeout par MySQL etc ...)

J'ai set_time_limit (0); donc ce n'est pas le timeout PHP.

+0

Vous obtenez de bonnes suggestions. Assurez-vous que vous ne courez pas en mode sans échec, à partir de la page docs set_time_limit(): "Cette fonction n'a aucun effet lorsque PHP s'exécute en mode sans échec, il n'y a pas d'autre solution que de désactiver le mode sans échec ou de changer le limite dans le php.ini. " http://php.net/set_time_limit – artlung

+0

Merci à tous. la solution consistait à ajouter ini_set ('memory_limit', '200M'); C'était en effet un problème de mémoire. – Nir

Répondre

2

voir le fichier journal, est probablement la mémoire

vous devez ajouter plus de mémoire dans php.ini à memory_limit paramètre

1

Vous pouvez essayer tourner le niveau de rapport d'erreur (dans php.ini) très haut, donc il se plaint de plus de choses. Ma première supposition aurait été que vous atteigniez votre limite de temps d'exécution ou de la limite de la mémoire et le script a été arrêté, mais vous avez couvert cela.

+0

set_time_limit couvre la limite de temps d'exécution, mais pas la limite de mémoire. Il est possible que la limite de mémoire soit atteinte. – MaxVT

1
  • Vérifiez votre fichier journal PHP.
  • Allumez toutes les erreurs de déclaration
    • error_reporting(E_ALL | E_STRICT);
1

Avez-vous essayé de courir le PHP à partir de la ligne de commande plutôt que via un navigateur web? Peut-être que le serveur a quelque chose qui le fait tomber une fois qu'il atteint un certain usage de la mémoire?

En général, les opérations en masse ne doivent pas être effectuées via un serveur Web, elles risquent de les faire échouer.

0

Merci à tous pour votre aide (j'ai voté pour les réponses pertinentes). Le problème était la mémoire et le réglage ini_set ('memory_limit', '200M'); résolu (c'est un script d'une fois)