2010-03-18 4 views

Répondre

3

Généralement vous devriez optimiser votre requête/execute(), par exemple n'utilisez pas SELECT * FROM ou n'importe quel ORM peut aussi créer des problèmes de mémoire.

Solution définir la taille de mémoire plus élevée:

ini_set ("memory_limit", "5M");

Le 5M définit la limite à 5 mégaoctets. Si cela ne fonctionne pas, essayez de définir la valeur dans php.ini.

Cheers.

3

Utilisez-vous "SELECT *" dans la requête? Si oui, et que vous récupérez un TON de lignes, PHP n'a pas assez de mémoire à allouer à tous les champs.

Vous pouvez augmenter la limite de mémoire de PHP par:

ini_set('memory_limit', '32M'); 
1

Sans plus de détails, il est difficile d'être sûr de ce que votre problème est; Toutefois, cela est courant lorsque vous essayez de lire dans les résultats d'une requête avec plusieurs enregistrements.

PHP a un memory_size_limit (défini dans php.ini) qui définit un maximum sur la quantité de mémoire que PHP peut utiliser pour gérer votre script. Si vous essayez de lire dans un grand nombre d'enregistrements et que vous le stockez dans un tableau, PHP risque de manquer de mémoire. Une chose que vous pouvez faire est d'augmenter la limite de taille de la mémoire, disons de 2 mégaoctets (2M) à 32M.

Comme d'autres l'ont mentionné, vous pouvez également utiliser ini_set('memory_limit', '32M') ou similaire, si vous avez accès à le faire sur votre hôte. Mais indépendamment du fait que vous soyez autorisé à éditer votre fichier php.ini, vous devriez vraiment chercher un moyen plus efficace de récupérer et de stocker vos données. Envisagez de simplifier votre requête, en limitant les résultats de votre requête, ou en utilisant simplement quelque chose comme while ($row = $db->fetch_row) pour gérer une ligne de résultat à la fois.

0

Si vous utilisez PHP 5.3 avec mysqlnd, sachez que l'utilisation de la mémoire de "MySQL" compte maintenant comme l'utilisation de la mémoire de PHP. Auparavant, la mémoire utilisée par libmysql ne serait pas comptabilisée dans memory_get_usage().

Nous avons changé beaucoup de nos requêtes lourdes pour utiliser unbuffered queries, ce qui réduit l'utilisation de la mémoire.

Questions connexes