[spip-dev] Problème de copie partielle avec copie_locale()

Bonjour,

Dans un plugin, j’essaie d’utiliser copie_locale() pour récupérer un fichier distant (j’ai essayé à l’extérieur au travers d’un proxy, mais aussi sur localhost sans proxy) et j’obtiens à chaque fois une copie partielle du fichier, et non son intégralité.

Je récupère toujours le début du fichier source, quel qu’il soit, sur 15208 octets, ce qui ne me semble pas une taille basée sur une puissance de 2.

Une idée de ce qui pourrait se produire ?

Merci.

-Nicolas

Pour info, les headers récupérés dans recuperer_lapage() indiquent bien ceci :

Content-Length: 559875

Donc c’est après que ça ne marche pas…

2011/2/15 Nicolas Hoizey <nicolas@hoizey.com>

Et via la médiathèque il est récupéré en entier ?

2011/2/15 Yffic <yffic@lefourneau.com>

Et via la médiathèque il est récupéré en entier ?

Oui, bonne remarque.

Et via la médiathèque il est récupéré en entier ?

Oui, bonne remarque.

Mais bon, ça ne m'aide pas, copie_locale() devrait fonctionner... :wink:

Ca devrait t'aider en comparant les 2 codes, non ?

C’est le même code : la mediatheque utilise copie_locale, donc je dirai que le problème ne vient pas de la fonction elle même,
mais peut etre de la façon dont tu l’utilises ?

La copie locale est tronquée a 16Mo, definie par la constante _COPIE_LOCALE_MAX_SIZE
mais je ne pense pas que cela vienne de là.
As tu essayé de supprimer le fichier tronqué téléchargé la premiere fois, car ensuite SPIP ne reessaye pas de le telecharger a nouveau,
sauf si tu passes force=true dans copie_locale

Cédric

2011/2/15 Yffic <yffic@lefourneau.com>

Et via la médiathèque il est récupéré en entier ?

Oui, bonne remarque.

C’est le même code : la mediatheque utilise copie_locale, donc je dirai que le problème ne vient pas de la fonction elle même,
mais peut etre de la façon dont tu l’utilises ?

La copie locale est tronquée a 16Mo, definie par la constante _COPIE_LOCALE_MAX_SIZE
mais je ne pense pas que cela vienne de là.

Non, les fichiers testés font quelques centaines de ko.

As tu essayé de supprimer le fichier tronqué téléchargé la premiere fois, car ensuite SPIP ne reessaye pas de le telecharger a nouveau,
sauf si tu passes force=true dans copie_locale

J’ai supprimé sans succès, et utilisé le paramètre ‹ force ›.

C’est dans recuperer_body() que ça ne boucle pas. Il semble détecter un feof() erroné, puisque la taille max n’est pas atteinte…