IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

upload de fichiers ne marche pas avec les extensions autre que .txt


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 156
    Points : 51
    Points
    51
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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'];
    		}
    ?>

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    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.

    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

  3. #3
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    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.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Controle déjà ce que tu recois du formulaire
    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.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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().

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #6
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    é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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  7. #7
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  8. #8
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    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.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  10. #10
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    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

  11. #11
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    Pour radicaldreamer, Ca devrait le faire, il s'agit d'une petite application réalisé sur le lan de la boite...

  12. #12
    Membre du Club
    Inscrit en
    Mai 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 156
    Points : 51
    Points
    51
    Par défaut
    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...

Discussions similaires

  1. Repérer deux fichiers identiques mais pas avec les mêmes dates
    Par rambc dans le forum Général Python
    Réponses: 14
    Dernier message: 17/03/2009, 03h13
  2. [CKEditor] IE et FF l'upload de fichier ne marche pas sous FF
    Par corde dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 08/05/2007, 11h10
  3. event.target marche pas avec les images
    Par tuxout dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/08/2006, 17h46
  4. [VB6] TypeOf ne marche pas avec les Label ?
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 21/04/2006, 13h36
  5. [CSS] Bug IE avec height ne marche pas avec les %
    Par El Riiico dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/06/2005, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo