Bonjour,
Dans un script j'utilise une méthode stockant des fichiers importants dans la mémoire temporaires. Plutôt que d'utiliser des variables en mémoire temporaire avec le risque de dépasser la limite de mémoire de php, j'utilise la ressource php://temp/ en spécifiant une taille de mémoire limite :
Ici j'ai choisi 1 GiBi ou 953 Mo environ selon les écritures.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ressource_memoire=fopen("php://temp/maxmemory:1000000000,"rb+");
Je pensais contourner la fameuse limite de mémoire imposée dans le php.ini de cette façon :
Après avoir fait un test en lecture ecriture d'un fichier de + de 100 Mo et une limite de mémoire dans php.ini à 512 Mo, lors de l'écriture d'un fichier de quelques 500 Mo environ dans $ressource_memoire, php s'arrête et indique que la limite de mémoire est dépassée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 fseek($ressource_memoire,$taille_memoire); //on se place à la fin de la mémoire fwrite($ressource_memoire,$donnees_brutes);// on enregistre le fichier par morceau
La question est donc simple est ce que la ressource php://temp est limitée par la valeur de memory_limit et donc qu'il faut impérativement que memory_limit>php://temp/maxmemory ? Sinon quelle est l'erreur car j'ai tout fait pour que le programme ne stocke pas des variables de plus de 10 Mo ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1000000000--256693184 //===> ici j'ai affiché en sortie du programme les variables : php://temp/maxmemory et le nombre d'octets effectivement inscrits dans $ressource_memoire. PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 262149056 bytes) in C:...\**.php on line 304 Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 262149056 bytes) in C:...\***.php on line 304
Partager