WTF Memory Error Annormal

Messages postés
67
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
14 septembre 2019
-
Bonjour, j'ai une erreur qui ne devrait pas s'afficher, car la mémoire utilisé est inférieure à la mémoire maximale :
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 106496 bytes) in C:\wamp64\www\db_upload\download.php on line 7
Pourquoi cela m'arrive t-il ?
Merci d'avance.


C'est un programme qui permet de télécharger des énormes fichier séparés en plusieurs blob dans une base de données sql :
<?php
if(isset($_GET['file']))
{
    $file_to_download = $_GET['file'];
    $dbh = new PDO('mysql:host=localhost;dbname=db0001', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $reponse = $dbh->prepare("select data, mime from `files-v2` where name=?");
    $reponse->execute(array($file_to_download));
    //$mime = $reponse->fetch()['mime'];
    header('Content-type: application/octet-stream');
    while($data = $reponse->fetch()['data'])
    {
        echo $data;
    }
}
header('Location: index.php')
?>


Les "blobs" font 100Ko
Afficher la suite 

1 réponse

Messages postés
14571
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 octobre 2019
179
0
Merci
De base on évite de mettre les fichiers dans la BDD, on préfère les enregistrer sur le disque du serveur et faire un lien vers eux.
Cela permet d'éviter de surcharger la base de données.

Quelle est la taille des données que tu veux afficher ?
UltraBot
Messages postés
67
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
14 septembre 2019
-
Pourtant j'ai changé la RAM de 8M à 100M, et ça m'affiche "Fatal error: Allowed memory size of 104857600 bytes exhausted (tried to allocate 106496 bytes) in C:\wamp64\www\db_upload\download.php on line 7".
Ce n'est pas normal qu'il y ait encore exactement la même quantité de RAM EN TROP avec le MÊME fichier
Reivax962
Messages postés
3486
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
22 octobre 2019
915 -
Pourquoi ? Tu dis que tes fichiers sont découpés par blocs de 100Ko... Soit à peu de choses près les 106496 octets qu'il réclame... Quand il a besoin de mémoire, c'est pour prendre cette taille-là qui correspond au besoin de charger un bout de fichier supplémentaire. C'est au contraire parfaitement logique !
UltraBot
Messages postés
67
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
14 septembre 2019
-
La RAM est réglé sur 100M. Ce n'est pas du tout logique que 100KO dépasse 100M...
Reivax962
Messages postés
3486
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
22 octobre 2019
915 -
Ce que je veux dire, c'est que Php réclame de la RAM au fur et à mesure des besoins.
Quand il va chercher un nouveau fichier dans ta base, il a besoin de 106496 octets, soit le poids du fichier (tous tes fichiers font la même taille, tu nous as dit), plus les quelques variables supplémentaires que tu utilises.
À un moment, tu arrives à un niveau de RAM très proche de 100 Mo. Par exemple, 99,95 Mo.
Là, Php va chercher un nouveau fichier en base. Il réclame donc 106496 octets supplémentaire. On lui répond « Niet ! 99.95 Mo + 106496 o, ça dépasse le max autorisé ! »
D'où le message d'erreur, qui dit « J'ai voulu réclamer 106496 octets de plus, on me les a refusés »
UltraBot
Messages postés
67
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
14 septembre 2019
-
L'erreur est à la ligne 7.
Commenter la réponse de NHenry