Pb sur failed to open stream

Eléphant du PHP | 180 Messages

25 févr. 2007, 23:31

Bonjour,

voilà j'ai un script qui comprare une serie de fichier log (l'ancien et le nouveau) et en injecte dans une base le fichier de la différence des deux .

mon script fait bien le boulot mais j'ai quand-même de warning


Warning: file(C:/wamp/www/Arcserve/bck/.) [function.file]: failed to open stream: Permission denied in C:\wamp\www\Arcserve\ori.php on line 162

Warning: file(C:/wamp/www/Arcserve/tmp/.) [function.file]: failed to open stream: Permission denied in C:\wamp\www\Arcserve\ori.php on line 164

merci d'avance pour info

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

25 févr. 2007, 23:41

Salut,

Je dirais que tu as 2 erreurs, une ligne 162 l'autre ligne 164... voilà ça n'aide pas vraiment ?!

N'oublie pas de poster le code en relation avec les erreurs sinon personne ne pourra donner de vrai solutions.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 180 Messages

25 févr. 2007, 23:48

voici mon code
<?php 
// Pour éviter toute donnée en double nous comparons 
//l'ancien et le nouveau log et créons un log de la diff 
include ('Param.inc');

$DirTmptest = opendir($Tmptest);

While (false!==($filenametmp = readdir($DirTmptest)))
   {
 	    $sFirst = $Bcktest.$filenametmp;
 	    $sLast = $Tmptest.$filenametmp;
 	    		
 		if (file_exists($sFirst)=== FALSE)
 	 	{
 	 		touch($sFirst); 
 	 	}
 	 	
 	 	$fileadd=$Dirtest.$filenametmp;
 		$Resultdiff = FileDiff($sFirst,$sLast);
 		foreach ($Resultdiff as $clef => $val) {
    	echo 'LIGNE ', $clef+1, ' : ';
    	switch (key ($val)) {            
        case 'ADDED' :               
        {$fp=fopen($fileadd,"a");
        fwrite($fp,$val['ADDED']);
        fwrite($fp,'
');}
        fclose($fp);
 break;
  
    	
    }
  }  
          
    unlink($sFirst);
 	copy($sLast,$sFirst);
 	unlink($sLast);
  
}   
  

set_time_limit (0);
$dh  = opendir($Dirtest);

while (false !== ($filename = readdir($dh)))
{
if(file_exists($Brightstortest)==true)	  		   
	{    
    $Log = file($Brightstortest);
    //ouverture BD
    $sqldb = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");  
    $query = "insert into journal (JDate,JHeure,JInfo,JAction) values(:JDate,:JHeure,:JInfo,:JAction)";
    $stmt = $sqldb->prepare($query);
    $sqldbctrl = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");
    $queryctrl = "select :JDate,:JHeure,:JInfo,:JAction from journal";
    $stmtctrl = $sqldbctrl->prepare($queryctrl);
    foreach ($Log as $ligne)
    	{
        $pos1 = strpos($ligne,"]");
        $entete = substr($ligne,1,$pos1-1);
        $JAction = substr($ligne,$pos1+2,strlen($ligne)-$pos1);
        list($par1,$par2) = explode(' ',$entete);
        list($JDate,$JHeure) = explode('-',$par1);
        list($m,$j,$a) = explode('/',$JDate);
        $JDate = $a.'-'.$m.'-'.$j;
        $Datebis =$a.$m.$j;    
        $par2 = substr($par2,1,strlen($par2)-1);
        List($i1,$i2,$i3,$i4,$i5,$i6,$i7,$i8,$i9) = explode(',',$par2);
        $i=$i1.$i2.$i3.$i4.$i5.$i6.$i7.$i8.$i9;
        //******Pour 4 jours de rétension********//  
        $Format = 'Ymd';
        $Datesys = (int)date($Format);
        $Diff = $Datesys-(int)$Datebis;            	             
        
        $stmt->bindParam(':JDate',$JDate);
        $stmt->bindParam(':JHeure',$JHeure);
        $stmt->bindParam(':JInfo',$i);
        $stmt->bindParam(':JAction',$JAction);
        $stmt->execute();
            
        }
        $erase = unlink($Brightstortest);
    } 
  //*******
 
$files = glob($Arcservetest); //permet la recherche sur critère arcserve
  
foreach ($files as $filename)
    { 
    	  echo ($filename);
          echo '</br>' ; 
          
      if(file_exists($filename)==true)
        {     
   			echo ("fichier trouvé");
   			echo '</br>';        	
          $Log = file($filename);
         //Pas de timeout;
         set_time_limit (0);
         
         //ouverture BD
         $sqldb = new PDO("mysql:host=localhost;dbname=test","root","") or die ("impossible d'ouvrir bdd !");  
         $query = "insert into journal (JDate,JHeure,JInfo,JAction) values (:JDate,:JHeure,:JInfo,:JAction)";
         $stmt = $sqldb->prepare($query);
  
           foreach ($Log as $ligne)
            {
	         $JDate =substr($ligne,0,4).'-'.substr($ligne,4,2).'-'.substr($ligne,6,2);
             $Datebis = substr($ligne,0,4).substr($ligne,4,2).substr($ligne,6,2);
             $JHeure = substr($ligne,9,6);
             $i = substr($ligne,18,4);    
             $JAction = substr($ligne,23,$ligne-1);     
  
           //******Pour 7 jours de rétension********//  
 
           $Format = 'Ymd';
           $Datesys = (int)date($Format);  
           $Diff = $Datesys-$Datebis;  
    
          //**************************************// 
     
			if($Diff<60)
          		{ 
              	if($i<>'PE  ' and $i<>'    ')    
                	{
	                $stmt->bindParam(':JDate',$JDate);
	                $stmt->bindParam(':JHeure',$JHeure);
	                $stmt->bindParam(':JInfo',$i);
	                $stmt->bindParam(':JAction',$JAction);
	                $stmt->execute();
                	}
				}
     		}
		}
		
		$erase = unlink($filename);
		
	} 
}
  echo "chargement termine!";

/******************************************Fonction diff fichier***********************************/
/**
   function fileDiff ()
    check la differences entre 2 fichiers : additions, suppressions et modifications
    @Param (string) sFileOriginal : original fichier d'origine
    @Param (string) sFileModified : nouveau fichier 
    @Return (mixed) : false (boolean) si ko, (array) aDiff avec les différences s'il y en a
    */
    function FileDiff ($sFileOriginal, $sFileModified) {
    /**
    checks si fichiers sont  accessibles. Si non , exit.
    */
    
    if (!file_exists ($sFileOriginal) || !file_exists ($sFileModified)) {
    return false;
    }
    /**
    Pour obtenir le contenant de chaque fichier dans un tableau, chaque entrée étant une ligne du fichier 
    */
    $aFirst = file($sFileOriginal);
   
    $aLast = file($sFileModified);
   
    /**
    Pour obtenir la plus grande valeur de  taille 
    */
    $iMax = max (count ($aFirst), count ($aLast));
    /**
    crée une fonction de rappel de service pour enlever \ r \ n \ t ou espace à l'extrémité ou le début de la ligne 
    */
    $myTrim = create_function ('$val', 'return trim ($val);');
    /**
    enlève les entrées vides dans les deux tableaux, sans toucher les index 
    */
    $aFirst = array_filter (array_map ($myTrim, $aFirst));
    $aLast = array_filter (array_map ($myTrim, $aLast));
    /**
    declaration du tableau aDiff
    */
    $aDiff = array ();
    /**
    Boucle jusqu'à la fin du plus grand fichier
    */
    for ($i = 0; $i < $iMax; $i++) {
    if (isset ($aFirst[$i])) {
    if (isset ($aLast[$i])) {
    if ($aFirst[$i] !== $aLast[$i]) {
    /**
    si les deux entrées  différentes, ainsi, il y a modification 
    */
    $aDiff[$i]['MODIFIED'] = htmlentities ($aLast[$i]);
    }
    } else {
    /**
    il y a une entrée originale, mais rien dans le dossier modifié, ainsi, c'est une suppression 
    */
    $aDiff[$i]['SUPPR'] = htmlentities ($aFirst[$i]);
    }
    } else {
    if (isset ($aLast[$i])) {
    /**
    il y a une entrée modifiée mais aucune entrée originale correspondante, ainsi, c'est une addition 
    */
    $aDiff[$i]['ADDED'] = htmlentities ($aLast[$i]);
    }
    }
    }
    return $aDiff;
    }
  ?>
  

ViPHP
ViPHP | 3607 Messages

25 févr. 2007, 23:52

deuxième étape:
Nous dire à quoi correspondent les lignes 162 et 164 dans ton fichier... (on va non plus compter les lignes :roll: )
La suite au prochain épisode...

Eléphant du PHP | 180 Messages

25 févr. 2007, 23:54

les lignes sont respectivement

$aFirst = file($sFileOriginal);

$aLast = file($sFileModified);

Invité
Invité n'ayant pas de compte PHPfrance

26 févr. 2007, 00:25

a ton avis que veulent dire ces mots:
Permission denied
?

Eléphant du PHP | 180 Messages

26 févr. 2007, 00:29

je pense une histoire de privilège sur le fichier ou dossier or la sécurité est au plus basse accès tout le monde . Donc de ce coté la oui.

Sauf si le problème vient du fichier en prise mais par quoi??

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 févr. 2007, 14:16

Il faut remonter le script jusqu'à trouver les vraies lignes qui posent souci, c'est à dire :
$sFirst = $Bcktest.$filenametmp;
$sLast = $Tmptest.$filenametmp;
Lorsque tu liste un dossier tu récupère aussi les pointeurs sur le dossier courant (.) et parent (..), regarde l'exemple de la doc pour les éviter.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute