jeudi, octobre 03, 2024
Nom d'utilisateur : Mot de passe :
Les quickies sont des exemples de code, facilement intégrables à vos propres projets. De part la simplicité du code, il n'est pas envisageable d'en faire un "projet" à part.

N'hésitez pas à faire part de vos commentaires, et surtout amusez-vous bien !

[NEWS]
Envoyé par unreal
Le bout de code qui suit permet d'afficher un élément aléatoire dans une page dynamique. Il lit un fichier texte 'rand_data.txt' contenant un élément aléatoire par ligne et l'affiche.

Pour l'utiliser, il suffit d'"inclure" le fichier php à l'endroit où l'élément doit s'afficher et de placer rand_data.txt dans le même dossier que le fichier php appelé par les browsers des visiteurs.

Exemple d'utilisation :

index.php
[...]
<?php require ('inc/inc_random.php'); ?>
[...]


rand_data.txt
<img src="img/img1.png" title="Title 1" />
<img src="img/img2.png" title="Title 2" />
<img src="img/img3.png" title="Title 3" />


inc/inc_random.php
<?php
$fileName = dirname($_SERVER['SCRIPT_FILENAME']).'/rand_data.txt';

$i = 0;
$h = @fopen($fileName, 'r');

if ($h) {
    while (!feof($h)) {
        $text[$i] = fgets($h, 4096);
        $i++;
    }
    fclose($h);
}

echo ($text[rand(0, $i - 2)]);
?>


Bon code !

Posté le 30/11/05 à 21:33 - 0 Commentaires...

[NEWS]
Envoyé par unreal
Quand on veut compter le nombre de lignes d'un fichier texte, il y'a bien sur des bonnes et des mauvaise façons de procéder.

Exemple de mauvaise méthode

Le bout de code qui suit provient des commentaires utilisateurs sur PHP.Net :

$lines = file ('filename');
$num_lines = count ($lines);


Donc, file() charge entièrement en mémoire le fichier sous forme d'array, avant de compter le nombre de lignes.

L'analyse d'un log Apache de 55Mo consomme ainsi 130Mo de mémoire PHP (valeur déterminée grâce à memory_limit).


Exemple de bonne méthode

Cette fois, au lieu de charger complètement le fichier en mémoire, la fonction charge ligne par ligne. La consommation de mémoire à un moment donné ne dépasse donc pas la mémoire nécessaire pour charger une ligne de texte.

<?php
function LineCount($fileName) {
    $fileCount = -1;
    $h = @fopen($fileName, 'r');
    if ($h) {
        while (!feof($h)) {
            fgets($h, 4096); // Voir remarque
            $fileCount++;
        }
        fclose($h);
    }

    return($fileCount);
}


Remarque : la valeur numérique est à modifier selon la longueur maximale des lignes.


Conclusion

Se méfier des gens qui postent des exemples de code moisi. wink.gif

Posté le 15/07/05 à 04:53 - 2 Commentaires...

[NEWS]
Envoyé par unreal
Si vous avez lu ce dossier vous saurez qu'il ne faut jamais stocker un mot de passe directement en clair dans la base de données. Alors comment faire quand l'utilisateur a perdu son mot de passe et qu'il faut lui en envoyer un nouveau par mail ?

Solution : utiliser le générateur de mots de passe qui suit !

<?php
function random_pw($pw_length) {
    $pass = NULL;
    $charlist = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjklmnpqrstuvwxyz0123456789';
    $ps_len = strlen($charlist);
    mt_srand((double)microtime()*1000000);

    for($i = 0; $i < $pw_length; $i++) {
        $pass .= $charlist[mt_rand(0, $ps_len - 1)];
    }
    return ($pass);
}
?>


Cliquez ici pour la démo !

Posté le 17/06/05 à 20:55 - 3 Commentaires...

[NEWS]
Envoyé par unreal
Il arrive souvent qu'on ait besoin de limiter la longueur d'un texte, par exemple quand on souhaite afficher une news sur sa page d'accueil avec un lien "afficher la suite" quand la longueur dépasse un seuil.

En première approche, cela paraît facile à réaliser, mais les choses se compliquent quand le texte en question est du HTML. Hors de question alors de couper en plein milieu d'une balise contenant un espace (<a href...> par exemple) ou de couper sans refermer la balise.

Le petit script qui suit permet de retourner un nombre de mots donné, tout en refermant les balises proprement.

<?php
function text_cut($str, $no_words_ret) {

    // $str est la chaîne à couper
    // $no_words_ret est le nombre de mots qu'on souhaite en retour

    static $tags = array ('div', 'span', 'b', 'u', 'i', 'a', 'ul', 'li');

    $word_count = 0;
    $pos = 0;
    $str_len = strlen($str);
    $str .= ' <';
    $open_tags = array ();

    while ($word_count < $no_words_ret && $pos < $str_len) {
        $pos = min(strpos($str, ' ', $pos), strpos($str, '<', $pos));

        if ($str[$pos] == '<') {
            if ($str[$pos + 1] == '/') {
                array_pop($open_tags);
                $word_count++;
            } else {
                $sub = substr($str, $pos + 1, min(strpos($str, ' ', $pos), strpos($str, '>', $pos)) - $pos - 1);
                if (in_array($sub, $tags)) {
                    array_push($open_tags, $sub);
                }
            }
            $pos = strpos($str, '>', $pos) + 1;
        } else {
            $pos++;
            $word_count++;
        }

    }

    $str = substr($str, 0, $pos);

    if (count($open_tags) > 0) {
        foreach($open_tags as $value) {
            $str .= '</' . array_pop($open_tags) . '>';
        }
    }

    return($str);
}

?>


Petite remarque : il est tout à fait possible que le script ne renvoit pas exactement le nombre de mots spécifié. Ceci dit, le delta ne depasse pas 1 ou 2 mots, c'est pas vraiment la fin du monde. wink.gif

Comme toujours, n'hésitez à faire part de vos remarques et critiques.

Posté le 07/05/05 à 16:05 - 1 Commentaires...

[NEWS]
Envoyé par unreal
Et oui, c'est très chiant de recevoir sans cesse du spam, alors j'ai développé un petit script qui permet de générer un grand nombre d'adresses sémi-aléatoires. En effet, les spammeurs exploitent des bots (harvesters) qui parcourent le Net à la recherche de pages contenant des adresses e-mail, qui seront donc collectées et deviendront cible de spam. Ce petit script facile à mettre en place permet de satisfaire parfaitement les besoins des spammeurs et dispose des features suivantes :

  • Génération de noms/adresses prononciables grâce à une super technologie que j'ai mise au point en une 1/2 heure.
  • Paramètrage du temps de génération des pages (histoire de ralentir les bots au maximum). Sinon la génération se fait en quelques ms à peine.
  • Paramètrage du nombre d'e-mails par page, de même que le nombre de pages qui sera proposé à explorer


Ci-dessous le code, libre à vous de l'améliorer.
<?php
$emails_per_page = 10;
$page_gen_time = 0; // Temps que la page mettra a se generer (en secondes)
$tot_pages = 2; // Nombre de pages d'emails qui seront proposes

function wordGen($Length) {
    static $data = array(
        'v1' => array('a', 'e', 'i', 'o', 'u'),
        'v2' => array('ee', 'oo'),
        'c1' => array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'v', 'w', 'y', 'z'),
        'c2' => array('ch','dd', 'gg', 'll', 'qu', 'ss', 'tt'),
        'end' => array('age', 'ance', 'ate', 'action', 'ence', 'er', 'ic', 'ie', 'ive', 'ude', 'y'),
    );

    static $order = array(
        '4' => array('c1', 'end'),
        '5' => array('c1', 'v1', 'c1', 'end'),
        '6' => array('c1', 'v2', 'c1', 'end'),
        '7' => array('c1', 'v2', 'c2', 'end'),
        '8' => array('c1', 'v1', 'c2', 'v1', 'c1', 'end')
    );

    $Str = NULL;

    $len = count($order[$Length]);

    for($i = 0 ; $i < $len ; $i++) {
        $rand = rand(0, count($data[$order[$Length][$i]]) - 1);
        $Str .= $data[$order[$Length][$i]][$rand];
    }

    return($Str);
}

function emailGen() {
    static $net = array('com', 'co.uk', 'fr', 'net', 'org');

    $nameLength = rand(4, 8);
    $domainLength = rand(5, 8);
    $Length = array($nameLength, $domainLength);

    $Str = NULL;

    for($repeat = 0 ; $repeat < 2 ; $repeat++) {
        $Str .= wordGen($Length[$repeat]);

        if ($repeat == 0)
            $Str .= '@';
    }

    $Str .= '.' . $net[rand(0, count($net) - 1)];

    return($Str);
}

$page = 1;
if (isset($_GET['page']));
$page = $_GET['page'];

if ($page + 1 < $tot_pages) {
    $Str = '<a href="email.php?page=' . ($page + 1) . '">Contact:</a>';
} else {
    $Str = 'Contact:';
}

$Str .= "<br /><br />\n";

for($i = 0 ; $i < $emails_per_page ; $i++) {
    $email = emailGen();
    $Str .= '<tr><td>' . ucfirst(wordGen(rand(4, 8))) . ' ' . ucfirst(wordGen(rand(4, 8))) . "</td><td><a href=\"mailto:$email\">$email</a></td></tr>\n";
}

sleep($page_gen_time);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Emails</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
    <table>
        <?php echo ($Str); ?>
    </table>
</body>
</html>


Vous pouvez voir le code précédent en action par ici.

Posté le 25/04/05 à 19:13 - Commentaires désactivés

2 pages... [1-5][6-7]