OVH Cloud OVH Cloud

FTP_GET probleme

7 réponses
Avatar
JMF
je veux faire un ftp_get (type ASCII) à partir d'un poste XP sur un
serveur linux qui héberge le serveur FTP . Le serveur WEB est sous windows
avec Apache2 et php 4.3.7 . Sur linux les lignes se termine par Line Feed
=code hexa 0A et dans le fichier récupéré sur le serveur WEB les 0A se
transforme en 0D0D0A . Avec php 4.3.10 c'est pire je récupère 0D0A0D0A en
plus à la fin du fichier et avec php 5.0.3 le LF(0A) se transforme en
0D0D sur le serveur WEB .Quelqu'un a t-il la solution pour que le get_ftp
ASCII donne 0D0A en fin de ligne comme tout bon ftp get sous Windows .
Merci à qui pourrait me dépanner .

7 réponses

Avatar
Olivier Miakinen
je veux faire un ftp_get (type ASCII) [coupe]
Merci à qui pourrait me dépanner .


Si j'ai bien compris, tu as (à voir avec une police à espacement fixe) :

{ XP }
{ client WEB } --> { serveur WEB } { Linux }
{ client FTP } --> { serveur FTP }

Tout d'abord, es-tu absolument sûre que le fichier sur Linux ne contient
que des 0A et pas quelques 0D en plus ? Quels outils utilises-tu, sur
Linux et sur XP, pour vérifier le contenu des fichiers ?

Avatar
JMF
"Olivier Miakinen" <om+ a écrit dans le message de
news:ctgk03$25fs$
je veux faire un ftp_get (type ASCII) [coupe]
Merci à qui pourrait me dépanner .


Si j'ai bien compris, tu as (à voir avec une police à espacement fixe) :

{ XP }
{ client WEB } --> { serveur WEB } { Linux }
{ client FTP } --> { serveur FTP }

Tout d'abord, es-tu absolument sûre que le fichier sur Linux ne contient
que des 0A et pas quelques 0D en plus ? Quels outils utilises-tu, sur
Linux et sur XP, pour vérifier le contenu des fichiers ?
----


Absolument sûr , sous linux j'ai hexedit et sous windows un editeur hexa
perso , en fait dans le script php je fais un ftp_get qui ramène le fichier
sur le serveur WEB sous windows , et ensuite je fais un readfile pour le
ramener sur le poste de travail .j'ai vérifié le readfile est complètement
transparent , il le ramène tel qu'il est sur le serveur WEB .


Avatar
Olivier Miakinen

Tout d'abord, es-tu absolument sûre [...]


Absolument sûr ,


Tout d'abord pardon pour la confusion. Il est difficile de deviner le
sexe d'un intervenant avec seulement des initiales.

sous linux j'ai hexedit et sous windows un editeur hexa
perso , en fait dans le script php je fais un ftp_get qui ramène le fichier
sur le serveur WEB sous windows , et ensuite je fais un readfile pour le
ramener sur le poste de travail .j'ai vérifié le readfile est complètement
transparent , il le ramène tel qu'il est sur le serveur WEB .


Merci de la précision. Il doit donc y avoir un bug, soit sur le serveur
ftpd, soit sur le client ftp, soit dans une combinaison des deux. Si tu
veux investiguer par toi-même, voici quelques pistes :
- essayer avec un vrai client FTP sur la même machine, vers le même
serveur FTP ;
- essayer avec le même ftp_get, mais vers une autre machine ;
- refaire tous les essais en mode binaire ;
- essayer le ftp_put ;
- ...

Pour tout ceci, essaye avec un fichier de test contenant toutes les
séquences possibles, par exemple :
xxx0Axxx0Dxxx0D0Axxx0A0Dxxx0D0Dxxx0A0Axxx

Je suis désolé de ne pas pouvoir t'aider plus, je n'ai jamais utilisé le
ftp_get de PHP. Ah si, encore deux choses. D'abord, avec un vrai client
FTP tu peux tracer les commandes avec 'trace' : regarde si cela
t'apprend quelque chose. Et puis quand tu transfères un fichier, il
te dit combien d'octets ont été transférés (0D0A compte pour deux) :
compare ça à la longueur des deux fichiers.


Avatar
JMF
Olivier Miakinen wrote:

Je suis désolé de ne pas pouvoir t'aider plus, je n'ai jamais utilisé le
ftp_get de PHP. Ah si, encore deux choses. D'abord, avec un vrai client
FTP tu peux tracer les commandes avec 'trace' : regarde si cela
t'apprend quelque chose. Et puis quand tu transfères un fichier, il
te dit combien d'octets ont été transférés (0D0A compte pour deux) :
compare ça à la longueur des deux fichiers.


-------------------------------------------
Avec un vrai client ftp , tout est correct en ASCII avec mon serveur FTPD ,
ça fonctionne tres bien avec ftp_put (ASCII ou BINARY) et il y a
effectivement  un bug avec ftp_get en ASCII . J'ai vu sur les forums que
d'autres ont le même problème  .Mais ce qui me trouble le plus c'est que ce
problème détecté il ya déja un certain temps ne soit pas corrigé dans les
versions récentes de php (4 ou 5 ) et qu'en plus  selon les versions la
fonction ftp_get ne donne pas les mêmes résultats et pas celui attendu .
Merci en tout cas pour  tes réponses .

Avatar
Paul Delannoy
JMF a écrit:
Olivier Miakinen wrote:


Je suis désolé de ne pas pouvoir t'aider plus, je n'ai jamais utilisé le
ftp_get de PHP. Ah si, encore deux choses. D'abord, avec un vrai client
FTP tu peux tracer les commandes avec 'trace' : regarde si cela
t'apprend quelque chose. Et puis quand tu transfères un fichier, il
te dit combien d'octets ont été transférés (0D0A compte pour deux) :
compare ça à la longueur des deux fichiers.



-------------------------------------------
Avec un vrai client ftp , tout est correct en ASCII avec mon serveur FTPD ,
ça fonctionne tres bien avec ftp_put (ASCII ou BINARY) et il y a
effectivement un bug avec ftp_get en ASCII . J'ai vu sur les forums que
d'autres ont le même problème .Mais ce qui me trouble le plus c'est que ce
problème détecté il ya déja un certain temps ne soit pas corrigé dans les
versions récentes de php (4 ou 5 ) et qu'en plus selon les versions la
fonction ftp_get ne donne pas les mêmes résultats et pas celui attendu .


Tu peux sans doute ajouter une étape de traitement du résultat de
ftp_get pour réatblr ce que tu veux comme fin delignes (genre ni2dos, ou
autre utilitaire bien choisi) ?


Avatar
__marc.quinton__
JMF wrote:
je veux faire un ftp_get (type ASCII) à partir d'un poste XP sur un
serveur linux qui héberge le serveur FTP . Le serveur WEB est sous windows
avec Apache2 et php 4.3.7 .


tu as regardé :

* du coté des classes Pear ?
* est-ce qu'un simple fopen("ftp://$url/"), ne fonctionnerait pas mieux ?

Avatar
JMF
Paul Delannoy wrote:

JMF a écrit:
Olivier Miakinen wrote:

-------------------------------------------
Avec un vrai client ftp , tout est correct en ASCII avec mon serveur FTPD
, ça fonctionne tres bien avec ftp_put (ASCII ou BINARY) et il y a
effectivement un bug avec ftp_get en ASCII . J'ai vu sur les forums que
d'autres ont le même problème .Mais ce qui me trouble le plus c'est que
ce problème détecté il ya déja un certain temps ne soit pas corrigé dans
les
versions récentes de php (4 ou 5 ) et qu'en plus selon les versions la
fonction ftp_get ne donne pas les mêmes résultats et pas celui attendu .


Tu peux sans doute ajouter une étape de traitement du résultat de
ftp_get pour réatblr ce que tu veux comme fin delignes (genre ni2dos, ou
autre utilitaire bien choisi) ?
---------------------------------------------

c'est comme ça que j'ai résolu le problème , je fais un ftp_get binaire et
je rajoute un traitement qui substitue 0D0A à 0A avant le readfile qui
ramène le fichier sur le poste client .