Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > PHP > Vos Fonctions ou astuces > Lecture du sujet

Vos Fonctions ou astuces

Vous devez être inscrit pour pouvoir poster des messages

Page : Précédente  1  2  3  ...  86  87  88  89  90  91  92  93  94  95  96  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2  3  ...  86  87  88  89  90  91  92  93  94  95  96  Suivante
Hors ligne Talus # Posté le 23/06/2008 à 02:50:45
タルス
Avatar
Groupe : Membres
Reprise du dernier message de la page précédente :
ben... Tu captures tout ce qui est entre des < et > (c'est pas (x)HTML ca, c'est XML au passage)... Donc, par exemple,

Code : PHP
1
2
3
4
<?php
if ($a < $b && $b > $c){
// ....
}


Sera interpreté par ton "parseur"...
 
Hors ligne jeff52 # Posté le 23/06/2008 à 11:31:02
PHPadawan
Avatar
Groupe : Membres
Je n'en suis pas sûr ... j'ai fais quelque tests qui se sont avérés concluants sans aucun problème de conversion.
En effet, je fais un preg_replace_callback() pour le code PHP et j'utilise ensuite un simple highlight_string(,true)
Les entités retournées sont donc &lt; et &gt; et non < et > ;)
 
Hors ligne Talus # Posté le 23/06/2008 à 12:44:57
タルス
Avatar
Groupe : Membres
Mouais, mais ca reste lourd de faire un callback pour parser d'abord que les php, etc... Puis,après, les balises créées par l PHP (les span, etc), ne sont pas interprétés non plus ?
Édité le 23/06/2008 à 12:45:38 par Talus
 
Hors ligne jeff52 # Posté le 23/06/2008 à 16:43:08
PHPadawan
Avatar
Groupe : Membres
Ça reste une fonction très simpliste.

Je ne sais pas si tu t'es déjà lancé dans la création d'un algorithme de coloration de code, mais c'est un véritable défi (contrairement à ce que certains pourraient croire)
J'ai fais de mon mieux, et je cherche pour trouver d'autres solutions plus sûres - moins lourdes - et donc obtenir un code plus propre.

Pour l'instant, j'ai pas mieux en magasin... et ça marche.
Donc osef :p
 
Hors ligne treize # Posté le 26/06/2008 à 20:29:32
*Brain FAILED*
Avatar
Groupe : Membres
( edit ) Non, en fait rien. :-°

Secret (cliquez pour afficher)
But: Créer un système d'aperçu de pages grâce aux includes.

Pour ceux qui veulent un site avec une page modèle, et inclure la page voulue grâce à $_GET['page'].

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php
// D'abord, on vérifie si on a une variable...
 if (!empty($_GET['page'])) {

   // Puis, on "créé" le nom du fichier en ajoutant simplement ".php" à la fin du terme récupéré par $_GET
   $_GET['page'] = htmlspecialchars($_GET['page']);
   $page_get = './' . $_GET['page'] . '.php'; 

   // Puis on vérifie si le fichier existe
   if (file_exists($page_get)) // Si la page existe
      include($page_get); // On l'inclue

   else // Sinon
      include('index.php'); // On inclue l'index (par défaut)
}

else // Si on a pas de variable "<italique><gras>?page=</gras></italique>"
   include('index.php'); // On inclue par défaut
?>


Si les pages à inclure sont dans un fichier :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php
// D'abord, on vérifie si on a une variable...
 if (!empty($_GET['page'])) {

   // Puis, on "créé" le nom du fichier en ajoutant simplement ".php" à la fin du terme récupéré par $_GET
   $_GET['page'] = htmlspecialchars($_GET['page']);
   $page_get = 'includes/' . $_GET['page'] . '.php'; 

   // Puis on vérifie si le fichier existe
   if (file_exists($page_get)) // Si la page existe
      include($page_get); // On l'inclue

   else // Sinon
      include('includes/index.php'); // On inclue l'index (par défaut)
}

else // Si on a pas de variable "<italique><gras>?page=</gras></italique>"
   include('includes/index.php'); // On inclue par défaut
?>

Exemple:
Votre page modèle se nomme modele.php. Vous souhaiter inclure infos.php.
Pour cela, vous faites un <a href="modele.php?page=infos">Ici</a> .

Arrivé sur la page modele.php grâce au lien, la fonction se met en marche et vérifie s'il y a une variable. Oui, ?page=infos donc $_GET['page'] vaut infos.

On rajoute un ".php" à la fin, soit "infos.php" et on vérifie dans le répertoire courant ./ s'il y a infos.php.

Si oui, on l'inclue; sinon, on inclue index.php qui est la page par défaut (à vous de changer ;) ).

En clair :
Citation : Explication
Si on a $_GET['page'] et que $_GET['page'] n'est pas nul {
| $_GET['page'] = Protection de $_GET['page'];
| $page_get = Dossier courant + nom de la page voulue ($_GET['page']);
|
| Si $page_get existe dans le répertoire courant
| | On inclue $page_get;
|
| Sinon
| | On inclue la page par défaut index.php;
}

Sinon la variable n'existe pas
| On inclue la page par défaut index.php;


En espérant vous avoir aidé. :)


J'enlève ce que j'ai posté car en plus d'être déjà abordé dans le tuto de M@téo sur cette page, le code présente des failles que Dentuk a remarqué(es ?). Je voulais simplement proposer un code qui permettrait d'inclure ses pages sans avoir besoin de rajouter une condition nouvelle. M'enfin bon. ;)
Édité le 27/06/2008 à 12:31:02 par treize
 
Hors ligne Dentuk # Posté le 26/06/2008 à 20:53:03
Yamo...
Avatar
Groupe : Membres
Citation : treize
| $_GET['page'] = Protection de $_GET['page'];
Sais-tu ce que font htmlspecialchars et mysql_real_escape_string ? Quel est le rapport avec l'utilisation que tu fais de ta variable ? :-/
Citation : treize
| Si $page_get existe dans le répertoire courant
Qu'est-ce qui empêche de remonter via ../ etc ?
Édité le 26/06/2008 à 20:56:32 par Dentuk

Signature en cours de révision.
 
Hors ligne Thulium # Posté le 27/06/2008 à 12:11:53
Avatar
Groupe : Membres
premièrement, c'est pas une fonction, et ensuite c'est une énorme faille de sécurité a éviter absolument et je suis quasi-sur qu'on a déjà parlé de ça dans ce topic ...

et mysql_real_escape_string ne sert a rien, tu ne fait pas de requêtes sql avec ta variable.
Édité le 27/06/2008 à 12:27:33 par Thulium


"Keyboard not found, press F1 to resume."
enfant@fils-deskop:~$ sudo apt-get autoremove vie-sociale
parent@pere-deskop:~$ C'est bien mon fils, tu es devenu un Geek !


Image utilisateurImage utilisateur
 
Hors ligne treize # Posté le 27/06/2008 à 12:31:38
*Brain FAILED*
Avatar
Groupe : Membres
Hors ligne Dentuk # Posté le 27/06/2008 à 22:00:05
Yamo...
Avatar
Groupe : Membres
Pour vérifier que le fichier existe dans le répertoire "includes":
Code : PHP
1
2
3
<?php
if(file_exists($f) && realpath(dirname($f)) == realpath('includes'))
?>
Édité le 27/06/2008 à 22:02:37 par Dentuk

Signature en cours de révision.
 
Hors ligne Jeremie64 # Posté le 28/06/2008 à 04:46:23
Get over it !
Avatar
Groupe : Membres
Pourquoi pas faire celà:

<?php if(!empty($_GET['page']) && file_exists('./protected/php/'.htmlspecialchars($_GET['page']).'.php') ?>

Coding is more than a job, more than hobby, more than activity, it's a lifestyle !

PHP is a powerful programming language, if you know how to use it...

 
Hors ligne Dentuk # Posté le 28/06/2008 à 11:43:33
Yamo...
Avatar
Groupe : Membres
Parce que htmlspecialchars n'a rien à voir et n'empêche pas de remonter dans l'arborescence via ../.

Signature en cours de révision.
 
Hors ligne Thulium # Posté le 28/06/2008 à 16:21:28
Avatar
Groupe : Membres
tu peux très bien faire ./protected/php/../../../page_avec_tout_les_mots_de_passe.php ...


"Keyboard not found, press F1 to resume."
enfant@fils-deskop:~$ sudo apt-get autoremove vie-sociale
parent@pere-deskop:~$ C'est bien mon fils, tu es devenu un Geek !


Image utilisateurImage utilisateur
 
Hors ligne treize # Posté le 28/06/2008 à 16:29:55
*Brain FAILED*
Avatar
Groupe : Membres
Si on recherche dans $_GET['page'] qu'il n'y a pas de ../ (une URL avec ../, c'est rare..).
 
Hors ligne Asibasth # Posté le 28/06/2008 à 16:39:29
Mangeur de Lapins Crus
Avatar
Modérateurs
Code : PHP
1
2
3
4
5
6
7
8
9
<?php
function isPathValid($path)
{
    if(strpos($path, '../') !== false)
        return false;

    return is_dir($path);
}
?>


Utilisé sur : http://outils.asibasth.com/

Si vous voulez tester, comme ça a été codé vite fait, si isPathValid renvoit false, je fais direct un trigger_error() :-°
 
Hors ligne Savageman # Posté le 28/06/2008 à 17:57:10
Insa : If inside
Avatar
Groupe : Membres
Pas bon Asibath. On peut aussi faire ./../etc
Il faut simplement ban tous les chemins qui commencent par un point.
Ca ban aussi les fichiers .htaccess mais c'est pas plus mal !

Rendez votre code plus compréhensible : utilisez les constantes !
Image utilisateur
 
Hors ligne anonyme # Posté le 28/06/2008 à 17:59:43
Groupe :
Citation : Savageman
Pas bon Asibath. On peut aussi faire ./../etc

Ca sera vu par un strpos() ça.
Par contre on pourrait réécrire cette fonction plus joliment.
Hors ligne Thulium # Posté le 28/06/2008 à 18:12:41
Avatar
Groupe : Membres
on peut se passer de se système, m@théo dit que la méthode "brutal" comme il dit n'est pas pratique pour changer de design:
Code : PHP
1
2
3
4
<?php
include("debut.php");
echo 'bonjour, je ne suis que le contenu de la page proprement dites !';
include("fin.php");


si on change debut.php et fin.php, on peut aisément changer de design !


"Keyboard not found, press F1 to resume."
enfant@fils-deskop:~$ sudo apt-get autoremove vie-sociale
parent@pere-deskop:~$ C'est bien mon fils, tu es devenu un Geek !


Image utilisateurImage utilisateur
 
Hors ligne Asibasth # Posté le 28/06/2008 à 18:20:06
Mangeur de Lapins Crus
Avatar
Modérateurs
Nan mais chacun ses besoins Thulium, en ce qui me concerne c'est un listing de fichiers, je me vois mal hard-coder chacun des paths de mon FTP.

@Savageman :

Non on ne peut pas faire ./../
Et faire ./ est absolument inutile, vu que ça ramène au répertoire courant.

Citation : `Haku
Par contre on pourrait réécrire cette fonction plus joliment.


Code : PHP
1
2
3
4
5
6
<?php
function isPathValid($path)
{
    return (strpos($path, '../') === false) AND is_dir($path);
}
?>


Comme ça ?
C'est peut être plus court, mais je trouve ça moins clair, j'essaie d'avoir une constance au niveau de la structure de mes fonctions, j'élimine d'abord toute erreur possible avant de renvoyer le 'vrai' résultat. Un peu comme on vérifierait les pointeurs en début de fonction C/C++.
Édité le 28/06/2008 à 18:24:00 par Asibasth
 
Hors ligne Jeremie64 # Posté le 28/06/2008 à 18:57:52
Get over it !
Avatar
Groupe : Membres
Citation : Dentuk
Parce que htmlspecialchars n'a rien à voir et n'empêche pas de remonter dans l'arborescence via ../.

Le htmlspecialchars, c'est pas pour les ../ que je l'ai mis.

Mais bon, c'est donc pas sécure, ok je vais changer ma technique ^^

Bye

Coding is more than a job, more than hobby, more than activity, it's a lifestyle !

PHP is a powerful programming language, if you know how to use it...

 
Hors ligne anonyme # Posté le 28/06/2008 à 19:08:07
Groupe :
Citation : Asibasth
Comme ça ?

Non, comme ça même si ça revient au même :
Code : PHP
1
2
3
4
5
6
7
<?php

function f($p) {
    return is_bool(strpos($p, '../')) && is_dir($p);
}

?>

Le strpos() n'a à mes yeux rien à voir avec la vérification de la validité d'un pointeur en c. Vérifier que le chemin est licite fait partie de la procédure permettant de valider ou pas le chemin, ce n'est donc pas un prémice comme l'est la vérification de la validité des pointeurs en c.
Hors ligne TheBidi # Posté le 28/06/2008 à 20:00:27
HowTo...
Avatar
Groupe : Membres
Citation : JeromeJ

Citation : Dentuk
array_map a été faite pour pouvoir être utilisée avec des fonctions utilisateur : pour moi c'est beaucoup plus clair et simple de faire ça (par exemple):
Code : PHP
1
2
3
4
5
6
<?php
function machin2chose($chaine) {
    return str_replace('machin', 'chose', $chaine);
}
print_r(array_map('machin2chose', $tableauDeChaines));
?>
Pas mal =) J'y avais pas pensé... mais ça oblige à créer des fonctions utilisateurs... ma solution non =o


Un coup de create_function et c'est plus la peine de créer une fonction utilisateur exprès pour une utilisation ;)
Code : PHP
1
2
3
4
5
<?php
print_r ( array_map ( create_function ( '$chaine',
                                        'return str_replace(\'machin\', \'chose\', $chaine);' ),
                                        $tableauDeChaines ) );
?>
Édité le 28/06/2008 à 20:00:56 par TheBidi

xDoc, moteur de documentations en XML : [ |||||||||||||||||||| ] 30% (Centrale de bugs @ 40%)
Re-rédaction de la doc' xTPL : [ |||||||||||||||||||| ] 70%

Pensez au zCode quand vous donnez du code source ; et aux <?php 'tags PHP' ?> pour le colorer. Ne donnez que le code nécessaire (et pas le index.php de 800 lignes)

 
Hors ligne Jeremie64 # Posté le 28/06/2008 à 20:02:24
Get over it !
Avatar
Groupe : Membres
Ceci est plus sécurisé ?

Code : PHP
1
2
3
4
5
6
7
8
9
<?php 
$baseInclude = realpath('protected/php'); //répertoire d'inclusion de base
$pageInclude = realpath(dirname('protected/php/'.$page.'.php')); //ce qu'on veut inclure

if(strpos($pageInclude, $baseInclude) !== FALSE)
    echo 'Ok pour inclure';
else 
   echo 'Tentative de hack';
?>

Coding is more than a job, more than hobby, more than activity, it's a lifestyle !

PHP is a powerful programming language, if you know how to use it...

 
Hors ligne Talus # Posté le 28/06/2008 à 21:07:11
タルス
Avatar
Groupe : Membres
Pourquoi utiliser stropos, au juste ? :-°. Surtout que NON, ce n'est pas plus sécurisé !

realpath('protected/php') (admettons que ce soit /var/www/machin/protected/php) est contenu dans realpath('protected/php/../../../pass.txt') !

Suffit de faire une bete comparaison...
 
Hors ligne Jeremie64 # Posté le 29/06/2008 à 01:01:06
Get over it !
Avatar
Groupe : Membres
Non justement, ça fonctionnera pas, car regarde ceci:

F:\www\--Site--\protected\php est le répertoire de base.

Regarde le répertoire d'include pour le fichier, que donnera ceci: (../../../pass.txt) -> $pageInclude = realpath(dirname('protected/php/'.$page.'.php')); -> F:\www

Ceci retournera false et le fichier ne sera pas inclu. Si on regarde, on peut pas allez plus haut que: F:\www\--Site--\protected\php.

Et strpos, ben, ça trouve des caractères dans une chaîne, dans ce cas, c'est le répertoire minimal pour pouvoir inclure.

Bye

Coding is more than a job, more than hobby, more than activity, it's a lifestyle !

PHP is a powerful programming language, if you know how to use it...

 
Hors ligne Psykose # Posté le 30/06/2008 à 01:15:44
Carambaaa(r) !
Avatar
Groupe : Membres
Je ne ferai pas avancer le débat mais posterai tout simplement une fonction (je suis lâche hein :p ).
Elle permet tout simplement de mélanger les mots d'une phrase ...

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?php
	function SentenceShuffler($string){
		$string = strtolower($string);
		$NuString = explode(" ", $string);
		$NuString = shuffle($NuString);
		
		$NuSentence = '';
		
		foreach($NuString as $ShuffledStr){
			$NuSentence .= $ShuffledStr;
		}
		
		return ucfirst($NuSentence);
	}
?>
Édité le 30/06/2008 à 01:16:19 par Psykose

Mes tutos préférés :
Apprenez le Javascript - Dominos animables (blender) - Apprenez Maya
Mes tutos :
Créer une tête Cartoon avec Blender

Psykose's JukeboX : I - II - III - IV - V - Now extended ! - VI - VII - VIII
 
Hors ligne anonyme # Posté le 30/06/2008 à 01:17:36
Groupe :
Ca fonctionne ton truc ? Parce que si je me souviens shuffle() ne retourne pas le tableau mais un booléen.
Et au lieu de ton foreach(), il y a implode().
Hors ligne Psykose # Posté le 30/06/2008 à 01:28:20
Carambaaa(r) !
Avatar
Groupe : Membres
Théoriquement non ;)
Doc Php - Shuffle

Pour implode c'est tout con j'y avais même pas pensé ^^

...ce qui noud onne donc :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
	function SentenceShuffler($string){
		$string = strtolower($string);
		$NuString = explode(" ", $string);
		$NuString = shuffle($NuString);
		
		$NuSentence = implode($NuString);
		
		return ucfirst($NuSentence);
	}
?>

Mes tutos préférés :
Apprenez le Javascript - Dominos animables (blender) - Apprenez Maya
Mes tutos :
Créer une tête Cartoon avec Blender

Psykose's JukeboX : I - II - III - IV - V - Now extended ! - VI - VII - VIII
 
Hors ligne Bilbax # Posté le 30/06/2008 à 01:31:24
www.bilbax.eu
Avatar
Groupe : Membres
Les espaces ne sont pas restaurés ;) .

Code : PHP
1
2
3
4
5
6
7
<?php
function SentenceShuffler($string)
{
	$words = explode(' ', strtolower($string));
	shuffle($words);
	return ucfirst(implode(' ', $words));
}
Hors ligne Psykose # Posté le 30/06/2008 à 01:34:11
Carambaaa(r) !
Avatar
Groupe : Membres
Merci Bilbax ^^
En plus j'ai oublié un paramètre à implode() :p

bon eh bien je réflichérai a deux fois avant de remettre une fonction ici xD

Mes tutos préférés :
Apprenez le Javascript - Dominos animables (blender) - Apprenez Maya
Mes tutos :
Créer une tête Cartoon avec Blender

Psykose's JukeboX : I - II - III - IV - V - Now extended ! - VI - VII - VIII
 
Hors ligne Thulium # Posté le 30/06/2008 à 01:37:16
Avatar
Groupe : Membres
Si, shuffle renvoi un booléen, et modifie directement le tableau passé en paramètre (bool shuffle ( array &$array )


"Keyboard not found, press F1 to resume."
enfant@fils-deskop:~$ sudo apt-get autoremove vie-sociale
parent@pere-deskop:~$ C'est bien mon fils, tu es devenu un Geek !


Image utilisateurImage utilisateur
 
Hors ligne Psykose # Posté le 30/06/2008 à 01:40:20
Carambaaa(r) !
Avatar
Groupe : Membres
Si tu vas voir dans les fonctions concernant les arrays elles renvoient pratiquement pour la plupart un Booléen ;)

Mes tutos préférés :
Apprenez le Javascript - Dominos animables (blender) - Apprenez Maya
Mes tutos :
Créer une tête Cartoon avec Blender

Psykose's JukeboX : I - II - III - IV - V - Now extended ! - VI - VII - VIII
 

Retour au forum "PHP" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 211 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.1391s (0.1212s)