Amélioration de code
Hors ligneAudayls Le 22/04/2006 à 00:13 Profil de Audayls Configuration de Audayls

Jeune Padawan
Bonjour,

     Lorsque je débutai en PHP (il n'y a pas si longtemps que cela ) je découvris un forum nommé DNF (forum entièrement en PHP sans base de donnée). Puis avec le temps, j'ai pu observer que certaines régles tels que "register_globals Off" étaient contournées par des solutions assez douteuse comme par "if(!@ini_get('register_globals')) {if(phpversion()>=4.1)import_request_variables("GPC");}"

     Comme j'apprécie particulièrement ce forum, j'ai pour projet de le "normiser" avec "register_globals Off", "error_reporting
E_ALL
" ... Mais desormais j'ai dépassé mes limites personnelles car je veux un script très propre (que je ne peux pas faire !)

     Donc si une (ou plusieurs) âme(s) charitable(s) pouvaient lire la première partie du code que j'ai nettoyé
(attention je ne veux pas que vous la corrigiez à ma place ! Je voudrais simplement que vous le lisiez et que vous me disiez après : là c'est crade il faudrait faire çà ... là ce n'est pas utile etc...)

Fonction 1
function get_ip() {
     if(isset($_SERVER))
          if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
          elseif(isset($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP'];
          else $ip = $_SERVER['REMOTE_ADDR'];
     else if(getenv('HTTP_X_FORWARDED_FOR')) $ip = getenv('HTTP_X_FORWARDED_FOR');
           elseif(getenv('HTTP_CLIENT_IP')) $ip = getenv('HTTP_CLIENT_IP');
           else $ip = getenv('REMOTE_ADDR');
     return $ip;
}


Fonction 2
function fast($url,$type,$text=null) {
     $fp=fopen($url,$type);
     if (isset($type) AND $type == 'r') {
               $text = '';
               while(!feof($fp)) $text .= fgets($fp,4096);
     }
     else fputs($fp,$text);
     fclose($fp);
     if (isset($type) AND $type == 'r') return $text;
     else return TRUE;
}


Fonction 3
function suppr($file) {
    if (isset($file) AND !empty($file)) {
          if (file_exists($file)) $delete = unlink($file);
          if (file_exists($file)) {
               $filesys = ereg_replace('/','\\',$file);
               if (function_exists('chmod')) $delete = chmod ($file, 0775);
               if (function_exists('system')) $delete = system('del '.$filesys);
               $delete = unlink($file);
               if (file_exists($file)) return FALSE;
               else return TRUE;
          }
         else return TRUE;
     }
     else return FALSE;
}


Fonction 4
function pix($txt,$type,$tp) {
     if (!isset($tp)) {
          $chars=array(32=>4,4,5,9,7,12,8,3,5,5,7,9,4,5,4,5,7,7,7,7,7,7,7,7,7,7,5,5,9,9,9,6,10,8,8,9,9,7,6,9,8,5,5,8,6,9,8,9,7,9,8,8,7,8,8,11,8,7,8,5,5,5,9,7,7,7,7,6,7,7,4,7,7,3,4,7,3,11,7,7,7,7,5,6,4,7,7,9,7,7,6,7,5,7,9,11,7,11,3,7,5,9,7,7,7,17,8,5,12,11,8,11,11,3,3,5,5,6,7,11,7,11,6,5,11,11,6,7,4,4,7,7,7,7,5,7,7,11,6,7,9,0,11,7,6,9,6,6,7,7,7,4,7,6,6,7,11,11,11,6,8,8,8,8,8,8,11,9,7,7,7,7,5,5,5,5,9,8,9,9,9,9,9,9,9,8,8,8,8,7,7,7,7,7,7,7,7,7,11,6,7,7,7,7,3,3,3,3,7,7,7,7,7,7,7,9,7,7,7,7,7,7,7,7);
          $max = 100;
     }    
     else {
          $chars = array(32=>4,4,7,9,8,14,10,4,6,6,8,9,4,6,4,8,8,8,8,8,8,8,8,8,8,8,4,4,9,9,9,7,11,9,8,8,9,8,8,9,9,6,6,8,7,10,9,9,8,9,8,8,8,9,8,12,8,8,8,6,8,6,10,8,8,8,8,7,8,8,5,8,8,4,5,8,4,12,8,8,8,8,6,7,5,8,8,10,8,8,7,8,6,8,9,11,8,11,4,8,6,12,8,8,8,20,8,6,12,11,8,11,11,4,4,7,7,7,8,11,8,11,7,6,12,11,7,8,4,4,8,8,8,8,6,8,8,11,7,9,9,0,11,8,6,9,7,7,8,8,8,4,8,7,7,9,13,13,13,7,9,9,9,9,9,9,12,8,8,8,8,8,6,6,6,6,9,9,9,9,9,9,9,10,9,9,9,9,9,8,8,8,8,8,8,8,8,8,12,7,8,8,8,8,4,4,4,4,8,8,8,8,8,8,8,9,8,8,8,8,8,8,8,8);
          $max = 335;
     }
     $cp = 0;
     $c_count = strlen($txt);
     while($cp < $c_count) {
          $cl = ord($txt[$cp]);
          if (isset($cl) AND $cl >= 32 AND $cl <= 255) $pixs = $chars[$cl];
          else return FALSE; $cp++;
     }
     if (isset($type) AND $type == 2) return $pixs;
     if (isset($pixs) AND isset($max) AND $pixs > $max) $txt .= '...';
     while($pixs > $max) {
          $txt = substr($txt,0,strlen($txt)-4).'...';
          $pixs = pix($txt,2,$tp);
     }
     return $txt;
}      


Fonction 5
function load($pseudo,$password) {
    global $include_path;
     if (file_exists($include_path.'dnf/f/membres.php')) require_once($include_path.'dnf/f/membres.php');
     if (isset($$pseudo)) $ARRAY = $$pseudo;
     if (isset($ARRAY['password']) AND $password == $ARRAY['password'] AND $ARRAY['perms'] == 10) return true;
     elseif (isset($multipass) AND $password == $multipass AND $ARRAY['perms'] == 10) return true;
     else return false;
}


Fonction 6
function rep($dir,$type) {
     global $ok;
     $directory = @opendir($dir);
     @readdir($directory);
     while(false !== ($file = @readdir($directory))) {
          if (isset($file) AND $file != '.' AND $file != '..' AND $file != 'index.html' AND $file != 'smiley.php' AND $file != 'config.php') {
               if (is_dir($dir.'/'.$file)) rep($dir.'/'.$file,$type);
               elseif (isset($type) AND $type == 1) unlink($dir.'/'.$file);
               else { $u1=$dir.'/'.$file;
                    if (isset($type) AND $type == 'topics') {
                    ereg('topic([0-9]+)',$file,$tnb);
                    $u2='dnf/'.$type.'/F1T'.$tnb[1].'.txt';
                    }
                    else $u2='dnf/$type/'.$file;
                    if (!rename($u1,$u2))
                         if (copy($u1,$u2)) {
                              unlink($u2);
                              $ok=1;
                         }
                    else $ok=1;
               }
          }
     }
     @closedir($directory);
}


Fonction 7
function find_topics($rep,$modo,$reload,$ice=false) {
     global $topics,$moddate,$crack_step,$lim;
     if ($dir = opendir($rep)) {
          while (($file = @readdir($dir)) !== false)
               if (is_file($rep.$file)) {
                    if (isset($reload) AND $reload == 2) ereg('F([0-9]+)T([0-9]+)',$file,$ft_file);
                    elseif (isset($reload) AND $reload == 1) {
                         ereg('(topic)([0-9]+)',$file,$ft_file);
                         if (isset($ft_file[2])) $ft_file[1] = 1;
                    }
                    if (isset($ft_file[1]) AND !isset($topics[$ft_file[1]][$ft_file[2]])) {
                         $tfile = file($rep.$file);
                         if (isset($ice)) unset($tfile[count($tfile)-1]);
                         ereg('^<script[^>]*>TT\(([0-9]+),[0-9]+,"(.+)")</script>[\r\n]+$',$tfile[0],$tinfo);
                         ereg('<!--pseudo-->([^\\$<]+)',$tfile[1],$tauteur);
                         ereg('<!--pseudo-->([^\\$<]+)',$tfile[count($tfile)-1],$tlast);
                         ereg('<!--date-->([0-9]{2,2}/[0-9]{2,2})[^0-9]+([0-9]{2,2}:[0-9]{2,2})',$tfile[count($tfile)-1],$tdate);
                         $tauteur = pix($tauteur[1],1,0);
                         $tlast = pix($tlast[1],1,0);
                         $tline = ereg_replace('<','&lt;',ereg_replace('>','&gt;','TC('.$ft_file[2].','.(count($tfile)-2).','.$modo.','.$tinfo[1].',\''.$tauteur.'\',\''.$tinfo[2].'\',\''.$tlast.' le '.$tdate[1].'&#44; '.$tdate[2].'\');'));
                         if (isset($crack_step)) fputs($lim,$ft_file[1].'-'.$ft_file[2].'-'.filectime($rep.$file).'-'.$tline."\n");
                         else {
                              $topics[$ft_file[1]][$ft_file[2]] = $tline;
                              $moddate[$ft_file[1]][$ft_file[2]] = 'x'.filectime($rep.$file);
                         }
                }
                    unset($ft_file,$tfile);
                    clearstatcache();
               }
          closedir($dir);
     }
}


Fonction 8
function parse_ini_file2($file,$ProcessSections = TRUE) {
     $Str='';
     $fp=fopen('dnf/f/forums.txt','r') OR exit('Pas de forums.txt');
     while(!feof($fp))
          $Str.=fgets($fp,4096);
     fclose($fp);
     $Section = NULL;
     $Data = array();
     if ($Temp = strtok($Str,"\r\n")) {
          do {
               switch ($Temp{0}) {
                    case ';':
                    case '#': break;
                    case '[':
                         if (!isset($ProcessSections)) break;
                         $Pos = strpos($Temp,'[');
                         $Section = substr($Temp,$Pos+1,strpos($Temp,']',$Pos)-1);
                         $Data[$Section] = array(); break;
                    default:
                         $Pos = strpos($Temp,'=');
                              if ($Pos === FALSE) break;
                              $Data[$Section][trim(substr($Temp,0,$Pos))] = trim(substr($Temp,$Pos+1),' "');
                              break;
               }
          }
          while ($Temp = strtok("\r\n"));
     } return $Data;
}


Fonction 9
function zero($nb,$z) {
     while(strlen($nb)<$z) $nb='0'.$nb; return $nb;
}


Fonction 10
function config($var,$val,$type=0) {
     if ($_GET['config'] = fast('dnf/f/config.php','r','')) {
          if (!isset($type)) $_GET['config'] = ereg_replace('(\\\$$var *= *)[0-9]+;','\\1'.intval($val).';',$_GET['config']);
          else $_GET['config'] = ereg_replace('(\\\$$var *= *)\'[^\']*\';','\\1\''.str_replace('"','',$val).'\';',$_GET['config']);
     $_GET['config'] = fast('dnf/f/config.php','w',$_GET['config']); return TRUE;
     }
     else return FALSE;
}


Merci d'avance pour vos réponses !
--
'Cause it's a bittersweet symphony, this life
Hors ligneAudayls Le 23/04/2006 à 00:34 Profil de Audayls Configuration de Audayls

Jeune Padawan
Désolé pour le flood ... je n'avais pas vu la fonction pour afficher le code ! Merci au Webmaster pour avoir corriger mon post .
Derniere chose : faîtes pas attention au "CVS obimo" les noms de version ce n'est pas mon fort ... Mais je suppose que je vais trouver un nom de version d'ici là que je termine ce projet !
--
'Cause it's a bittersweet symphony, this life
Hors ligneAnthony Le 23/04/2006 à 13:16 Profil de Anthony Configuration de Anthony

Admin
Salut,

le code est tellement long, je pense qu'il faudrait le fractionner en plusieurs bouts de codes plus courts. Attention au trans_sid car pour le référencement c'est mauvais
--

Hors ligneAudayls Le 23/04/2006 à 21:09 Profil de Audayls Configuration de Audayls

Jeune Padawan
Le referencement de cette page ne doit pas être fait puisque seul l'administrateur à acces à cette page (donc pas la peine de la retrouvée sur Google ) Par contre sur le fichier contenant le forum, je suivrai tes conseil en n'utiliserant pas "trans_sid".
Là je suis crevé (c'est dur le basket ! lol) donc je fractionnerai le code demain dans mon 1er post .
--
'Cause it's a bittersweet symphony, this life
Hors ligneAnthony Le 23/04/2006 à 21:17 Profil de Anthony Configuration de Anthony

Admin
Ok pas de problème on verra demain
--

Hors ligneAudayls Le 01/05/2006 à 19:18 Profil de Audayls Configuration de Audayls

Jeune Padawan
Voilà j'ai fractionné le code (pour le moment je n'ai mis que les fonctions (il faut que je trouve comment je vais fractionner l'autre partie du code ))
--
'Cause it's a bittersweet symphony, this life
Hors ligneAnthony Le 01/05/2006 à 19:45 Profil de Anthony Configuration de Anthony

Admin
Un exemple avec la fonction 2 :


<?php
function fast($url,$type,$text=null) {
     $fp=fopen($url,$type);
     if (isset($type) AND $type == 'r') {
               $text = '';
               while(!feof($fp)) $text .= fgets($fp,4096);
     }
     else fputs($fp,$text);
     fclose($fp);
     if (isset($type) AND $type == 'r') return $text;
     else return TRUE;
}
?>


le isset est inutile étant donné que t'es obligé de passer un $type en argument. donc un if($type === 'r') suffit.
--

Hors ligneAudayls Le 01/05/2006 à 21:12 Profil de Audayls Configuration de Audayls

Jeune Padawan
Je vais corriger les "isset" en trop au plus vite
Par contre pourquoi mettre "===" à la place de "==" ? il y a un avantage sans doute mais j'ignore lequel ...
--
'Cause it's a bittersweet symphony, this life
Hors ligneAnthony Le 01/05/2006 à 22:48 Profil de Anthony Configuration de Anthony

Admin
En fait lorsque tu utilises le triple égal PHP n'effectue pas de conversion de types, c'est donc plus rapide. Mais attention


<?php
$variable
='1';

if(
$variable===1)
{
     echo 'test';
}
?>


ça n'affichera jamais "test" car $variable est du type string, et non int. Pour que ça fonctionne il aurait soit fallu mettre un double égal, soit mettre $variable=1;

les guillemets ont leur importance.

a +
--

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels