Limites de mémoire sur les gros téléchargements PHP

J’ai une application. cela vous permet de télécharger plusieurs fichiers à la fois via ajax. Il est conçu pour les gros fichiers, mais une fois qu’il atteint 2 Go, j’atteins les erreurs suivantes:

[Fri Feb 01 11:22:56 2013] [error] [client xxxx] PHP Fatal error: Out of memory (allocated 2331770880) (sortinged to allocate 1165449891 bytes) in Unknown on line 0, referer: ... 

Dans mon php.ini, j’ai ces configs:

 post_max_size = 53687091200M upload_max_filesize = 53687091200M max_input_time = -1 memory_limit = -1 max_execution_time -1 max_file_uploads = 20 

Pour autant que je sache, cela devrait être suffisant pour gérer des téléchargements de 3 Go. Mais sur presque chaque essai, je reçois ces erreurs. J’ai parlé avec le soutien de mon VPS et ils ont dit que tout semblait bien et devrait pouvoir le gérer.

J’ai un nginx reverse proxy setup qui a aidé un peu, mais pas assez. Est-ce que je manque quelque chose?

Existe-t-il un moyen de supprimer le chargement de HTTP avec PHP? J’ai testé des applications Java et elles ont fonctionné à merveille, mais (malheureusement) j’ai besoin de conserver l’interface utilisateur.

Si vous téléchargez des fichiers très volumineux, vous pouvez les “proxy” avant de les transmettre à PHP. Mon expérience est que les threads PHP de longue durée peuvent bombarder de manière inattendue, et que PHP peut parfois avoir des problèmes avec une allocation de mémoire importante.

Jetez un coup d’œil au module de progression du téléchargement de nginx , qui mettra le fichier en mémoire tampon avant de le transmettre au serveur en amont (PHP, dans ce cas) avec l’avantage supplémentaire de fournir un mécanisme de surveillance et de rapport.

Si vous rencontrez toujours des problèmes, vous pouvez supprimer complètement PHP (en ce qui concerne la gestion du téléchargement) en utilisant le module de téléchargement ; il suffit de vider le fichier directement à l’emplacement où vous en avez besoin sur le disque et d’avertir PHP de son emplacement.