IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Obfuscater minifier un script php


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut Obfuscater minifier un script php
    Bonjour,

    je recherche un script (ou un logiciel) gratuit qui permet de :

    • compresser un fichier php : un peu comme on peut le faire en javascript où on passe d'un fichier lisible (avec indentation et tout) à un fichier contenant une seule ligne très longue.
    • ou obfusquer le code php pour éviter la modification de celui-ci : je veux que ça soit difficile de faire du reverse engineering.
    • ou les 2 points précédents à la fois.


    J'ai déjà cherché sur le net des obfuscator php online mais chaque fois que je copie un code source simple dedans et que je le test en local, j'ai des erreurs php.

    Pour le moment, je n'ai pas trouver de script qui fonctionnent. Je précise aussi que je ne veux pas d'extensions pour php ou apache (comme bcompiler) car je ne pourrai pas déployer en production les .dll de ses extensions (hébergement mutualisé).

    Merci d'avance

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Je précise aussi que je ne veux pas d'extensions pour php ou apache (comme bcompiler) car je ne pourrai pas déployer en production les .dll de ses extensions (hébergement mutualisé).
    Ce n'est donc pas possible. Tous les encoder (Zend Guard , ionCube ...) existant passe par une extension.

    L'obfuscation n'a que pour seul intérêt la diminution du poids du fichier , c'est pourquoi c'est assez populaire avec le javascript. Croire qu'on cache son code avec est une grossière erreur.

    Note : A moins que tes clients est accès direct au fichiers , y'a pas vraiment de raison d'encoder tes fichiers php

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pour minifier tu peux déjà faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $tokens = token_get_all(file_get_contents(__FILE__));
     
    foreach($tokens as $token)
    {
        if(is_array($token))
        {
            if($token[0] !== T_WHITESPACE)
            {
                echo $token[1];
            }
        }
        else
        {
            echo $token;
        }
    }

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut
    Je souhaite un script qui réduise le poids du fichier .php ou qui obfusque légèrement par exemple en renommant les variables par d'autres noms, les noms des fonctions, encode les caractères autrement, enlève l'indentation du ciode, les commentaires...

    Bref un script qui empêche le reverse engineering pour le commun du mortel, mais ne le rend pas impossible pour quelqu'un qui a un peu de temps et qui si connait.

    Je souhaite encoder les fichiers car une partie de ce code sera "donné en l'état" à d'autres personnes. Je veux éviter que ces personnes puissent modifier facilement ces fichiers.

    EDIT : Je testerai ta fonction stealth35, merci


    D'autres idées ?

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par ulspider Voir le message
    Je souhaite un script qui réduise le poids du fichier .php ou qui obfusque légèrement par exemple en renommant les variables par d'autres noms, les noms des fonctions, encode les caractères autrement, enlève l'indentation du ciode, les commentaires...

    Bref un script qui empêche le reverse engineering pour le commun du mortel, mais ne le rend pas impossible pour quelqu'un qui a un peu de temps et qui si connait.

    Je souhaite encoder les fichiers car une partie de ce code sera "donné en l'état" à d'autres personnes. Je veux éviter que ces personnes puissent modifier facilement ces fichiers.
    Réduire le poid je ne vois vraiment pas l'intérêt vu que PHP va de toute façon fabriquer un opcode. Quand à empêcher le reverse engeneering, tu vas avoir besoin des solution d'obstruction citées plus haut, mais elles ne passeront pas sur des hébergeurs mutualisés. Pour quel genre d'application as-tu un tel besoin ??

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut
    Réduire le poids ce n'est pas obligatoire, je veux seulement que lorsque le code est rendu non lisible, le fichier qui le contient ne fasse pas 2 ou 3 fois son poids initial.

    Comme dit précédemment, je veux que le code soit difficile à lire pour un œil humain (suppression indentations, commentaires, espaces,sauts de ligne, renommage des variables, des fonctions...)

    Par exemple, si un script transforme ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
     
    function affichage () {
    //affiche
    echo 'titi';
    }
    function affichage2 () {
    //affiche
    echo 'ti';
    }
    Cela donnerai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php function affichage (){echo 'titi';}function affichage2 (){echo 'ti';}
    Bref ça rebute un peu à la lecture. Quelqu'un qui s'y connait un peu pourrait ré-inverser le processus de minimisation mais il lui faudrait du temps.

    Pour l'utilisation, je souhaite éviter que des personnes (à qui je donnerai accès aux fichiers php) puissent modifier facilement ces fichiers.

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Réduire le poids ce n'est pas obligatoire, je veux seulement que lorsque le code est rendu non lisible, le fichier qui le contient ne fasse pas 2 ou 3 fois son poids initial.
    ça changera pas grand-chose, c'est du plain/text de toute façon...

    Bref ça rebute un peu à la lecture. Quelqu'un qui s'y connait un peu pourrait ré-inverser le processus de minimisation mais il lui faudrait du temps.
    Ou connaitre le raccourci magique d'Eclipse Ctrl + Shift + F pour réindenter le code (ce que je fais tout le temps).

    Si les obstrucateurs en ligne ne peuvent rien pour toi (car le code est trop complexe par exemple et que ça finit en erreur) alors malheureusement il n'y a pas de solution miracle à ma connaissance. Le mieux serait de ne pas donner les droit de modification sur les fichiers PHP à des tiers, ce qui peut se faire sous unix à condition de pouvoir paramétrer différents comptes utilisateurs...

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut
    Je viens de trouver cela :

    The PHP CLI (php.exe)

    php -h
    Usage: php [options] [-f] <file> [--] [args...]
    Option
    -w Display source with stripped comments and whitespace.

    Example:
    PHP Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
     
    /* adjust include_path to include PEAR */
    ini_set('include_path', ini_get('include_path').':/usr/share/pear');
     
    /* all your errors are belong to us */
    error_reporting(E_ALL);
     
    /* require PEAR and the parser */
    require_once('PEAR.php');
    require_once('HTML/BBCodeParser.php');
     
    /* get options from the ini file */
    $config = parse_ini_file('BBCodeParser.ini', true);
    var_dump($config);
    $options = &PEAR::getStaticProperty('HTML_BBCodeParser', '_options');
    $options = $config['HTML_BBCodeParser'];
    unset($options);
     
    /* do yer stuff! */
    $parser = new HTML_BBCodeParser();
    $parser->setText(@$_GET['string']);
    $parser->parse();
    $parsed = $parser->getParsed();
     
    ?>

    After php -w:
    PHP Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
     ini_set('include_path', ini_get('include_path').':/usr/share/pear'); error_reporting(E_ALL); require_once('PEAR.php'); require_once('HTML/BBCodeParser.php'); $config = parse_ini_file('BBCodeParser.ini', true); var_dump($config); $options = &PEAR::getStaticProperty('HTML_BBCodeParser', '_options'); $options = $config['HTML_BBCodeParser']; unset($options); $parser = new HTML_BBCodeParser(); $parser->setText(@$_GET['string']); $parser->parse(); $parsed = $parser->getParsed(); ?>
    C'est déjà moins lisible. Ensuite je peux créer un script php avec des regex qui transformera toutes les variables de la forme $login et $ahdhfjfjfjjf.

    Je pense que ça rendra le code assez illisible. Pour le coup du Ctrl + Shift + F, je connaissais pour éclipse java, ça fonctionne aussi pour le php ? Même si ça fonctionne, cela ne va pas remettre les commentaires ou renommer les variables, je pense (ou alors les IDE on vachement progresser )

    Autre idée ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pas besoin de regex les tokens sont la pour ça

  10. #10
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Tu as la technique avec les fonctions eval() et base64_decode() :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(base64_decode('...'));
    et même...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(gzinflate(base64_decode('...')));

    Dans la doc de PHP, nous pouvons voir ce commentaire qui donne un exemple d'utilisation.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut
    Merci stealth35, je ne connaissais pas les tokens php.

    De même le post de Eric2a est très intéressant.

    En combinant, l'ensemble des idées présentées ici, je pense que l'on peut s'amuser un peu pour compliquer la tache de l'utilisateur qui souhaiterai retrouver un code lisible

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    sinon t'as bcomplier

  13. #13
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    sinon t'as bcomplier
    BCompiler nécessite un .dll pour fonctionner.

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par ulspider Voir le message
    BCompiler nécessite un .dll pour fonctionner.
    oui c'est une extension

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Points : 203
    Points
    203
    Par défaut
    dans PHP 5.3 y'a la notion de phar qui existe, ça permet de faire que ton script est en 1 seul fichier, exécutable, compressé et illisible.

    C'est une équivalence au Jar de Java.

    Tuto:
    http://g-rossolini.developpez.com/tu...?page=phar#LIV

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par dtcSearch Voir le message
    dans PHP 5.3 y'a la notion de phar qui existe, ça permet de faire que ton script est en 1 seul fichier, exécutable, compressé et illisible.

    C'est une équivalence au Jar de Java.

    Tuto:
    http://g-rossolini.developpez.com/tu...?page=phar#LIV
    il suffit de le décompresser pour voir le contenu

  17. #17
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Citation Envoyé par Eric2a Voir le message
    Salut,

    Tu as la technique avec les fonctions eval() et base64_decode() :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(base64_decode('...'));
    et même...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(gzinflate(base64_decode('...')));

    Dans la doc de PHP, nous pouvons voir ce commentaire qui donne un exemple d'utilisation.
    Attention tout de même à ce genre de solution , les performances font en prendre un coup.

  18. #18
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut
    Je pense utiliser déjà la minimisation + renommage des fonctions + suppression des commentaires. Ça devrai être un bon début

  19. #19
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonsoir,

    je partage le code de la page de mon obfuscator/minifier puisque vous m'avez bien aidé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    <?php
    define ('VARIABLE_LENGTH',4);
     
    $code = '';
    $minify_code = '';
     
     
     
    function generate_variable_name () {
    	$alphabet_primaire = 'abcdefghijklmnopqrstuvwxyz';
    	$alphabet_secondaire = $alphabet_primaire.'0123456789';
     
    	$variable_name = '';
    	for ($i=0;$i<VARIABLE_LENGTH;$i++) {
    		$uppercase = (boolean) rand(0,1);
    		$alphabet = ($i==0) ? $alphabet_primaire : $alphabet_secondaire;
    		$alphabet = ($uppercase) ? strtoupper($alphabet) : $alphabet;
    		$variable_name .= substr($alphabet,rand(0,(strlen($alphabet)-1)),1);
    	}
     
    	return '$'.$variable_name;	
    }
     
    function no_variable_rename ($variable) {
    	$array = array ('$db','$pun_config','$cache');
    	if (in_array($variable,$array))
    		return true;
    	if (substr($variable,0,6)=='$lang_')
    		return true;
    	return false;
    }
     
    function variable_rename ($variable) {
    	static $tab_variable_rename = array();
     
    	if (no_variable_rename ($variable))
    		return $variable;
     
    	if (isset($tab_variable_rename[$variable]))
    		return $tab_variable_rename[$variable];
     
    	$new_variable_name = '';
    	do {
    		$new_variable_name = generate_variable_name ();
    	}
    	while (isset($tab_variable_rename[$new_variable_name]));
     
    	$tab_variable_rename[$variable] = $new_variable_name;
     
    	return $new_variable_name;
    }
     
    function eval_token ($token) {
    	if(!is_array($token))
    		return $token;
    	switch ($token[0]) {
    		case T_WHITESPACE : 
    			return ' ';
    			break;
    		case T_COMMENT : 
    			return '';
    			break;	
    		case T_VARIABLE : 
    			return variable_rename ($token[1]);
    			break;	
    		case T_LNUMBER : 
    			return '0x'.dechex($token[1]);
    			break;			
     
    		default:
    			return $token[1];
    	}
    	return '';
    }
     
    function minify_code ($code) {	
    	$tokens = token_get_all($code);
    	$return = '';
    	foreach($tokens as $token) {
    		$return .= eval_token ($token);
    	}
    	return $return;
    }
     
    if (!empty($_POST['code'])) {
    	$code = $_POST['code'];
     
    	$minify_code = minify_code ($code);
    }
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" dir="ltr">
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<title>Obfuscator</title>
    		<link rel="stylesheet" type="text/css" href="style.css" />
    	</head>	
    	<body>
    		<h3>Code initial</h3>
    		<form method="POST">
    			<textarea name="code" rows="40" cols="100"><?php echo $code ?></textarea>
    			<br/><br/>
    			<input type="submit" value="Valider"/>
    		</form>
    		<h3>Code après traitement</h3>
    		<textarea rows="40" cols="100"><?php echo $minify_code ?></textarea>
    	</body>
    </html>
    Voici ce que ça donne sur un cas pratique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
    function is_valid_format_value ($val,$minLength,$maxLength,$regex=null,$required=true) {
    	$val = trimValue ($val);
    	if ($required AND  emptyValue ($val))
    		return array('error' => 'required');
    	if(!is_null($regex) AND !preg_match ($regex,$val))
    		return array('error' => 'regex');
     
    	$length = pun_strlen($val);
    	if ($length<$minLength) 
    		return array('error' => 'minLength', 'arg1' => $length, 'arg2' => $minLength);
    	if ($length>$maxLength) 
    		return array('error' => 'maxLength', 'arg1' => $length, 'arg2' => $maxLength);
     
    	return array();
    }
     
    function is_valid_team_name ($val) {
    	$minLength = 3;
    	$maxLength = 30;
    	$regex = '/^[\w-. ]*$/';
     
    	return is_valid_format_value ($val,$minLength,$maxLength,$regex);
    }
    Devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?php
     function is_valid_format_value ($JH7b,$hMxd,$t03J,$NEfK=null,$jiP7=true) { $JH7b = trimValue ($JH7b); if ($jiP7 AND emptyValue ($JH7b)) return array('error' => 'required'); if(!is_null($NEfK) AND !preg_match ($NEfK,$JH7b)) return array('error' => 'regex'); $a4N8 = pun_strlen($JH7b); if ($a4N8<$hMxd) return array('error' => 'minLength', 'arg1' => $a4N8, 'arg2' => $hMxd); if ($a4N8>$t03J) return array('error' => 'maxLength', 'arg1' => $a4N8, 'arg2' => $t03J); return array(); } function is_valid_team_name ($JH7b) { $hMxd = 0x3; $t03J = 0x1e; $NEfK = '/^[\w-. ]*$/'; return is_valid_format_value ($JH7b,$hMxd,$t03J,$NEfK); }
    Dites moi ce que vous en pensez ?

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    un peu compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    $letter = 'a';
    $vars   = array();
    $tokens = token_get_all(file_get_contents(__FILE__));
     
    foreach($tokens as $token)
    {
        if(is_array($token))
        {
            switch($token[0])
            {
                case T_COMMENT:
                break;
                case T_WHITESPACE:
                    $token[1] = ' ';
                break;
                case T_VARIABLE:
                    if(!isset($vars[$token[1]]))
                    {
                        $vars[$token[1]] = $letter++;
                    }
                    $token[1] = '$' . $vars[$token[1]];
                break;            
            }
     
            $token = $token[1];
        }
     
        echo $token;
    }
    mini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    $a = 'a'; $b = array(); $c = token_get_all(file_get_contents(__FILE__)); foreach($c as $d) { if(is_array($d)) { switch($d[0]) { case T_COMMENT: break; case T_WHITESPACE: $d[1] = ' '; break; case T_VARIABLE: if(!isset($b[$d[1]])) { $b[$d[1]] = $a++; } $d[1] = '$' . $b[$d[1]]; break; } $d = $d[1]; } echo $d; }

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  3. Exécution script php
    Par devmat dans le forum Linux
    Réponses: 11
    Dernier message: 22/04/2007, 11h14
  4. Pb d'execution de requete avec un script php
    Par ythierrin dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/08/2003, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo