Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/07/2011, 11h46   #1
Membre régulier
 
Homme
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 74
Points : 74
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
ulspider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h58   #2
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
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
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 12h04   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pour minifier tu peux déjà faire comme ça :

Code :
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;
    }
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 12h05   #4
Membre régulier
 
Homme
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 74
Points : 74
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 ?
ulspider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 12h32   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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 ??
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 12h45   #6
Membre régulier
 
Homme
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 74
Points : 74
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 :
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 :
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.
ulspider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 12h50   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
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...

Citation:
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...
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 13h08   #8
Membre régulier
 
Homme
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 74
Points : 74
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 :
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 :
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 ?
ulspider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 13h44   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pas besoin de regex les tokens sont la pour ça
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 13h52   #10
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

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

Code php :
eval(base64_decode('...'));
et même...
Code php :
eval(gzinflate(base64_decode('...')));

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

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 14h21   #11
Membre régulier
 
Homme
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 74
Points : 74
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
ulspider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 14h36   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
sinon t'as bcomplier
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 14h38   #13
Membre régulier
 
Homme
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 74
Points : 74
Citation:
Envoyé par stealth35 Voir le message
sinon t'as bcomplier
BCompiler nécessite un .dll pour fonctionner.
ulspider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 14h40   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par ulspider Voir le message
BCompiler nécessite un .dll pour fonctionner.
oui c'est une extension
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 14h57   #15
Membre habitué
 
Inscription : avril 2009
Messages : 287
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 287
Points : 127
Points : 127
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
dtcSearch est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/07/2011, 15h17   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 15h27   #17
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
Envoyé par Eric2a Voir le message
Salut,

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

Code php :
eval(base64_decode('...'));
et même...
Code php :
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.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 15h45   #18
Membre régulier
 
Homme
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 74
Points : 74
Je pense utiliser déjà la minimisation + renommage des fonctions + suppression des commentaires. Ça devrai être un bon début
ulspider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 22h39   #19
Membre régulier
 
Homme
Inscription : mai 2011
Messages : 40
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mai 2011
Messages : 40
Points : 74
Points : 74
Bonsoir,

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

Code :
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 :
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 :
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 ?
ulspider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 23h45   #20
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
un peu compliqué

Code :
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 :
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; }
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h46.


 
 
 
 
Partenaires

Hébergement Web