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  ...  90  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  ...  90  91  92  93  94  95  96  97  98  99  100  Suivante
Hors ligne Sargeros # Posté le 06/09/2008 à 12:52:44
Avatar
Groupe : Membres
Reprise du dernier message de la page précédente :
Moi, j'utilise une fonction Talus powered :p
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?php
function skip_chars($texte){
    $texte = strip_tags($texte);
    $texte = strtolower($texte);
    //$texte = htmlspecialchars_decode($texte);
    
    /**$texte = str_replace(array('é','è','ê','ë'), 'e', $texte);
    $texte = str_replace(array('à','â','ä','ã'), 'a', $texte);
    $texte = str_replace(array('ô','ò','ö','õ'), 'o', $texte);
    $texte = str_replace(array('ù','ü','µ'), 'u', $texte);
    $texte = str_replace(array('ì','ï','î'), 'i', $texte);
    $texte = str_replace('ç', 'c', $texte);// (accents pas parsés, merci utf8) */ 
    
    $texte = preg_replace('`[^a-z0-9-]+`', '-', $texte);
    $texte = preg_replace('`-{2,}`', '-', $texte);
    $texte = trim($texte, '-');
    
    return $texte;
}
?>


Vous pouvez la retrouver ici ;)
Hors ligne Talus # Posté le 06/09/2008 à 13:26:49
タルス
Avatar
Groupe : Membres
Faudrait que je la retravaille d'ailleurs (emploi de strtr, que je vires le strip_tags, ...) :p. Mais je crois qu'elle a déjà été proposée, mais j'en suis pas sur :/.
 
Hors ligne robocop # Posté le 06/09/2008 à 14:03:49
Avatar
Groupe : Membres
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<?php
function no_accents($mot) 
{
    $mot = strtr($mot, "àäâéèêëïîöôüûùç", "aaaeeeeiioouuuc");
    return $mot;
}
//By robocop, merci de m'envoyer un chèque de 50 euros si vous êtes amener à l'utiliser  :-° 
//V2 : 

function skip($mot, $pos=0) 
{
    if($pos==strlen($mot)) return $mot;
    $ord = ord($mot[$pos]);
    if($ord <65 || $ord > 125) //64 et 125 sont au pif, hein, faut les changer
       $mot[$pos] = "-";
    return skip($mot, $pos++);
}
?>

Édité le 06/09/2008 à 14:22:05 par robocop
 
Hors ligne Jeremie78 # Posté le 06/09/2008 à 14:37:25
Powered by GNU/Linux
Groupe : Membres
Bof bof la fonction récursive skip ...
Avec une chaine de caractère trop grande, tu vas faire exploser l'interpréteur :p (fatal error), ou du moins consommer BEAUCOUP de ressources.

Surtout que tu peux aisément linéariser la fonction !
Strlen + boucle ..

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne robocop # Posté le 06/09/2008 à 14:46:25
Avatar
Groupe : Membres
Hors ligne Jeremie78 # Posté le 06/09/2008 à 14:57:40
Powered by GNU/Linux
Groupe : Membres
Citation : robocop
Ouais, ouais, c'est vrai que c'est du php :D !

Et ???
En quoi le fait que ce soit du PHP justifie d'utiliser de la récursivité, alors même qu'elle est totalement inutile ?

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne robocop # Posté le 06/09/2008 à 15:00:23
Avatar
Groupe : Membres
A ton avis, ça fonctionne comment la fonction preg_replace ?
Y'a des boucles aussi, et je pense pas que ça soit plus léger.
D'autre part, il est vrai que l'itératif est plus rapide que le récursif, en php.
D'ou ma remarque, car sous certains langages, il n'y a pas de différence.
Édité le 06/09/2008 à 15:16:41 par robocop
 
Hors ligne Jeremie78 # Posté le 06/09/2008 à 15:36:25
Powered by GNU/Linux
Groupe : Membres
Sous __CERTAINS__ langages comme tu dis ... PHP n'en fait pas partie !
Quand a preg_replace, elle est surement plus légère car elle est codée en C :-° , ce qui n'est pas le cas de ton code en ... PHP ^^ .
Édité le 06/09/2008 à 15:37:37 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Dutiona # Posté le 06/09/2008 à 15:44:25
Vis pour être heureux !
Avatar
Groupe : Membres
Oui mais pre_greplace charge l'énorme compilateur de regex pcre. Certe codé en c aussi mais lourd.
Néanmoins, j'ai fais une fois un parser php itératif et un parser avec les pcre et les pcre étaient 10 fois plus rapide.
Moralité : mieux vaut que ça soit c qui interprette qqch qu'interpreter du php XD .


Bisous, Nyu

Défiez ma brute !
Eclipse user | Ubuntu (KDE) user | php/sql/xhtml/css/xml/xsl/javascript/java/python/perl/c/scheme coder.
Framework in use: Seraframework (my own one).
In Microeisti staff.
 
Hors ligne robocop # Posté le 06/09/2008 à 16:43:23
Avatar
Groupe : Membres
Citation : Jeremie78
Sous __CERTAINS__ langages comme tu dis ... PHP n'en fait pas partie ![...]

On est d'accord, d'ou mon message :-° .
 
Hors ligne Nanocom # Posté le 08/09/2008 à 01:06:48
Salut ô !
Avatar
Groupe : Membres
Fonction qui prend en argument un datetime Sql et renvoie une date formatée comme sur le SDZ : "il y a 13s", "il y a 23 minutes", "hier à 17h30".

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
26
<?php

function datetimefr($temps) {

	$temps = strtotime($temps);
	$diff = time() - $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-3600)/60);
	} elseif ($diff < 86400) {
		$re = 'Aujourd\'hui à '.date('H:i', $temps);
	} elseif ($diff < 172800) {
		$re = 'Hier à '.date('H:i', $temps);
	} else {
		$re = 'Le '.date('d/m/Y à H:i', $temps);
	}

	return $re;

}

?>


Si vous voulez que la première lettre soit en minuscule, un strtolower() vous sauvera.
Exemple :
Code : PHP
1
2
3
4
5
6
7
<?php

$datetime = "2008-06-07 14:56:34"; // On invente un datetime SQL pour l'exemple
$now = "2008-06-07 16:07:34";
echo 'Posté '.strtolower(datetimefr($datetime));

?>


L'exemple précédent retournera "Posté il y a 1h11".
Édité le 09/09/2008 à 10:22:30 par Nanocom
Hors ligne Talus # Posté le 08/09/2008 à 01:49:46
タルス
Avatar
Groupe : Membres
Plop,

En fait, y'a un problème avec ta fonction (désolé, pas pensé 'taleur :p) : Si on est par exemple le 08/09/2008 00h47, et que la date à comparer est le 07/09/2008 23h58... Ca fera toujours moins d'une heure.

Bon, c'est pas très grave tu vas me dire ; mais si, en prenant toujours la même date, on est le 08/09/2008 à 04h34... Ca retournera "Aujourd'hui", et non pas hier !
 
Hors ligne Jeremie78 # Posté le 08/09/2008 à 12:32:22
Powered by GNU/Linux
Groupe : Membres
disons qu'il ne faut pas prendre les jours dans leur aspect strict mais dans le sens nombre d'heures :p

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Nanocom # Posté le 08/09/2008 à 13:17:12
Salut ô !
Avatar
Groupe : Membres
Ayé, je pense avoir la fonction parfaite :

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
26
27
28
<?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)-3600;
	} 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)) {
                // 86400 secondes s'écoulent en un jour
		$re = 'Hier à '.date('H:i', $temps);
	} else {
		$re = 'Le '.date('d/m/Y à H:i', $temps);
	}
	
	return $re;

}

?>
Édité le 08/09/2008 à 14:57:15 par Nanocom
Hors ligne Talus # Posté le 08/09/2008 à 14:37:24
タルス
Avatar
Groupe : Membres
Oui mais c'est lourd :p. M'enfin, Si on veut...

Personnellement, j'utilise ceci, couplé à ma classe de gestion de dates (qui étend DateTime) :

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
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
<?php
/**
 * Parse une date
 *
 * @param mixed $timestamp Timestamp de la date à parser
 * @param string $format Format de la date ("default" par défaut)
 * @param boolean $hours Afficher les heures ?
 * @param boolean $relative Dates relatives ?
 * @return string
 */
function parse_date($timestamp, $format = 'default', $hours = true, $relative = true){
    // -- Calcul du décalage horaire
    $decal = float_to_time(Systeme::$utc + Systeme::$dst);
    $decal = $decal['sign'] . $decal['h'] . ' hours ' . $decal['sign'] . $decal['m'] . ' minutes';
    
    // -- Date d'aujourd'hui
    $now = clone Instances::$date;
    
    // -- Deux manières de définir $cur : Si timestamp est une chaine de caractères et on ruse un peu (en ajoutant le décalage horaire)
    $cur = new Date(!ctype_digit((string) $timestamp) ? ($timestamp . ' ' . $decal) : ($timestamp + (Systeme::$utc + Systeme::$dst) * ONE_HOUR), Instances::$date->getTimezone());
    
    // -- On exige un format particulier ? on le retourne, et "pi f'est tout" !
    if ($format !== null && $format != 'default'){
        return $cur->format($format);
    }
    
    // -- Calcul du jour d'aujourd'hui, du jour du timestamp.. Si on veut afficher le format "extra".
    if ($relative){
        $date = clone $cur;
        
        $date->setTime(7, 7, 7); // Pourquoi 07h07m07s ? "Parce que" :3.
        $now->setTime(7, 7, 7);
        
        $diff = $now->unix() - $date->unix();
        
        if ($diff < ONE_DAY) {
            $str = 'Aujourd\'hui';
        } elseif ($diff < (2 * ONE_DAY)) {
            $str = 'Hier';
        } else {
            $str = 'Le ' . $cur->format('d/m/Y');
        }
        
        unset($date);
    } else {
        $str = 'Le ' . $cur->format('d/m/Y');
    }
    
    // -- Si on souhaite afficher les heures...
    if ($hours) {
        // -- Gestion des heures "super relatives" (il y a une heure, X minutes, Y secondes, ....)
        if ($relative && $diff < ONE_DAY){
            // -- "Bizarrement", clone Instances::$date ne marche pas... ca renvoit une date antérieur à cur. Pareil pour un setTime avec l'heure de Instances::$date... WTF ??
            unset($now);
            $now = new Date(NOW + (Systeme::$utc + Systeme::$dst) * ONE_HOUR, Instances::$date->getTimeZone());
            $diff = $now->unix() - $cur->unix();
            
            if ($diff < ONE_MINUTE) {
                $str = 'Il y a ' . $diff . ' secondes';
            } elseif ($diff < ONE_HOUR){
                $str = 'Il y a ' . floor($diff / ONE_MINUTE) . ' minutes';
            } elseif ($diff < (2 * ONE_HOUR)) {
                $str = 'Il y a ' . floor($diff / ONE_HOUR) . ' heures et ' . floor(($diff - ONE_HOUR) / ONE_MINUTE) . ' minutes';
            }else {
                $str .= ', à ' . $cur->format('H:i');
            } 
        } else {
            $str .= ', à ' . $cur->format('H:i');
        }
    }
    
    // -- Libérons un peu de mémoire !
    unset($cur);
    unset($now);
    
    return $str;
}


Les constantes "ONE_*" sont des constantes du nombre de secondes pour chaque unité de temps (minutes, heures, jours, mois, années), Instances::$date est l'objet Date de référence (à l'execution du script), et float_to_time(), vous l'avez plus haut :p.
Édité le 08/09/2008 à 14:38:42 par Talus
 
Hors ligne Jeremie78 # Posté le 08/09/2008 à 16:27:22
Powered by GNU/Linux
Groupe : Membres
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 :]

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Sargeros # Posté le 08/09/2008 à 17:43:58
Avatar
Groupe : Membres
Jeremie => Pourquoi ça peut être dangereux ? Les fichiers de config sont les fichiers locaux (donc pas de mot de passe MySQL, etc...)
Hors ligne Jeremie78 # Posté le 08/09/2008 à 18:43:37
Powered by GNU/Linux
Groupe : Membres
Talus est en mutualisé chez OVH (ping le domaine, c'est 90plan.ovh.net qui répond).
Donc si les logins de la BD ne sont pas protégés, n'importe qui a accès à sa BDD :euh: .

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Sargeros # Posté le 08/09/2008 à 19:58:55
Avatar
Groupe : Membres
Citation : Jeremie78
Talus est en mutualisé chez OVH (ping le domaine, c'est 90plan.ovh.net qui répond).
Donc si les logins de la BD ne sont pas protégés, n'importe qui a accès à sa BDD :euh: .


Oui, sauf que Talus n'est pas con (même si ça n'a jamais été prouvé, je le suppose :p ), et sont fichiers de configurations n'est pas celui de hébergement OVH, c'est celui qu'il utilise en local, sur http://localhost/ si tu préfère.
Hors ligne Talus # Posté le 08/09/2008 à 20:10:50
タルス
Avatar
Groupe : Membres
Et non, c'est encore mieux : c'est un fichier "dummy" qui est affiché à la place :p (y'a même un joli commentaire en entete de la source du fichier "config" :p).
Édité le 08/09/2008 à 20:11:29 par Talus
 
Hors ligne Jeremie78 # Posté le 08/09/2008 à 20:15:16
Powered by GNU/Linux
Groupe : Membres
Tout va bien dans le meilleur des mondes alors ^^
Il suffit espérer que ta "protection" joue correctement son rôle ...

[Interdit de lire les conseils avant d'avoir lu son code :lol: ]
Conseil 1 : Secret (cliquez pour afficher)
elle protège ... mal :p .

Conseil 2 : Secret (cliquez pour afficher)
vraichemin() est ton ami :-°

Conseil 3 : Secret (cliquez pour afficher)
empêcher les "/../" et les "/./" évite la remontée de l'arborescence ;) ; et associé à une "base" ('/home/toto/www/'), ça protège bien des inclusions "trompeuses"

Conseil 4 (et non des moindre !) : Secret (cliquez pour afficher)
change vite ton mot de passe MySQL ^^
Édité le 08/09/2008 à 20:20:07 par Jeremie78

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne S0pra # Posté le 08/09/2008 à 20:41:55
Avatar
Groupe : Membres
Oui, Talus, ce n'est pas du tout sécurisé !
Bien vu Jérémie78...
warmbb_tw est ton login, je ne dirais rien de plus mais tout est dans le conseil 3 de Jérémie78 ...

A+
 
Hors ligne Barbary # Posté le 08/09/2008 à 20:46:46

Avatar
Groupe : Membres
Je pense que Talus n'est pas débile pour laisser ça porte ouverte et il s'est expliqué sur sa sécurité, c'est en fait sécurisé ;)

Image utilisateur
 
Hors ligne S0pra # Posté le 08/09/2008 à 20:53:40
Avatar
Groupe : Membres
Comment ça se fait alors que j'ai devant moi l'intégralité de sa base SQL ?
 
Hors ligne Barbary # Posté le 08/09/2008 à 21:00:31

Avatar
Groupe : Membres
à partir de MySQL ?

Image utilisateur
 
Hors ligne S0pra # Posté le 08/09/2008 à 21:05:33
Avatar
Groupe : Membres
à partir de ses identifiants, puis en se connectant au PHPMyAdmin de chez OVH...
 
Hors ligne Jeremie78 # Posté le 08/09/2008 à 21:10:38
Powered by GNU/Linux
Groupe : Membres
J'ai pareil :p
Et le mot de passe commence par un j ...
Édité le 08/09/2008 à 21:11:46 par Jeremie78

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 08/09/2008 à 22:33:46
タルス
Avatar
Groupe : Membres
Wouip, vu ^^. En attendant, je désactive le module, je change le mdp, et je travaille sur le realpath().

Merci pour les avert' :p.

EDIT > Corrigé. Désormais, tous les "../" trouvés dans le parametre "file" sont supprimés ; ainsi, les accès à config autre de la manière prescrite (includes/config.php) seront considéré comme n'existant pas.
Édité le 08/09/2008 à 23:46:40 par Talus
 
Hors ligne Jeremie78 # Posté le 09/09/2008 à 00:48:01
Powered by GNU/Linux
Groupe : Membres
Avec un realpath + basename et comparaison avec "config.php", tu peux rediriger de façon sécurisée vers le fichier "dummy".

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 à 01:45:41
タルス
Avatar
Groupe : Membres
Oui, c'est ce que je faisais à la base (ou presque ; je faisais un substr pour virer la partie de mon home heberg, et après je faisais mes opérations habituelles, mais c'est drolement lourd).

Sauf qu'avec ce que tu conseilles, faut que je sache précisement si c'est le fichier à interdire l'accès (car, sait-on jamais, il peut y avoir plusieurs fichiers "config.php" par exemple ; un pour la config SQL (./includes/config.php dans mon cas), un autre pour la gestion des pages -- qui peut etre dévoilé -- (./config.php par exemple...), ...).
Édité le 09/09/2008 à 01:47:48 par Talus
 
Hors ligne Jeremie78 # Posté le 09/09/2008 à 02:09:31
Powered by GNU/Linux
Groupe : Membres
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, ...
 

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