Unlink Permission denied
benito
-
Manu -
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
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
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 ?
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 ?