Disparition des fichiers « skin »

Vos idées et demandes pour la prochaine mise à jour du script sont les bienvenues ici - Your ideas and suggestions for the next update.

Modérateurs : boulmontjj, Pierre G., Malabar, Otomatic

Otomatic
Modérateur
Modérateur
Messages : 650
Inscription : Ven 11 Août 2006, 09:33
Localisation : Paris
Contact :

Disparition des fichiers « skin »

Messagepar Otomatic » Jeu 06 Fév 2014, 13:04

Bonjour,

À mon humble avis, le problème répétitif de disparition des « skins » après édition par l'administration provient de la façon de procéder pour enregistrer le fichier modifié et plus particulièrement de la fonction write de la class write_files dans le fichier livre_or\include\funct_write_files.php :

Code : Tout sélectionner

   function write($file){
      @chmod($file, 0777);

      $fd = @fopen($file, "w+");

      if (!@fwrite($fd, $this->donnees_write))
         return false;

      @fclose($fd);
      @chmod($file, 0755);
      return true;
   }

D'office, dans cette fonction est utilisé chmod(), sans même vérifier, au préalable, si on peut écrire le fichier. La fonction chmod(), chez beaucoup d'hébergeurs, est désactivé (disable_functions = dans php.ini), mais cette désactivation est masquée, ce qui fait que l'on croit que chmod a correctement fonctionné alors que ce n'est pas le cas ; de même, chez beaucoup d'hébergeurs, il n'est absolument pas nécessaire d'effectuer un chmod() avant de vouloir écrire un fichier, les droits sur les fichiers sont suffisants pour permettre au propriétaire dudit fichier (les scripts PHP du site) d'écrire dans les fichiers.
Ce que je préconise, AVANT d'effectuer un éventuel chmod(), est de vérifier que l'on peut écrire le fichier, par un is_writable($file). Entre autres, affecter d'office des droits 0777 est superfétatoire, 0644 ou, à la rigueur 0755, est amplement suffisant. De plus, terminer la fonction par un chmod(..,0755) n'est pas logique, car on ne sait pas quels étaient les droits d'origine.
Donc :

Code : Tout sélectionner

   function write($file){
      if(is_writable($file)) {

      $fd = @fopen($file, "w+");

      if (!@fwrite($fd, $this->donnees_write))
         return false;

      @fclose($fd);
      return true;
      }
      else
         return false;
   }
Ce n'est pas par ce que l'erreur se propage qu'elle devient vérité. Gandhi

Revenir vers « Suggestions d'amélioration du script »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités