Archive pour novembre 2004

Process Kill0r

mardi 2 novembre 2004 | Webdesign

Encore du PHP pour un script de fainéant qui kill les processus indésirables sous windows (pratique avant de lancer une application qui nécessite beaucoup de ressources). A customiser selon vos envies. A titre culturel, shell_exec exécute une commande et retourne le résultat dans une chaîne. On se sert ici de la commande tasklist qui dresse une liste des processus lancés. Si une des lignes contient le nom d'un exécutable concerné, le signal d'arrêt lui est envoyé avec taskkill /IM. L'option /F force la fin si celle-ci prend son temps.

Kill Process
<?php

/* Process Kill0r 1.0 by dew */

$str=shell_exec("tasklist");
$str=explode("\n",$str);

$process=array(
    'Apache.exe', // Apache
    'mysqld-nt.exe', // MySQL
    'Winamp.exe', // Winamp
    'atiptaxx.exe', // Control Panel ATI
    'ati2evxx.exe', // Encore de l'ATI
    'tablet.exe', // Tablette graphique
    'TabUserW.exe', // Tablette graphique
    'wmiprvse.exe', // Windows Management Thing
    'cthelper.exe', // Creative Thing
    'uphclean.exe', // Fast session close
    'spoolsv.exe', // Spool Impression
    'supercopier.exe', // SuperCopier
    'ctfmon.exe', // Microsoft Language Thing
);

foreach($str as $ligne) {
    foreach($process as $p) {
        if(preg_match('/'.$p.'/i',$ligne)) {
            exec("taskkill /IM $p /F");
        }
    }
}

?>

A lancer avec la commande php.exe -q script.php (si le chemin est spécifié dans PATH, etc...).

Fini le geek stuff, demain on reprend avec de la philo, promis.

Optimisation PHP le retour : strtr vs str_replace

lundi 1 novembre 2004 | Webdesign

PHP

Pour remplacer des mots précis dans une chaîne de texte il existe plusieurs méthodes. Les plus évidentes sont :

  • La fonction strtr associée à un tableau contenant les chaînes à traduire.
  • Une simple série de str_replace.

Exemple pratique avec des BBtags :

Le tableau d'éléments à remplacer pour strtr :

$arr=array('[/#]'=>'</span>', '[b]'=>'<b>', '[/b]'=>'</b>', '[i]'=>'<i>', '[/i]'=>'</i>', '[quote]'=>'<blockquote>', '[/quote]'=>'</blockquote>');

Le texte de test bidon :

$texte='In a [b]recent article[/b], former TRG CEO Jeff V. Merkey had offered to pay [i]50K USD for a BSD-licensed[/i] Linux. [quote]Groklaw did a followup on his offer[/quote], to which [#red]Jeff responded by notifying the FBI of Groklaws hate crimes violation[/#]. Merkey doesnt exactly have a great record, either, which is made even more apparent by his recent threats to file suit against Merkey.net for slander and [i]trademark infringement[/i], amongst others. In addition, he has also reported [b]Merkey.net[/b] to the FBIs hate crime department. What could Merkey.net do to get Jeff V. Merkey off their backs ?';

Avec str_replace :

$texte=str_replace('[/#]','</span>',$texte);
$texte=str_replace('[b]','<b>',$texte);
$texte=str_replace('[/b]','</b>',$texte);
$texte=str_replace('[i]','<i>',$texte);
$texte=str_replace('[/i]','</i>',$texte);
$texte=str_replace('[quote]','<blockquote>',$texte);
$texte=str_replace('[/quote]','</blockquote>',$texte);

Avec strtr :

$texte=strtr($texte,$arr);

Résultat sur 10000 itérations (temps en millisecondes) :

str_replace vs strtr

Conclusion : str_replace reste la solution la plus performante même si l'écriture est plus longue et moins souple.

Mise à jour : Sur la suggestion de Romain, la solution exploitant des tableaux avec str_replace mérite encore plus d'attention.

str_replace avec tableau :

$pattern = array('[b]', '[/b]', '[i]', '[/i]');
$repl = array('<b>', '</b>', '<i>', '</i>');
$texte = str_replace( $pattern, $repl, $texte);

str_replace vs str_replace