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  ...  91  92  93  94  95  96  97  98  99  100  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2  3  ...  91  92  93  94  95  96  97  98  99  100  Suivante
Hors ligne Jeremie78 # Posté le 09/09/2008 à 02:09:31
Powered by GNU/Linux
Groupe : Membres
Reprise du dernier message de la page précédente :
Avec le realpath, ça donne aucun problème ....

Si RechercheChaine "/includes/config.php" Dans realpath($path)
Alors
Interdire l'accès
Sinon
Continuer
Fin si

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Talus # Posté le 09/09/2008 à 02:37:34
タルス
Avatar
Groupe : Membres
Eh non !

realpath(includes/class/../config.php) ==> /root/depuis/home/hebergeur/includes/class/config.php !. Hors, j'ai besoin de jater /root/depuis/home/hebergeur/ ; et après, ca devient lourd de devoir faire un substr sur la chaine retournée par le realpath(). Donc, je fais juste un simple str_replace('../', '', chaine) :p.

Sinon, si je procédais comme tu me le suggères, j'aurais juste à mettre /root/depuis/home/hebergeur/includes/config.php dans les fichiers interdits...
Édité le 09/09/2008 à 02:38:24 par Talus
 
Hors ligne Jeremie78 # Posté le 09/09/2008 à 04:21:38
Powered by GNU/Linux
Groupe : Membres
C'est à dire que le rôle de realpath est JUSTEMENT de "résoudre" les liens symboliques et les parcourt de l'arborescence ("../").
L'avantage, est que tu as un chemin "parfait".

Ensuite, pour éviter de mettre des chemins absolus, tu récupères le répertoire de la racine de ton site, et tu l'enlèves.

Ça te donne quelque chose du type "includes/config.php".
Et tu fais la comparaison.

Pour la "lourdeur", vu que ce sont les soruces de ton site, ça va pas être bien lourd. (je doute que 20 K visiteurs lisent ton code PHP :p , même s'il très très beau ^^ ).

Et sinon, les str_replace, il faut aussi "//" et "./".
Avec ma méthode, tu aurais pas besoin de te soucier de ça ... ce genre d'oublie peut coûter cher, non ?

/* sauf si super Jérémie78 veille sur ton site :lol: */

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Savageman # Posté le 09/09/2008 à 06:32:49
Insa : If inside
Avatar
Groupe : Membres
Je vote +1, c'est toujours pas sécurisé. :-° (cf. tes MP)
 
Hors ligne Nanocom # Posté le 09/09/2008 à 10:21:51
Salut ô !
Avatar
Groupe : Membres
Citation : Jeremie78
Au passage, sympa ton site talus, mais laisser le code source visible "dynamiquement" (contrairement à une archive statique) peut être dangereux :p

@nanocom, il y a une petite erreur dans ta fonction je crois :

$re = 'Il y a 1h'.round($diff/60)-3600;

doit etre remplacé par :

$re = 'Il y a 1h'.round(($diff-3600)/60);

On dirait pas, mais ça change beaucoup le résultat :]


Merci, j'ai édité ça.
Hors ligne shine-neko # Posté le 09/09/2008 à 10:34:01
Saite ita no wa My Rosy Heart
Avatar
Groupe : Membres
Talus normale que la coloration ne gère pas tout ce qui n'est pas du php ?

La v3 de Shine-Shiina est sortit
Qui n'a jamais rêver d'apprendre a dessiner , Cuisiné japonnais dévorer de nouveaux manga fait par des copains et d'apprendre le japonais ?
=> La réponse se trouve ici
Image utilisateur

 
Hors ligne Jeremie78 # Posté le 09/09/2008 à 11:16:30
Powered by GNU/Linux
Groupe : Membres
@shineneko : il utilise la fonction highlight* donc à c'est aux dev PHP qu'il faut se plaindre :p

@savageman : je m'en doutais ^^

Au fi nal, tout le monde aurait vu au moins 1 fois le mdp MySQL de talus :lol:

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Savageman # Posté le 09/09/2008 à 12:18:08
Insa : If inside
Avatar
Groupe : Membres
C'est pas le même qu'avant ! :D
Pour le colorateur, j'en ai parlé avec lui hier soir, il va peut(être changer. :)
 
Hors ligne Bilbax # Posté le 09/09/2008 à 13:37:30
www.bilbax.eu
Avatar
Groupe : Membres
Citation : Talus
[...] Donc, je fais juste un simple str_replace('../', '', chaine) :p. [...]


Malheur à toi ! :diable: Si je rentre ...// regarde ce qui se passera :

...//
...//
../


Pour sécuriser les chemins j'essayerais :

Code : PHP
1
2
3
4
5
6
7
<?php
$chemin = str_replace(Array('\\', ':', '<', '>', '*', '@'), '', $chemin);
$chemin = preg_replace('`/+`', '/', $chemin);
$chemin = preg_replace('`\.+`', '.', $chemin);
$chemin = str_replace('./', '', $chemin);

file_get_contents('./'.$chemin);


Sinon y'a toujours la méthode choque...

Code : PHP
1
2
3
<?php
if(strpos($chemin, 'config.php') !== False)
     afficherDummy();
Édité le 09/09/2008 à 13:46:37 par Bilbax
Hors ligne Talus # Posté le 09/09/2008 à 13:53:05
タルス
Avatar
Groupe : Membres
Oui :).

Bon, je suis reparti sur ma solution de départ, à savoir l'utilisation du realpath et de substr. C'est un peu dégueulasse, et bourrin, mais ca ira (mdp rechangé :p).
Édité le 09/09/2008 à 14:05:35 par Talus
 
Hors ligne Jeremie78 # Posté le 09/09/2008 à 16:06:42
Powered by GNU/Linux
Groupe : Membres
Le "mot de passe nouveau" est arrivé !

À l'assaut :pirate: !

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Talus # Posté le 09/09/2008 à 16:20:43
タルス
Avatar
Groupe : Membres
Et j'en ai profité pour colmater la meme faille de l'explorateur (moins grave, ceci dit) :).
Édité le 09/09/2008 à 16:20:58 par Talus
 
Hors ligne Bilbax # Posté le 09/09/2008 à 16:29:52
www.bilbax.eu
Avatar
Groupe : Membres
Ce n'est pas encore sécurisé, j'ai le nouveau mot de passe, il commence par "cf". ^^

(faille rapportée par MP)
Hors ligne Talus # Posté le 09/09/2008 à 17:20:12
タルス
Avatar
Groupe : Membres
Et voilà, modifié, et sécurisé (merci Bilbax pour m'avoir bien détaillé les quelques failles qui restaient). Si il en reste, au lieu de pourrir ce sujet (déjà qu'il est bien pourri :p), MPez moi en me détaillant la faille, ce serait sympa :) /o/
 
Hors ligne Nanocom # Posté le 11/09/2008 à 22:32:32
Salut ô !
Avatar
Groupe : Membres
Y'avait un petit bug dans la fonction présentée à la page précédente, vala la fonction finale :

Code : PHP
 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 datetimefr($temps) {

	$temps = strtotime($temps);
	$now = time();
	$diff = $now - $temps;

	if ($diff < 60) {
		$re = 'Il y a '.$diff.' s';
	} elseif ($diff < 3600) {
		$re = 'Il y a '.round($diff/60).' min';
	} elseif($diff < 7200) {
		$re = 'Il y a 1h'.(round($diff/60)-60);
	} elseif (date('d/m/Y', $now) == date('d/m/Y', $temps)) {
		$re = 'Aujourd\'hui à '.date('H:i', $temps);
	} elseif (date('d/m/Y', $now) == date('d/m/Y', $temps + 86400)) {
		$re = 'Hier à '.date('H:i', $temps);
	} else {
		$re = 'Le '.date('d/m/Y à H:i', $temps);
	}
	
	return $re;

}
?>
Hors ligne Talus # Posté le 14/09/2008 à 17:30:51
タルス
Avatar
Groupe : Membres
Je n'ai pas vu une fonction qui permet de devancer nl2br, et qui permet également d'interpreter les "paragraphes" (deux sauts de lignes, par exemple), donc je poste ici la fonction que j'ai faite... :)

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
/**
 * Parse une chaine  ; deux sauts de lignes ==> un paragraphe, et un saut de ligne
 * donnera un simple... saut de ligne (<br />). 
 * Adapté de python à php d'après  e package "utils.html" de Django.
 *
 * @param string $str Texte à parser
 * @return string
 */
function linebreaks($str){
    $txt = preg_replace('`[\n\r]`s', "\n", $str); // Normalisation
    $cpt = preg_split('`\n{2,}`s',  $str); // Split des doubles sauts de lignes
    
    $return = '';
    foreach ($cpt as $p){
        // -- On entoure la capture par deux balises <p>, et on remplace les sauts de lignes par un <br />.
        $return .= '<p>' . str_replace("\n", '<br />' . "\n", $p)  . '</p>' . "\n\n";
    }
    
    return $return;
}


Si elle était déjà posté, alors je m'en rappelais plus, et dans ce cas, mea culpa :p.
Édité le 14/09/2008 à 17:31:24 par Talus
 
Hors ligne Jeremie78 # Posté le 14/09/2008 à 18:35:34
Powered by GNU/Linux
Groupe : Membres
Le seul problème que je vois dans cette fonction, est qu'il faut impérativement que le texte donné soit du "texte plein".

Ou du moins, qu'il n'y ai pas de balise HTML de type bloc. Donc on peut pas l'utiliser partout ;) .

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Talus # Posté le 14/09/2008 à 18:44:28
タルス
Avatar
Groupe : Membres
Tu remarquera que nl2br non plus :p. Ou alors, ca laisse les balises telles quelles...
 
Hors ligne Cortexd # Posté le 14/09/2008 à 18:58:58
Maouunnwww !
Avatar
Groupe : Membres
en faisant l'économie d'une expression régulière :
Code : PHP
1
2
3
4
5
<?php
function nl2pbr($text)
{
	return '<p>'.implode('</p><p>', preg_split('`(?:<br />(?:\r\n|\r|\n)){2,}`', nl2br($text))).'</p>';
}

Comme l'or, il est caresse et volupté...
Image utilisateur Arrêt sur image


 
Hors ligne Jeremie78 # Posté le 14/09/2008 à 19:40:04
Powered by GNU/Linux
Groupe : Membres
Citation : Talus
Tu remarquera que nl2br non plus :p. Ou alors, ca laisse les balises telles quelles...


Oui je sais bien, mais les "<br />" ne posent pas de problème en HTML au niveau des balises de blocs.
Je te donne un exemple :



Code : HTML
1
2
3
<blockquote>Lorem ipsum dolor sit amet.<br />
<br />
Lorem ipsum dolor sit amet.<blockquote>

Code : HTML
1
2
3
<blockquote><p>Lorem ipsum dolor sit amet.</p>

<p>Lorem ipsum dolor sit amet.</p><blockquote>

Le 1er est le résultat avec un nl2br, le second avec ta fonction.
La 1er est du HTML valide, le second ne l'es pas ;) .

Ta fonction n'est pas en question, c'est le texte en entrée qui l'est.


EDIT: pour ceux qui n'avaient pas compris (Barbary ?), voici le texte de départ :Code : HTML
1
2
3
<blockquote>Lorem ipsum dolor sit amet.

Lorem ipsum dolor sit amet.<blockquote>
Édité le 14/09/2008 à 20:28:20 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Barbary # Posté le 14/09/2008 à 19:42:32

Avatar
Groupe : Membres
En même temp le code que tu donne n'est pas bon:
Code : HTML
1
2
3
<blockquote><p>Lorem ipsum dolor sit amet.</p>

<p>Lorem ipsum dolor sit amet.</p></blockquote>

Image utilisateur
 
Hors ligne Jeremie78 # Posté le 14/09/2008 à 20:27:10
Powered by GNU/Linux
Groupe : Membres
Citation : Barbary
En même temp le code que tu donne n'est pas bon:
Code : HTML
1
2
3
<blockquote><p>Lorem ipsum dolor sit amet.</p>

<p>Lorem ipsum dolor sit amet.</p></blockquote>


Heu .... c'est une blague ?
Parce que c'est justement ce que j'essai de montrer. Il faut faire attention à l'utilisation de la fonction de talus, avec certains entrée, ça donne du HTML valide.
Et par pitié la prochaine fois, lis tout le message au lieu de le survoler, ça t'évitera de sortir une ânerie ;) .

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Talus # Posté le 14/09/2008 à 20:53:58
タルス
Avatar
Groupe : Membres
Jeremie78 > Ah oui tiens, vu comme ca, en effet. Mais bon, que veux tu :p.

Cortexd > Ouais mais moche :p. Enfin, surtout, au lieu de faire une "non-capture", tu peux alléger par [\r\n], ca revient au même...
 
Hors ligne Cortexd # Posté le 14/09/2008 à 21:10:34
Maouunnwww !
Avatar
Groupe : Membres
non ce n'est pas pareil Talus parce qu'une ligne peut se finir par \r, \n OU \r\n, d'ailleurs sur Windows où les lignes se terminent par \r\n ta fonction ne fonctionne pas puisque ta première expression régulière va transformer ce \r\n en deux \n c'est à dire deux nouvelles lignes d'après le reste de ta fonction
Code : PHP
1
2
3
<?php
echo linebreaks("salut\r\n\r\nles jeunes"); // va afficher <p>salut<br /><br />les jeunes</p>
//au lieu de <p>salut</p><p>les jeunes</p>

Comme l'or, il est caresse et volupté...
Image utilisateur Arrêt sur image


 
Hors ligne Talus # Posté le 14/09/2008 à 21:45:51
タルス
Avatar
Groupe : Membres
Sinon, j'ai mieux, mais c'etait bof pour la lisibilité... m'enfin :p.

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php
/**
 * Parse une chaine  ; deux sauts de lignes ==> un paragraphe, et un saut de ligne
 * donnera un simple... saut de ligne (<br />). 
 * Adapté de python à php d'après le package "utils.html" de Django.
 *
 * @param string $str Texte à parser
 * @return string
 */
function linebreaks($str){
    $cpt = preg_split('`' . PHP_EOL . '{2,}`s',  $str); // Split des doubles sauts de lignes
    
    $return = '';
    foreach ($cpt as $p){
        $return .= '<p>' . str_replace(PHP_EOL, '<br />' . PHP_EOL, $p)  . '</p>' . PHP_EOL . PHP_EOL;
    }
    
    return $return;
}


Eh oui, la constante PHP_EOL contient, suivant le systeme surlequel PHP est installé, la combinaison correcte pour les sauts de lignes...

ou, à ta manière :

Code : PHP
1
2
3
4
<?php
function linebreaks($str){
    return '<p>' . implode('</p>' . PHP_EOL . PHP_EOL . '<p>', preg_split('`(?:<br />' . PHP_EOL . '){2,}`s',  nl2br($str))) . '</p>';
}


On evite donc toujours de faire une capture "non capturante". 'Fin bref, on est pas à 0.1ms pres.
Édité le 14/09/2008 à 21:52:00 par Talus
 
Hors ligne Cortexd # Posté le 14/09/2008 à 21:49:59
Maouunnwww !
Avatar
Groupe : Membres
et tu fais quoi des textes qui n'ont pas été généré sur la même machine que celle sur laquelle tourne php ? :p

Comme l'or, il est caresse et volupté...
Image utilisateur Arrêt sur image


 
Hors ligne Barbary # Posté le 14/09/2008 à 21:51:25

Avatar
Groupe : Membres
Citation : Jeremie78
Citation : Barbary
En même temp le code que tu donne n'est pas bon:
Code : HTML
1
2
3
<blockquote><p>Lorem ipsum dolor sit amet.</p>

<p>Lorem ipsum dolor sit amet.</p></blockquote>


Heu .... c'est une blague ?
Parce que c'est justement ce que j'essai de montrer. Il faut faire attention à l'utilisation de la fonction de talus, avec certains entrée, ça donne du HTML valide.
Et par pitié la prochaine fois, lis tout le message au lieu de le survoler, ça t'évitera de sortir une ânerie ;) .


Rien qu'au départ tu as oublié de fermer la balise <blockquote> :)
Ca aide pas forcement à avoir son code valide :-°

Image utilisateur
 
Hors ligne Talus # Posté le 14/09/2008 à 21:52:23
タルス
Avatar
Groupe : Membres
Citation : Cortexd
et tu fais quoi des textes qui n'ont pas été généré sur la même machine que celle sur laquelle tourne php ? :p


Joker :p.
 
Hors ligne Cortexd # Posté le 14/09/2008 à 21:54:36
Maouunnwww !
Avatar
Groupe : Membres
à vrai dire Jeremie78 a très mal choisi la balise <blockquote> pour son exemple puisqu'on peut y mettre des <p> dans celle-ci justement :p

Comme l'or, il est caresse et volupté...
Image utilisateur Arrêt sur image


 
Hors ligne Jeremie78 # Posté le 14/09/2008 à 23:54:56
Powered by GNU/Linux
Groupe : Membres
Citation : Cortexd
à vrai dire Jeremie78 a très mal choisi la balise <blockquote> pour son exemple puisqu'on peut y mettre des <p> dans celle-ci justement :p

Chut, faut pas dire >_< . (bien vu)

Enfin l'idée est là, dans le cas ou les paragraphes se retrouvent coincés dans un texte disposé dans un block n'acceptant que les balises inline ... on se retrouve avec un code invalide.
Ça à l'air dur d'arriver à remplir toutes les conditions comme ça, mais pourtant c'est plutot rapide ^^ (j'en ai fait les frais :p ).

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Savageman # Posté le 15/09/2008 à 05:00:51
Insa : If inside
Avatar
Groupe : Membres
Citation : Cortexd
en faisant l'économie d'une expression régulière :
Code : PHP
1
2
3
4
5
<?php
function nl2pbr($text)
{
	return '<p>'.implode('</p><p>', preg_split('`(?:<br />(?:\r\n|\r|\n)){2,}`', nl2br($text))).'</p>';
}

Celle-là reste le mieux je pense (je rajouterais peut-être juste un retour à la ligne entre </p> et <p> pour faire "joli").
 

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 106 Zéros connectés | Requêtes SQL 6 requêtes | Temps de génération de la page : Total (SQL) 0.1798s (0.1634s)