Anomalie #26745
fermé[Transfert] Erreur au téléversement de paquets volumineux
Ajouté par Cyril VAZQUEZ il y a environ un an. Mis à jour il y a 8 mois.
Description
Le téléversement de paquet SEDA/Medona compressés de plus de 2Go provoque une erreur :
[Fri Sep 29 13:58:00.914406 2023] [php7:error] [pid 817] [client 192.168.x.x:50746] PHP Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 3140142568 bytes) in /var/www/laabs/src/bundle/medona/Connectors/Zip.php on line 106, referer: https://xxxxx/medona/list
Fichiers
Mis à jour par Cyril VAZQUEZ il y a environ un an
- Fichier
test_20230926_1_3.JPGsupprimé
Mis à jour par Cyril VAZQUEZ il y a environ un an
- Fichier
test_20230929_1_1.JPGsupprimé
Mis à jour par Cyril VAZQUEZ il y a environ un an
- Fichier
test_20230929_1_2.JPGsupprimé
Mis à jour par Cyril VAZQUEZ il y a environ un an
- Fichier
test_20230929_1_3.JPGsupprimé
Mis à jour par Cyril VAZQUEZ il y a environ un an
Le connecteur zip fait une copie du contenu reçu en passant par la mémoire :
case is_resource($data):
file_put_contents($zipTmpFile, stream_get_contents($data));
break;
Il faut utiliser la commande stream_copy_to_stream()
à la place
Correctif à réalise en priorité sur la branche Support/2.8.X pour le client puis en 2.9.X et develop
Mis à jour par Jérôme BOUCHER il y a environ un an
- Statut changé de A traiter à En cours
Mis à jour par Jérôme BOUCHER il y a environ un an
- Statut changé de En cours à Résolu
À tester sur branche fix/26745/fix_big_zip_file_deposit
Attention, ajout d'un nouveau paramètre dans le vhost afin de pouvoir verser des documents de plus d'1 Go
LimitRequestBody 0
Cela n'affecte pas les serveurs sur des versions d'Apache inférieure à la 2.4.54 (où ce paramètre était par défaut à zéro), la 2.4.54 est sortie le 14 mars 2022.
Mis à jour par Jérôme BOUCHER il y a environ un an
- Fichier ksnip_20231002-182936.png ksnip_20231002-182936.png ajouté
Mis à jour par Cyril VAZQUEZ il y a environ un an
- Statut changé de Résolu à En cours
- Tags RM 2.9.X ajouté
A reporter dans le connecteur Multipart
Ligne 60:
if (is_object($package)) {
if (is_resource($package->data)) {
$data = stream_get_contents(\core\Encoding\Base64::decode($package));
} elseif (filter_var($package->data, FILTER_VALIDATE_URL)) {
// TODO verify
} elseif (preg_match('%^[a-zA-Z0-9\\\\/+]*={0,2}$%', $package->data)) {
$data = \core\Encoding\Base64::decode($package->data);
} elseif (is_file($package->data)) {
$data = file_get_contents($package->data);
}
} elseif(is_array($package)) {
$data = stream_get_contents($package['handler']);
}
Et en-dessous pour les pièces jointes, à chaque fois qu'on charge des données depuis un stream
file_put_contents($attachmentFileName, stream_get_contents($handler));
Mis à jour par Jérôme BOUCHER il y a 8 mois
- Statut changé de En cours à Clôturé
Le comportement n'est plus reproduit