FTP : de windows à linux

cs_ben83 Messages postés 5 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 7 avril 2004 - 6 avril 2004 à 17:28
cs_ben83 Messages postés 5 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 7 avril 2004 - 7 avril 2004 à 18:50
Bonjour,

Lorsque je teste en local (Winsows IIS) le code php qui effectue simplement un upload (ftp_put) de fichier , je n'ai aucun problème. Par contre, une fois que j'envois ma page sur mon serveur linux, celui-ci ne parvint pas à "pointer" sur le fichier à uploader (fichier windows).
En fait, le serveur est incapable de comprende le chemin windows qui indique le fichier à télécharger (exemple basename("C:\Essai.txt") = "C:\Essai.txt" au lieu de "Essai.txt" tout court)
Est-ce que quelqu'un aurait une idée pour solutionner le problème, sachant que le site sera de toute façon hébergé sur un serveur linux.

Merci d'avance,
Ben

7 réponses

ADPro22 Messages postés 126 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 27 octobre 2004
6 avril 2004 à 21:38
Les chemins sous les autres OS sont sous la forme : /mon/arborescence/de/repertoires/

et les fonctions de ce type (certaines) dépendent de la version de php (-> à la compilation de php)

php3/functions/string.c
/* {{{ proto string basename(string path)
   Return the filename component of the path */
void php3_basename(INTERNAL_FUNCTION_PARAMETERS)
{
pval *str;
char *ret, *c;
TLS_VARS;

if (ARG_COUNT(ht) != 1 || getParameters(ht, 1, &str)) {
WRONG_PARAM_COUNT;
}
convert_to_string(str);
ret = estrdup(str->value.str.val);
c = ret + str->value.str.len -1;
while (*c == '/'
#ifdef MSVC5
   || *c == '\\'
#endif
)
c--;
*(c + 1) = '\0';
if ((c = strrchr(ret, '/'))
#ifdef MSVC5
|| (c = strrchr(ret, '\\'))
#endif
) {
RETVAL_STRING(c + 1,1);
} else {
RETVAL_STRING(str->value.str.val,1);
}
efree(ret);
}
/* }}} */


donc pour php sous windows, le séparateur, c'est \ et uniquement \, alors que sous un autre os, le séparateur sera toujours /

donc pour php sous linux :
basename('C:\plop.ext') renvoie C:\plop.ext

réciproquement, un php pour windows donnerait
basename('/etc/php4/apache/php.ini') renvoie '/etc/php4/apache/php.ini'

Si tu veux une fonction qui fonctionne pour les deux types de chemins, il faut que tu écrives toi même une fonction en php et ne pas utiliser basename.

Cordialement,

ADPro22
0
cs_ben83 Messages postés 5 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 7 avril 2004
7 avril 2004 à 12:35
ok thanks mais en fait le problème c'est surtout pour la fonction:

$upload = ftp_put($conn_id, $source,$destination, FTP_BINARY);

Supposons que je veux télécharger le fichier qui se trouve sur mon PC Windows : $source="C:\Essai.txt";

Vu que le serveur est un linux, il ne pointe effectivement pas sur le fichier (erreur opening). Essayer des trucs du genre "/C/Essai.txt" ne fonctionne bien sûr pas non plus.

A quoi doit ressembler $source? Ou ya t'il une autre fonction?

Bien à toi,
Ben
0
ADPro22 Messages postés 126 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 27 octobre 2004
7 avril 2004 à 14:03
Je ne suis pas sûr de comprendre ton problème.

Selon ce qui est écrit :
tu veux transférer un fichier depuis ton windows sur un linux.
le serveur ftp est ? (c'est pas dit...)
le client ftp, c'est ton script php.
le serveur web sur lequel est executé le script php est un linux

dans cette configuration, il faut donc que ton serveur ftp soit sur le windows en question, et que tu ulises ftp_get avec ton client php !!

Si le serveur ftp et le client ftp en php sont sur la même machine, tu ne risques pas de pouvoir faire ton transfert....

Cordialement,

ADPro22
0
cs_ben83 Messages postés 5 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 7 avril 2004
7 avril 2004 à 15:23
En fait l'idée est de monter une petite platforme qui permet d'uploader des fichiers (doc, xls, pdf,...) sur un serveur et de pouvoir downloader ceux-ci. Un genre de serveur d'échange.

Le serveur PHP est celui d'un pote qui a bien voulu héberger mes quelques pages php et qui acceuilera les fichiers qui seront downloader. Ce serveur tourne en linux.

Quant aux utilisateurs de la platforme, ceux-ci ont un PC qui tourne en windows. Ils envoient donc leurs fichiers locaux sur le serveur linux et peuvent en récupérer d'autres.

Note que ça ne pose pas de problème d'éventuellement utiliser un deuxième serveur uniquement pour stocker les fichiers downloadés. Mais j'ai essayé ça ne change rien.

Est-ce faisable?

Bien à toi,
Ben
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ADPro22 Messages postés 126 Date d'inscription mercredi 18 juillet 2001 Statut Membre Dernière intervention 27 octobre 2004
7 avril 2004 à 16:53
Non, ce n'est pas possible.
Les échanges de fichiers ne pourront toujours se faire qu'entre le client et le serveur (ftp).
Et comme ton client (ftp) s'execute sur le serveur web, il ne pourra échanger des fichiers qu'avec le serveur ftp... mais pas les windows.

Si tu veux que n'importe quel client web puisse uploader, il faudra passer par un upload http.

Cordialement,

ADPro22
0
cs_ben83 Messages postés 5 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 7 avril 2004
7 avril 2004 à 18:26
A ok. Vais me renseigner sur les téléchargements en http. Si par hasard tu connais une source où on en parle, n'hésite pas.

Un grand merci pour tes précieux conseils.

Ben
0
cs_ben83 Messages postés 5 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 7 avril 2004
7 avril 2004 à 18:50
finalement j'ai trouvé: pour ceux que ça intéresse et qui ont rencontré le même problème :

http://www.phpcodeur.net/articles/php/upload

Ben
0
Rejoignez-nous