Page 1 sur 1

Pb sur failed to open stream

Posté : 25 févr. 2007, 23:31
par sacco
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

Posté : 25 févr. 2007, 23:41
par Truc
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.

Posté : 25 févr. 2007, 23:48
par sacco
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;
    }
  ?>
  

Posté : 25 févr. 2007, 23:52
par jojolapine
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...

Posté : 25 févr. 2007, 23:54
par sacco
les lignes sont respectivement

$aFirst = file($sFileOriginal);

$aLast = file($sFileModified);

Posté : 26 févr. 2007, 00:25
par Invité
a ton avis que veulent dire ces mots:
Permission denied
?

Posté : 26 févr. 2007, 00:29
par sacco
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??

Posté : 26 févr. 2007, 14:16
par Truc
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.