différences entre mermory limit et php://temp/maxmemory
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 :
Code:
$ressource_memoire=fopen("php://temp/maxmemory:1000000000,"rb+");
Ici j'ai choisi 1 GiBi ou 953 Mo environ selon les écritures.
Je pensais contourner la fameuse limite de mémoire imposée dans le php.ini de cette façon :
Code:
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 |
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:
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 |
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 ?