Unlink Permission denied

benito -  
 Manu -
Bonjour,

Depuis hier l'application de mon site plante à un endroit où habituellement il ne plantaient pas.
Je n'ai rien modifié dans cette partie du code pourtant.

L'erreur ne se produit que sous Windows. Sous Linux tout ce passe à merveille.

voici mon message d'erreur :
Warning: unlink(./dev/lib/errors/debug_2009_08_18.log) [function.unlink]: Permission denied in F:\Internet\EasyPHP\www\testeditphp\dev\lib\inc\core\lib.class.debug.php on line 320

voici le code correspondant

316 if( file_exists( $this->DebFileName))
317 {
318 chmod($this->DebFileName, 777 );
319
320 if( !unlink( $this->DebFileName ) )
321 {
322 echo LINE_SEPARATOR . 'Impossible de supprimer le fichier : ' . $this->DebFileName . LINE_NEXT . __CLASS__ . " - " . __FILE__ . " - " . __LINE__ . LINE_SEPARATOR;
323 return false;
324 }
325 }

* ./dev/lib/errors/debug_2009_08_18.log = $this->DebFileName
En gros il veut bien me faire le "chmod" mais refuse de me supprimer le fichier.
Je pense que cela vient de la configuration d'Apache... Mais j'ai tout essayé et je n'y arrive pas.

Ma configuration
Windows XP
Serveur Web Apache 2 (installation easyPHP)

merci de votre aide

4 réponses

dubcek Messages postés 19030 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
hello
vérifier les droits et propriétaire du dossier ./dev/lib
0
benoit35 Messages postés 5 Statut Membre 1
 
Merci Cubcek pour ta réponse,

En fait j'ai un peu mieux cerné le problème.
Le problème ne vient pas vraiment du morceau de code qui supprime le fichier, mais du morceau de code où je créé le fichier.

if( !$this->handle = @fopen( $this->DebFileName, "a+" ))
{
echo LINE_SEPARATOR . 'Impossible de creer le fichier : ' . $this->DebFileName . LINE_NEXT . __CLASS__ . " - " . __METHOD__ . " - " . __FUNCTION__ . LINE_NEXT . __FILE__ . " - " . __LINE__ . LINE_SEPARATOR;
return false;
}

Il créé bien le fichier, mais sous Windows il le créé en mode "lecture seule". Je dirais que si on compare ça au masque sous Linux se serait '-r--r--r--' ....

Hors le même code sous linux me créé le même fichier en mode '-rw-r--r--' ce qui fait que lors de la tentative de la suppression tout se passe bien sous Linux mais plante sous Windows.

J'ai essayé en ajoutant le code :

$old = umask(0);
chmod($this->DebFileName, 0755 );
umask($old);

après le fopen ... mais rien n'y fait

Est ce qu'il y a un moyen de paramétrer dynamiquement le mask lors de la création d'un fichier ?
0
Manu
 
Bonjour,

Sous Windows, à la création de fichier, les droits sont attribués par héritage dans le répertoire parent. Il vous faut donc vérifier les droits héritables dans le répertoire parent (à distinguer des droits du répertoire parent).

Manu
0
benoit35 Messages postés 5 Statut Membre 1
 
Merci Manu pour cette réponse.

Par contre ... je sais voir et modifier les droits d'un répertoire ou un fichier ... mais où et comment modifie-t-on les droits "héritables" sous Windows ?
0
Manu
 
Bonjour,

où et comment modifie-t-on les droits "héritables" sous Windows ?
Ce sont les droits marqués OI (object inherit), CI (container inherit) et IO (inherit only) dans la commande cacls.

Manu
0