Failed to open stream: Permission denied [Résolu]

Signaler
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021
-
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021
-
Bonjour

J'utilise "copy" dsns un fichier ou je n'ai pas d'erreur
<?php 
setlocale (LC_TIME, 'fr_FR.utf8','fra'); 



$datetime = date("Ymd");
$date_lettre = strftime(" %d %B %Y");
$photo_origine = "images/origine/" . $datetime . ".jpg";
$photo_cible_1 = "images/albums/album1/" . $datetime . ".jpg";
$photo_cible_2 = "images/albums/album1/thumbs/" . $datetime . ".jpg";
$archive_texte =("texte/");
$liste_photo =("texte/liste_photo.txt");




if(!is_file($liste_photo)) // si le fichier exist
{
        $verif=@fopen($liste_photo,"w+");
}
else
{	
}

if (file_exists($photo_origine)) {// si la photo existe
		rename ($photo_origine ,$photo_cible_1 );
		copy( $photo_cible_1 , $photo_cible_2 );

// Si ok on ouvre en écirtureç-enregistrement du fichier liste_photo.txt
        $verif=@fopen($liste_photo,"r+");
               
        // On analyse les anciennes données et on les stock
		$stock=@fread($verif,filesize($liste_photo));
		
		$opinion="<div class=content><div><a href=#><img src=".$photo_cible_1." alt=".$date_lettre." class=thumb /></a><span></span></div></div>\n";
		
				
 

		// On remet le curseur du fichier en début de ligne
        rewind($verif);
       
        // On insère le nouveau commentaire
        fputs($verif,$opinion." \n".$stock);
       
        // On clore le fichier
        fclose($verif);
       
        // On affiche le tout
        //readfile($commentaires);
		
		$temoin = file_get_contents('texte/liste_photo.txt');
		

$temoin= str_replace('=content','="content"', $temoin ) ;
$temoin= str_replace('href=#','href="#"', $temoin ) ;

$temoin= str_replace('=thumb','="thumb"', $temoin ) ;

$result=file_put_contents('texte/liste_photo.txt',$temoin);

}

 
else {}


?>




J'ai une ereur Warning: copy(images/albums/album1/20210333-a.jpg ): failed to open stream: Permission denied in C:\wamp64\www\lenergie-vive\lev\pj\new-4.php on line 42 dons ce fichier php ou j'utilise aussi "copy".
J'ai regardé sur le web ou j'ai vu qu'il falit donner les droit avec chmod.
Mais cela ne fonctionne pas


<?php 
//$datetime = date("Ymd");
$datetime= ("20210333");
$date_lettre = strftime(" %d %B %Y"); //pour le titre image

$archive_texte =("texte/");
$liste_photo =("texte/liste_photo.txt");

$photo_origine = "images/origine/" . $datetime . "**.jpg";

// extraire les fichiers qui contienne la variable
foreach(glob("images/origine/".$datetime."**.jpg") as $file){
}
//extraire le nom du fichier
$archive = basename($file);

if (fnmatch("*[a-]*",$archive)) // si le fichier contient a-
{ 
   $credit= "facebook";
   echo "credit<br>" .$credit."<br />";
   //$new_archive= str_replace("a-","",$archive); //remplace ce caractere par rien
   //echo "new archive<br>" .$new_archive."<br />";
	//rename("images/origine/a-20210333.jpg","images/origine/20210333.jpg");
}
else
{ 
   echo "erreur"; 
} 



//$photo_origine = "images/origine/" . $file . ";
echo "<br>photo origine  <br>  " .$photo_origine;
$photo_complet= "images/origine/".$archive."";
echo "<br>photo complet  <br>  " .$photo_complet;
$photo_cible_1 = "images/albums/album1/" . $archive . " ";
echo "<br>photo cible 1  <br>  " .$photo_cible_1;
$photo_cible_2 = "images/albums/album1/thumbs/" . $archive . " ";
echo "<br>photo cible 2  <br>  " .$photo_cible_2;
if (file_exists($photo_complet)) {// si la photo existe
chmod ( $photo_complet , 0777 );
copy( $photo_complet , $photo_cible_1 );
copy( $photo_complet , $photo_cible_2 );
}
else{
}


?> 


Peut-etre que je n'utilise pas correctement le chmod? ou autre chose?

Merci pour votre aide.

2 réponses

Messages postés
32045
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2021
3 385
Bonjour,


Pour commencer ... tu as fermé ton foreach trop tot ..
foreach(glob("images/origine/".$datetime."**.jpg") as $file){
}

En l'état .. il ne sert à rien...
Je suppose que le reste du code devrait se trouver dans ce foreach ...


Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021

Il me sert a obtenir le nom du fichier que j'ai au format "date du jour-lettre" (20210319-a/b/c...) et de pouvoir faire le traitement sur la lettre.

Incluir ou non le reste du code dans foreach ne change pas le problème.
Messages postés
32045
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2021
3 385 >
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021

Une boucle dans laquelle tu ne fais rien ne sert strictement à rien...
je reste persuadé que tu as fermer ta boucle trop tôt...
et pour le vérifier il te suffit de faire des échos de tes différentes variables de ton script...
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021
>
Messages postés
32045
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2021

Comme tu verras dans le script, j'ai fais les echo et tous les echo me renvoi le non et emplacement correct du fichier.

credit
facebook

photo origine
images/origine/20210333**.jpg
photo complet
images/origine/20210333-a.jpg
photo cible 1
images/albums/album1/20210333-a.jpg
photo cible 2
images/albums/album1/thumbs/20210333-a.jpg
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021
>
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021

J'ai essayer de changer de place l'accolade de fin du foreach mais cela ne change rien.

Le foreach me sert a obtenir le nom complet de mon fichier
foreach( glob("images/origine/".$datetime."**.jpg") as $file){
//extraire le nom du fichier
$archive = basename($file);}

Existe-t il une autre methode pour extraire le nom complet du fichier?
Messages postés
32045
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2021
3 385
9
<?php

//---------------------------------------------------------------------------------------//
//affichage des erreurs PHP
//---------------------------------------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);



function copyTo($fullPathFileSource, $destinationDir ){
   $fileName = basename($fullPathFileSource);
  if (is_dir($destinationDir)) {

      if (!chmod($destinationDir, 0755)) {
         echo "Cannot change the mode of directory ($destinationDir)";
      };
    if(is_writable($destinationDir)){
      
      copy( $fullPathFileSource , $destinationDir . $fileName );    
    }else{
      echo " Droits en écriture non autorisés sur le dossier " . $destinationDir;
      exit;
    }
  }else{
    echo " Dossier inexistant :" . $destinationDir;
    exit;
  }
}

//$datetime = date("Ymd");
$datetime= ("20210333");
$date_lettre = strftime(" %d %B %Y"); //pour le titre image

$archive_texte ="texte/";
$liste_photo ="texte/liste_photo.txt";

$photo_origine = "images/origine/" . $datetime . "**.jpg";

// extraire les fichiers qui contienne la variable
foreach(glob("images/origine/".$datetime."**.jpg") as $file){

  //extraire le nom du fichier
  $archive = basename($file);
  // si le fichier contient a-
  if (fnmatch("*[a-]*",$archive)) { 
     $credit= "facebook";
     echo "credit<br>" .$credit."<br />";
  } else { 
     echo "erreur"; 
  } 

  if (file_exists($photo_complet)) {// si la photo existe
    copyTo($fullPathFileSource, "images/albums/album1/" );
    copyTo($fullPathFileSource, "images/albums/album1/thumbs/" );
  }
}



.
Cordialement,
Jordane
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021

Bonjour Jordane.

J'ai tardé un peu à te répondre parce que j'ai essayé ta proposition et cela fonctionne trés bien,. et je te remercie pour ton aide.

Mais maintenant, j'ai un autre problème. Si je dois ouvrir un autre post, dis le moi. sinon voici le pb

dans ce script si est false ne foncionne pas.

$datetime = date("Ymd");

if(file_exists ("pj/images/origine/".$datetime."-a.jpg") || ("pj/images/origine/".$datetime."-b.jpg") || ("pj/images/origine/".$datetime."-c.jpg") || ("pj/images/origine/".$datetime."-d.jpg") )
	// si le fichier existe
		{
			echo "date  " .$datetime;
			echo "si le fichier existe je fais ca";
		}
//Si le fichier n'esiste pas
		else
		{
			echo "date 2 " .$datetime;
			echo "si le fichier n existe pas je fais ca";
		}



Que le fichier existe ou n'existe pas, le même message s'affiche: date 20210322 si le fichier existe je fais ca

Quelle est mon erreur?
Messages postés
32045
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2021
3 385 >
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021

Il te faut appeler la fonction file exist pour chaque fichier...

if(file_exists ("pj/images/origine/".$datetime."-a.jpg") || file_exists("pj/images/origine/".$datetime."-b.jpg") || file_exists("pj/images/origine/".$datetime."-c.jpg") || file_exists("pj/images/origine/".$datetime."-d.jpg") )
Messages postés
83
Date d'inscription
mardi 6 juin 2017
Statut
Membre
Dernière intervention
23 mars 2021
>
Messages postés
32045
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2021

Bonjour Jordane.

Juste un petit message pour te remercier beaucoup pour ton aide et pour ta patience pour nous tous, surtout pour moi, qui ne savons pas beaucoup mais qui avons envie d'apprendre.

Merci pour m'avoir permis de mettre en place "La pensée du jour" sur ma page et faire que chaque jour elle change.

Tu peux voir le résultat ici. http://lenergie-vive.com/lev/structure_page.php.

A bientôt surement.
Daniel