Se connecter avec
S'enregistrer | Connectez-vous

copy(images/bc.gif): failed to open stream: Permission denied

Dernière réponse : dans Programmation

Bonjour,

je voudrais envoyer un fichier image par http sur un serveur distant (en php)
j'utilise les fonctions copy() et move_uploaded_file()
mais j'obtiens le meme message :

Warning: copy(images/bc.gif): failed to open stream: Permission denied in /home/httpd/vhosts/monweb.com/subdomains/devel/httpdocs/modif_article.php on line 59


j'ai utilisé la fonction chmod(monfichier, 0777) pour changer les droits d'accès au fichier mais le problème reste le même.

une idée? une solution ?

merci

Lassé par la pub ? Créez un compte
Expert Programmation

Je crois que le soucis est surtout que tu n'arrives pas à ouvrir le fichier temporaire.
Et c'est le répertoire de destination qui doit être en 777, pas le fichier.

Au cas où, met ici ton code (de la réception du fichier jusqu'à la tentative de move)

oui j'ai essayé de changer les droits du repertoire destination mais c pareil!!!

Voici le code:

Recuperation de l'image:


<form name="form" action="new_article.php" method="post" enctype="multipart/form-data">
Photo <input name="photo" type="file" size="10" maxlength="20">
...
</form>

envoi de l'image: (dans le fichier new_article.php)


// Taille maximum
$MAX_FILE_SIZE = 1000000;

// Dossier de destination du fichier
$folder = "images/";

// Tableau array des différents types
$allowed_types = array("image/bmp", "image/gif", "image/pjpeg", "image/jpeg", "image/jpg");

// Variables récupérée par methode POST du formulaires
$fname = $HTTP_POST_FILES['photo']['name'];
$ftype = $HTTP_POST_FILES['photo']['type'];
$fsize = $HTTP_POST_FILES['photo']['size'];
$ftmp = $HTTP_POST_FILES['photo']['tmp_name'];

// Diverses test afin de savoir si :
// Le format de fichier correspond à notre tableau array
if(!in_array($ftype, $allowed_types)){$error = 1;}

// La taille du fichier n'est pas dépassée
if($fize > $MAX_FILE_SIZE){$error = 2;}

// Le fichier n'existe pas déjà
if(file_exists($folder."m_".$fname)){$error = 3;}

//chmod($folder, 0777); changement des droits repertoire destination

// Si tout va bien, on copie l'image
if(copy($ftmp,''.$folder.''.$fname.'')) {$error = 0;}

...

j'ai eu à remplacer copy par move_uploaded_file() mais rien n'y fait.

Donc Voilà ...
Expert Programmation

bon, tout d'abord, essaye d'abandonner $HTTP_POST_FILES et d'utiliser $_FILES

Ensuite, utilise un soit vrai répertoire relatif ("./images/") soit le répertoire réel ("/home/user/www/site/images/")

Dernier point qui me choque: tu regardes si "images/m_$fichier" existe pour copier "images/$fichier" ?

Voici le script qui fonctionne chez moi:
  1. <?
  2. $folder = "./images/";
  3. $posted = $_FILES["photo"];
  4. if (!is_uploaded_file($posted["tmp_name"])) die("Le fichier n'est pas arrivé");
  5. if (!file_exists($folder."m_".$posted["name"])) {
  6. move_uploaded_file($posted["tmp_name"], $folder."m_".$posted["name"]) or die("Erreur de copie");
  7. }
  8. ?>
Lassé par la pub ? Créez un compte
Tom's guide dans le monde