Traiter l'upload automatiquement avec Curl

Traiter l'upload automatiquement avec Curl - PHP - Programmation

Marsh Posté le 24-05-2006 à 09:58:10    

Bonjour,
Je vous expose mon problème :
Je souhaite automatiser l'upload d'un document sur le poste d'un client vers mon serveur web. Je connais le chemin du fichier sur le poste du client car je l'aurais créer auparavant c'est pourquoi je ne veux pas de champ parcourir.
La seule solution que j'ai trouvé à présent est la librairie Curl.
J'aimerai savoir pour ceux qui l'ont déjà utiliser(ou si quelqu'un a une autre solution) comment réaliser ce traitement.
Je veux donc remplacer ce formulaire :

Code :
  1. <body>
  2. <form name="form" method="POST" action="page_receptrice.php" enctype="multipart/form-data">
  3.    <!-- Taille maximale en octets. Non sécurisé car facilement contournable !! -->
  4.    <input type="hidden" name="MAX_FILE_SIZE" value="5000000" />
  5.    Veuillez s&eacute;lectionner un fichier &agrave; uploader:
  6.    <input type="file" name="aFile" value="c:/test.jpg" />
  7.    <input type="submit" name="submitFile" value="Envoyer le fichier" />
  8. </form>
  9. </body>


Voici ce que j'ai voulu réaliser avec la librairie Curl :

Code :
  1. <?php
  2. $postData = array();
  3. //simulates <input type="file" name="file_name">
  4. $postData[ 'MAX_FILE_SIZE']="500000";
  5. $postData[ 'aFile'] = "c:\test.jpg";
  6. $postData[ 'submit' ] = "SubmitFile";
  7. $ch = curl_init();
  8. curl_setopt($ch, CURLOPT_URL, "http://192.168.100.198/SITERCOI_WEB/FR/page_receptrice.php" );
  9. curl_setopt($ch, CURLOPT_POST, 1 );
  10. curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  12. $postResult = curl_exec($ch);
  13. if (curl_errno($ch)) {
  14. print curl_error($ch);
  15. }
  16. curl_close($ch);
  17. print "$postResult";
  18. ?>


Et enfin voici la page qui réalise l'upload même si cette cette page n'est pas vraiment utile pour résoudre le problème(page_receptrice.php):

Code :
  1. <?php
  2.   $destination_dir = 'C:\\Mes Sites\\SiteRCOI\\SITERCOI_WEB\\upload\\';
  3.    
  4.    // taille maximale en octets du fichier à uploader  
  5.    $file_max_size = 5000000;
  6.    
  7.    // extensions de fichiers autorisées  
  8.    $authorized_extensions = array('jpg', 'gif');
  9.    
  10.    /* TRAITEMENT PRINCIPAL  
  11.     */   
  12.    
  13.    // vérifie l'existence du répertoire de destination  
  14.    if (!is_dir($destination_dir)) {
  15.      echo 'Veuillez indiquer un r&eacute;pertoire destination correct !';
  16.      die();
  17.    }
  18.    // vérifie que répertoire de destination a des droits en écriture  
  19.    if (!is_writeable($destination_dir)) {
  20.      echo 'Veuillez spécifier des droits en écriture pour le r&eacute;pertoire destination !';
  21.      die();     
  22.    }   
  23.     echo $_FILES['aFile']['tmp_name'];
  24. echo $_FILES['aFile'];
  25. echo '     ';
  26. echo $_FILES['aFile']['name'];
  27.    // réception du formulaire  
  28.    if (isSet($_POST['submitFile'])) {
  29.      // vérifie qu'un fichier a bien été soumis  
  30.      if (isSet($_FILES) && is_array($_FILES)) {
  31.    
  32.        // pas d'erreur lors de l'upload  
  33.        if ($_FILES['aFile']['error'] == UPLOAD_ERR_OK) {
  34.          
  35.          // vérifie la taille en octets  
  36.          if ($_FILES['aFile']['size'] <= $file_max_size) {
  37.            // vérifie l'extension du fichier recu  
  38.            // il est aussi possible (et sans doute mieux) de se baser sur $_FILES['aFile']['type']  
  39.            // qui retourne le type MIME correspondant (par exemple: image/pjpeg)           
  40.            $lastPos = strRChr($_FILES['aFile']['name'], "." );
  41.            if ($lastPos !== false && in_array(strToLower(subStr($lastPos, 1)), $authorized_extensions)) {
  42.    
  43.              // définit un nom de fichier destination unique à partir du nom du fichier original formaté  
  44.              $destination_file = time().formatFileName($_FILES['aFile']['name']);           
  45.              // déplace le fichier uploadé du répertoire temporaire  
  46.              // vers les répertoire/fichier destination spécifiés  
  47.              if (move_uploaded_file($_FILES['aFile']['tmp_name'],
  48.                                          $destination_dir.DIRECTORY_SEPARATOR.$destination_file)) {
  49.                echo 'Fichier valide et upload&eacute; correctement.';   
  50.              } else { // error sur move_uploaded_file  
  51.                echo 'Le fichier n\'a pas &eacute;t&eacute; upload&eacute; correctement !';
  52.              }
  53.            } else { // pas d'extension ou mauvaise extension  
  54.              echo 'Mauvaise extension !';
  55.            }     
  56.          } else { // Taille maximale dépassée  
  57.            echo 'Fichier trop volumineux !';
  58.          }
  59.        } else { // Erreur lors de l'upload  
  60.                }   
  61.      } else { // aucun fichier reçu  
  62.        echo 'Pas de fichier recu';
  63.      }
  64.    } // fin de réception de formulaire  
  65. ?>


Le résultat de mon script est une page blanche mais sans erreur php. J'imagine que la librairie Curl est bien installé mais sans certitude. J'aimerai donc avoir vos avis sur l'utlisation de Curl et de mon script qui ne semble pas compliqué. Je précise que le sript d'upload fonctionne lorsqu'il est appelé par le formulaire html. Merci d'avance,
Matt
PS : Désolé pour le post un peu long.


Message édité par Paco630 le 24-05-2006 à 10:43:21
Reply

Marsh Posté le 24-05-2006 à 09:58:10   

Reply

Marsh Posté le 24-05-2006 à 13:34:54    

le phpinfo() te dira si ton extension est chargée, c'est déjà un début :)

Reply

Marsh Posté le 24-05-2006 à 14:39:41    

the_bigboo a écrit :

le phpinfo() te dira si ton extension est chargée, c'est déjà un début :)


J'ai bien fait un phpinfo je ne vois pas curl apparaitre dans les modules chargés. Mais ce que je ne comprends pas c'est pourquoi je n'ai pas d'erreur concernant les fonctions.
Matt

Reply

Marsh Posté le 24-05-2006 à 15:18:57    

as tu mis ton PHP.ini a E_ALL au niveau du moteur d'erreur ?

Reply

Marsh Posté le 24-05-2006 à 15:39:51    

the_bigboo a écrit :

as tu mis ton PHP.ini a E_ALL au niveau du moteur d'erreur ?


D'abord merci de t'interesser à mon problème et ensuite je pense que tu me parles cette ligne : error_reporting  =  E_ALL
Elle est donc positionnée à E_ALL si c'est ce dont tu me parlais.
Matt

Reply

Marsh Posté le 24-05-2006 à 15:44:42    

ok, regarde au nniveau de ton rendu HTML, histoire de voir si ca ne s'est pas brutalement coupé.
je veux dire par la un <table> ou un <div> qui se ferme pas. Ca serais peut-etre une piste

Reply

Marsh Posté le 24-05-2006 à 15:56:44    

Le rendu HTML ne donne rien qui laisse présager une erreur :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY></BODY></HTML>
Je commence à penser que Curl n'est pas installé mais je ne vois pas trop comment l'installer. J'ai lu qu'il fallait le compiler mais je ne vois pas en quoi ceci va ajouter mon module curl à php.
Matt


Message édité par Paco630 le 24-05-2006 à 15:57:24
Reply

Marsh Posté le 24-05-2006 à 20:40:52    

un module se compile. Par exemple, PHP est installé comme module d'apache. Il s'agit de librairies qu'il faut compiler puis déclarer dans une application.
 
En l'occurence un compilation de PHP se fait avec "make" , instruction suivant généralement le script d'ajout de parametres ( ./configure )
 
Ici c'est pareil.
 
Assure toi d'avoir les librairies c++ de disponibles. Sinon make provoque des erreurs

Reply

Marsh Posté le 24-05-2006 à 20:43:25    

apt-get install php5, jamais rien eu à compiler :D

Message cité 1 fois
Message édité par Djebel1 le 24-05-2006 à 20:43:44
Reply

Marsh Posté le 24-05-2006 à 21:52:17    

Djebel1 a écrit :

apt-get install php5, jamais rien eu à compiler :D


oui, si tu es sur debian, j'ai fais la meme ( :whistle: )
mais sinon en regle général on doit passer par la compîlation !

Reply

Marsh Posté le 24-05-2006 à 21:52:17   

Reply

Marsh Posté le 24-05-2006 à 23:27:17    

the_bigboo a écrit :

oui, si tu es sur debian, j'ai fais la meme ( :whistle: )
mais sinon en regle général on doit passer par la compîlation !


En fait la librairie php_curl.dll est deja presente dans les extensions de PHP donc je n'ai peut-etre pas besoin de recompiler. Et sinon j'essaierai de faire mon serveur sur une debian.
Matt

Reply

Marsh Posté le 25-05-2006 à 15:38:09    

je n'avais pas compris que tu utilisais une plateforme win32 :p
dans ce cas c'est juste une ligne a decommenter dans ton PHP.INI :p

Reply

Marsh Posté le 29-05-2006 à 08:32:36    

Je crois qu'après beaucoup de tentatives et de temps perdu, je vais arrêter d'essayer d'uploader un fichier sans avoir un champ parcourir(ou en remplissant le chemin avec du javascript par exemple). Il semble impossible (enfin pour un developpeur comme moi) de passer a travers ce procédé. Merci quand même pour vos réponses en attendant que quelqu'un arrive a faire cela.
@+
Matt

Reply

Marsh Posté le 07-09-2006 à 14:12:16    

up, ca m'interesse

Reply

Marsh Posté le 07-09-2006 à 14:19:09    

ça me semble impossible, question de sécurité (en tout cas si c'est possible c'est grave [:mlc] )


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 07-09-2006 à 14:27:44    

comment c'est nawak ce topic [:dawao]

Reply

Marsh Posté le 07-09-2006 à 20:19:18    

Sh@rdar a écrit :

ça me semble impossible, question de sécurité (en tout cas si c'est possible c'est grave [:mlc] )


 
Clairement oui, on pourrait faire des pages "piégées" qui iraient chercher certains fichiers contenant des licences, des mots de passes etc...
 
Étant donné que chaque appli stockes ce genre de chose dans un dossier bien spécifique.


---------------
Gamertag: CoteBlack YeLL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed