Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/04/2011, 12h03   #1
Membre à l'essai
 
Inscription : mai 2010
Messages : 155
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 155
Points : 21
Points : 21
Par défaut upload de fichiers ne marche pas avec les extensions autre que .txt

Bonjours à tous. Je dois réaliser une interface web pour uploader des fichiers sur un ftp... Le transfert marche correctement avec des fichiers ".txt" mais lorsque je souhaite uploader des ".mp3" ou des ".zip" cela ne fonctionne plus.. J'aimerais savoir d'où cela vient. Y'aurait-il des variables dans les php.ini à modifier ou tous simplement une erreur ou une omission dans mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
		<form method="post" action="index.php" enctype="multipart/form-data">
			<table align="center" border="0">
				<tr>
					<td>Fichier source :</td>
					<input type="hidden" name="MAX_FILE_SIZE" value="999999999999">
					<td><input type="file" name="fichier_source" size="100"><td>
				</tr>
				<tr>
					<td>Fichier destination :</td>
					<td><input type="text" name="fichier_destination" size="100"></td>
				</tr>
				<tr>
					<td colspan="2" align="center"><input type="submit" value="Envoyer"></td>
				</tr>
			</table>
		</form>
 
<?php
		$ftp_server = "blabla.ftp.fr";
		$user = "user";
		$user_pass = "password";
		$conn_id = ftp_connect("$ftp_server");
		// authentification avec user et password
		$login_result = ftp_login($conn_id, "$user", "$user_pass");
		// vérification de la connexion
		if ((!$conn_id) || (!$login_result)) {
				echo "La connexion FTP a échoué!";
				echo "Tentative de connexion à $ftp_server avec $user";
				die;
		} else {
				echo "Connecté à $ftp_server, avec $user</br>";
		}
		if(isset ($_POST['fichier_destination'])){
			if($_POST['fichier_destination'] == ''){
				echo "Veuillez entrer le nom du fichier destination </br>";
			}
			if ($_FILES['fichier_source']['error']) {    
				switch ($_FILES['fichier_source']['error']){    
					case 1: // UPLOAD_ERR_INI_SIZE    
					echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";    
					break;    
					case 2: // UPLOAD_ERR_FORM_SIZE    
					echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
					break;    
					case 3: // UPLOAD_ERR_PARTIAL    
					echo "L'envoi du fichier a été interrompu pendant le transfert !";    
					break;    
					case 4: // UPLOAD_ERR_NO_FILE    
					echo "Le fichier que vous avez envoyé a une taille nulle !";
					break;    
				}    
			}
			//definitions des variables
			$fichier_source = $_FILES['fichier_source']['tmp_name'];
			$fichier_telecharge = $_FILES['fichier_source']['name'];
			$fichier_destination = $_POST['fichier_destination'];
 
			//transfert du fichier
			$upload = ftp_put($conn_id,$fichier_destination,$fichier_source,FTP_BINARY);
			// Vérification du transfert
			if (!$upload) {
				echo "Le transfert Ftp a échoué!";
			} else {
				echo "Transfert de $fichier_telecharge sur $ftp_server en $fichier_destination </br>";
			}
		}else{
			echo $_POST['fichier_destination'];
		}
?>
niamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 13h09   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
Je dois réaliser une interface web pour uploader des fichiers sur un ftp
Si c'est une interface web c'est par le protocole HTTP que ça passe déjà et pas sur FTP.

Citation:
Le transfert marche correctement avec des fichiers ".txt" mais lorsque je souhaite uploader des ".mp3" ou des ".zip" cela ne fonctionne plus
Est-ce que tu as vérifié la taille maximale d'upload dans ta conf PHP ? upload_max_filesize par exmple
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 13h49   #3
Membre à l'essai
 
Inscription : mai 2010
Messages : 155
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 155
Points : 21
Points : 21
Je suis bien d'accord que j'utilise le protocole http, je n'ai jamais dit le contraire, mais les fichiers sont biens stocker sur un serveur FTP...

De toute façon, cela n'est pas le coeur du problème. J'ai bien modifier mon php.ini en attribuant 50M a upload_max_filesize.
niamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 16h12   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Controle déjà ce que tu recois du formulaire
Citation:
mais les fichiers sont biens stocker sur un serveur FTP
Non ils sont stockés sur un disque dur auquel accède un serveur FTP.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2011, 16h57   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
A tout hasard en passant, ton serveur est-il différent de celui sur lequel tu exécutes ce script ?
M'est déjà arrivé de voir l'utilisation de fonctions ftp au lieu de move_uploaded_file().
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 09h59   #6
Membre à l'essai
 
Inscription : mai 2010
Messages : 155
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 155
Points : 21
Points : 21
écoutez, rien de tout cela, je ne comprends pas, j'ai changé de serveur ftp sur lequel je faisais Upload, et tout marche correctement, un autre problème apparaît maintenant, et je n'ai pas de réponse :

Prévenez moi si je dois créer un nouveau sujet maintenant que cela n'a plus rien a voir avec mon problème d'avant...

Je m'explique, je souhaiterais afficher un progressbar lors de mon upload de fichier, j'arrive bien a récupérer le bon pourcentage a chaque itération de boucle sauf que l'affichage ne se fait que à la fin de l'upload.

Y a-t-il besoin d'utiliser des threads avec la fonction ftp_nb_put ? Comment mettre ça en place ? un simple coup d'ajax suffirait-il ? (je n'y connais rien en ajax...) Merci de votre aide. Je vous fourni mon code si cela vous intéresse.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="design.css"/>
	<body>
		<form method="post" action="index.php" enctype="multipart/form-data">
			<table align="center" border="0">
				<tr>
					<td>Fichier source :</td>
					<input type="hidden" name="MAX_FILE_SIZE" value="999999999999999999999999999999999999999">
					<td><input type="file" name="fichier_source" size="100"><td>
				</tr>
				<tr>
					<td>Fichier destination :</td>
					<td><input type="text" name="fichier_destination" size="100"></td>
				</tr>
				<tr>
					<td colspan="2" align="center"><input type="submit" value="Envoyer"></td>
				</tr>
			</table>
		</form>
 
 
	<?php
		?><pre><?php// print_r($_FILES)?> </pre><?php
		$ftp_server = "ftp.servftp.eu";
		$user = "user1";
		$user_pass = "pass";
		$user2 = "user2";
		$user_pass2 = "pass2";
		$conn_id = ftp_connect("$ftp_server");
		// authentification avec user et password
		$login_result = ftp_login($conn_id, "$user", "$user_pass");
		// vérification de la connexion
		if ((!$conn_id) || (!$login_result)) {
				echo "La connexion FTP a échoué!";
				echo "Tentative de connexion à $ftp_server avec $user";
				die;
		} else {
				echo "Connecté à $ftp_server, avec $user</br>";
		}
		if(isset ($_POST['fichier_destination'])){
			if($_POST['fichier_destination'] == ''){
				echo "Veuillez entrer le nom du fichier destination </br>";
			}
			if ($_FILES['fichier_source']['error']) {    
				switch ($_FILES['fichier_source']['error']){    
					case 1: // UPLOAD_ERR_INI_SIZE    
					echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";    
					break;    
					case 2: // UPLOAD_ERR_FORM_SIZE    
					echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
					break;    
					case 3: // UPLOAD_ERR_PARTIAL    
					echo "L'envoi du fichier a été interrompu pendant le transfert !";    
					break;    
					case 4: // UPLOAD_ERR_NO_FILE    
					echo "Le fichier que vous avez envoyé a une taille nulle !";
					break;    
				}    
			}
			//definitions des variables
			$fichier_source = $_FILES['fichier_source']['tmp_name'];
			$fichier_telecharge = $_FILES['fichier_source']['name'];
			$fichier_destination = $_POST['fichier_destination'];
			echo "fichier source : $fichier_source </br>";
			echo "fichier src basename : $fic_src </br>";
			echo "fichier destination : $fichier_destination </br>";
			$fp = fopen($fichier_source, 'r');
 
			//transfert du fichier
 
			$upload = ftp_nb_put($conn_id,$fichier_destination,$fichier_source,FTP_BINARY,0);
			//$upload = ftp_nb_fput($conn_id,$fichier_source,$fp,FTP_BINARY,0);
			/***********************************************************************************************************/
 
			while ($upload == FTP_MOREDATA) {
				// Establish a new connection to FTP server
				if(!isset($conn_id2)) {
					$conn_id2 = ftp_connect($ftp_server);
					$login_result2 = ftp_login($conn_id2, $user2, $user_pass2);
				}
 
				// Retreive size of uploaded file.
				if(isset($conn_id2)) {
					clearstatcache(); // <- this must be included!!
					$remote_file_size = ftp_size($conn_id2, $fichier_destination);
				}
 
			   // Calculate upload progress
			   $local_file_size  = filesize($fichier_source);
			   if (isset($remote_file_size) && $remote_file_size > 0 ){
				   $i = ($remote_file_size/$local_file_size)*100;
				   printf("%d%% uploaded<br>", $i);
				   //print ftell ($fp)."\n";
				   flush();
				}  
				$upload = ftp_nb_continue($conn_id);
			}
 
			if ($upload != FTP_FINISHED) {
				print("There was an error uploading the file...<br>");
				exit(1);
			}
			else {
				print("Done.<br>");
			}
			fclose($fp);
 
 
	/*****************************************************************************************************************************************/
 
			// Vérification du transfert
			/*if (!$upload) {
				echo "Le transfert Ftp a échoué!";
			} else {
				echo "Transfert de $fichier_telecharge sur $ftp_server en $fichier_destination </br>";
			}*/
		}else{
			echo $_POST['fichier_destination'];
		}
?>
	<body>
</html>
niamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 12h48   #7
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
C'est faisable en Ajax oui.
Sans doute possible aussi en gérant les buffer de PHP mais plutôt galère et ne fonctionne pas sur tous les serveurs. Et surtout que c'est pas le rôle d'un langage serveur de faire cela selon moi.

En ajax j'ai trouvé ceci dans les blogs : http://blog.developpez.com/laurent-l...re-de-progres/
La partie serveur n'est pas en PHP mais tu l'as déjà donc c'est pas un soucis puisque c'est la progress bar qui t'intéresse.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 14h56   #8
Membre à l'essai
 
Inscription : mai 2010
Messages : 155
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 155
Points : 21
Points : 21
whaou =) si seulement jtouchais le python...

Bon, restons-en au php coté serveur alors, j'ai quelques petites questions, le poste à l'aire vraiment intéressant, je pense que je devrais être capable de m'en sortir avec ça... j'ai cependant quelques questions :

C'est plus propre de mettre tout le code js dans un autre fichier mais pour mes tests, j'ai copier le code js dans le même fichier que mon code php. Je sais comment appeler une fonction au clic sur un formulaire mais je ne comprends pas comment les options :
Code :
1
2
3
4
5
6
var options = {
  dataType: 'xml',
  url: '/upload?X-Progress-ID='+$('#X-Progress-ID').val(),
  beforeSubmit: showRequest,
  success: showResponse
}
se remplissent au clic sur le bouton submit...

Autre chose, je ne sais absolument pas quoi mettre dans le getJSON... lui il a écrit son serveur en python moi c'est un script php... et puis je dois faire a bloc de modifications mais comme je n'y connais pas grand chose, j'aurais besoin d'une aide précieuse la.. lol
Merci d'avance
niamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 17h02   #9
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
http://electron-libre.fassnet.net/ba...ion_upload.php
Je pense avoir trouvé ton bonheur, et cette fois ci avec du PHP côté serveur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 17h07   #10
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
Doublé par transgohan. Il est nécessaire d'avoir l'extension APC pour pouvoir faire une progressebar. Il est donc nécessaire d'avoir un serveur dédié car si je me souviens bien, les mutualisés ne l'ont pas.
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 17h17   #11
Membre à l'essai
 
Inscription : mai 2010
Messages : 155
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 155
Points : 21
Points : 21
Pour radicaldreamer, Ca devrait le faire, il s'agit d'une petite application réalisé sur le lan de la boite...
niamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 17h30   #12
Membre à l'essai
 
Inscription : mai 2010
Messages : 155
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 155
Points : 21
Points : 21
Merci transgohan, je suis déja tombé sur un truc comme ca sur le site du 0 et le soucis, c'est que l'extension APC ne s'instale pas correctement ici j'ai l'impression.. meme en mettant la version 5.2.0 de php sur mon serveur. Le soucis c'est que j'ai le message d'erreur "call to undefined function apc_fetch()"

Bref la vraie galère, tous ça pour un progressbar... je sais plsu quoi faire, jregarderais demain pour peut être insérer du flash... qui sait.. j'ai plus beaucoup de solutions...
niamo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h44.


 
 
 
 
Partenaires

Hébergement Web