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] Upload de fichier sans formulaire HTML


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut [Upload] Upload de fichier sans formulaire HTML
    Bonjour,

    Je cherche à uploader un fichier via l'URL d'un fichier PHP.
    Je précise : sans passer le nom du fichier dans un formulaire HTML !

    J'essaie d'ouvrir une URL comme :
    http://coocs.eu.md/coocs.php?ReqCooc...oc-requete.xml

    Pour l'instant, mon application php récupère bien la variable ReqCoocXML, mais
    d'après le message affiché, je ne sais pas si le chargement échoue par ma faute ou par une limitation du serveur :

    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
     $ReqCoocXML = $_GET['ReqCoocXML'];	
     
     $target_path = "uploads/";
     $target_path = $target_path . basename($ReqCoocXML);
     
     echo $ReqCoocXML, "<br>";
     echo $target_path, "<br>";
     
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
    	{
        	echo "The file ".  basename( $_FILES['uploadedfile']['name']). " has been uploaded";
    	} 
    	else
    	{
    	 echo "There was an error uploading the file, please try again!";
    	}
    Ce qui produit l'affichage :
    Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/C:\cooc-requete.xml) is not within the allowed path(s): (/home/dothost.eu/vhosts/:/var/lib/php:/usr/lib/php:/usr/local/lib/php:/tmp/:/usr/share/pear/) in /home/dothost.eu/vhosts/coocs.eu.md/coocs.php on line 65

  2. #2
    Membre habitué
    Avatar de savageman86
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 105
    Points : 199
    Points
    199
    Par défaut
    Salut,

    1) Tu ne peux pas utiliser move_uploaded_file() pour des fichiers qui n'ont pas été uplaodés avecun formulaire.
    2) Tu dis ne pas vouloir passer par un formulaire HTML alors que tu utilise $_FILES, qui est le résultat d'un upload de fichier par formulaire.
    3) Tu testes l'existence d'un fichier qui est hors de la racine de ton serveur web et ta configuration l'interdit.

  3. #3
    Membre régulier Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 99
    Points
    99
    Par défaut
    A utiliser avec modération :

    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
     
    function upload($url,$savepath)
    {
    	$buffer = "";
    	$handle = fopen("$url", "r");
    	if ($handle) {
    	    while (!feof($handle)) {
    	        $buffer .= fgets($handle, 4096);
    	    }
    	    fclose($handle);
     
    		//$fi = basename($url);
    		$f = @fopen("$savepath", "w");
    		if($f)
    		{
     
    			fwrite($f, $buffer);
    			fclose($f);
    			return true;
    	    }
    	    else
    	    {
    	    	return false;
    	    }
     
    	}else{return false;}
     
    }

  4. #4
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut
    OK, merci à tous les deux !

    1- savageman86 : J'ai bien compris l'incompatibilité de mon objectif et des fonctions impliquant une approche par HTML.

    2 - En tentant de reproduire la suggestion de arthak, je m'aperçois que l'url :
    http://coocs.eu.md/coocs.php?ReqCooc...oc-requete.xml
    déclenche une erreur à la ligne 2 de mon appli php.

    L'erreur est reproduite ci-après :


    $ReqCoocXML = $_GET['ReqCoocXML']; // Ligne 1

    $handle = fopen($ReqCoocXML, "r"); // Ligne 2
    MESSAGE ERREUR

    Warning: fopen() [function.fopen]: open_basedir restriction in effect. File(/C:/cooc-requete.xml) is not within the allowed path(s): (/home/dothost.eu/vhosts/:/var/lib/php:/usr/lib/php:/usr/local/lib/php:/tmp/:/usr/share/pear/) in /home/dothost.eu/vhosts/coocs.eu.md/coocs.php on line 52

  5. #5
    Membre régulier Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 99
    Points
    99
    Par défaut
    L'incompatibilité http c'est que toi ou l'utilisateur doit "envoyer" un formulaire avec l'entete multicrypte-machin-chose-dataa pour qu'un fichier sur disque dur soit uploadé.

    La fonction que je t'ai envoyé prend une url HTTP pour l'envoi du fichier et la copie sur ton serveur.

    C'est normal que ton serveur te renvoie une erreur ! tu ne peut pas ouvrir un fichier distant sur l'ordi de quelqu'un à son insu. C'est illégal..

    Cepandant, si ce PC distant est le tiens, installe un serveur ftp sur ce fichier.

  6. #6
    Membre régulier
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Points : 96
    Points
    96
    Par défaut
    Merci arthak, je comprends le transfert du fichier par FTP.
    Malheureusement, l'ordinateur appelant n'est pas toujours le mien, donc
    je ne peux pas installer un FTP à chaque fois.

    Je reviens à mon problème initial : comment "envoyer un fichier" lorsque l'on consulte l'url ?

    Suis-je condamné au formulaire html ?

  7. #7
    Membre régulier Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 99
    Points
    99
    Par défaut
    Non tu n'est pas condamné. Tu peut faire un transfert asynchrone en Ajax, en simulant un formulaire, mais bon c'est plutôt experimental.. ..Et pas très légal.

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par arthak Voir le message
    Non tu n'est pas condamné. Tu peut faire un transfert asynchrone en Ajax, en simulant un formulaire, mais bon c'est plutôt experimental.. ..Et pas très légal.
    J'ai longtemps planché sur ce problème. Tu ne peux pas poster un champs de type file automatiquement avec Javascript. L'utilisateur doit cliquer sur Parcourir et sélectionner son fichier, ce n'est pas possible autrement. Sinon, les solutions sont :
    • Utiliser une ActiveX permettant d'ouvrir et de lire le contenu d'un fichier (avec IE uniquement)
    • Utiliser une applet Java, un module flash ou un EXE

    Ce genre de fonctionalité est considérée comme une faille de sécurité importante. Les antivirus bloquent ou alertent l'utilisateur.

Discussions similaires

  1. [Upload] upload de fichier sans formulaire
    Par mikebranque dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2008, 14h50
  2. [ cURL ] Upload de fichiers sans formulaire
    Par FloMo dans le forum Linux
    Réponses: 0
    Dernier message: 24/07/2007, 10h17
  3. [Upload] Upload de plusieurs fichiers via formulaire
    Par seb67110 dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2007, 11h55
  4. [Upload] upload de fichier sans formulaire
    Par gforce dans le forum Langage
    Réponses: 8
    Dernier message: 04/04/2007, 11h18
  5. [Upload] upload d'un fichier sans formulaire HTML
    Par cortex024 dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2007, 15h49

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