billets

Quelques articles qui décortiquent certains points techniques en administration de système GNU/Linux, de configuration d’hébergements et autres astuces de webdesign.

Il y a 33 articles
  • 2 Méthodes en php pour recherche des lignes qui correspondent a un pattern.

    Méthode 1 - Rapide & gourmande en mémoire sur de gros fichiers

        $tab = file('/path/fichier.txt');
        $pattern = "/recherche/i";
        $line = preg_grep($pattern, $tab);
        print_r($line);    //affiche les lignes qui contiennent le mot recherche

    Méthode 2 - Plus lent mais moins gourmand

    $fh = fopen('/path/fichier.txt', 'r') or die($php_errormsg);
    while (!feof($fh)) {
        $line = fgets($fh, 4096);
        if (preg_match($pattern, $line)) { $result[ ] = $line; }
    }
    fclose($fh);
    print_r($result)

  • Un petit filtre pour utiliser facilement HeadJs avec Spip

    Headjs est une librairie jquery permettant d’optimiser le chargement des fichiers javascript. Voici comment l’utiliser dans un squelette spip en écrivant une fonction php.

    Headjs [1] est une librairie jquery permettant d’optimiser le chargement des fichiers js.

    Pour spip, une petite fonction pour utiliser headjs sur les scripts ajouter par les plugins dans le

    de vos pages.

    [(#INSERT_HEAD|headjs)]

    function headjs($insert_head){
    
        $pattern = "#src=\"(.*)\"#Ui" ; //khkzh
    
        preg_match_all($pattern, $insert_head, $split_content);
        foreach($split_content[1] as $libjs)
            $tabjs[]= '"'. $libjs . '"';
       
        $insert_head = implode(', ',$tabjs);
        
        return $insert_head;
    }

  • Avec la nouvelle version de spip3 il est possible de boucler sur des tableaux [1].

    Un bon exemple pour récuperer des tableaux multidimensionnels est la table spip_meta. Les plugins insèrent souvent des données sous forme de tableaux multidimensionnels sérialisés [2] pour sauvegarder leur configuration.

    La boucle ci-dessous va récupérer le tableau php stocké en bdd.
    Ce tableau va être affecté à la variable tabMetaAuteur, puis passé en "critère" de boucle.
    On effectue une boucle sur les valeurs puis une boucle récursive [3] a l’intérieur de celle-ci qui va descendre dans toute la profondeur du tableau.

    [(#REM)<!-- Récupération d'un tableau en bdd-->]
    <BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}>
        #SET{tabMetaAuteur,#VALEUR}
    </BOUCLE_recup_tableau>
    
    [(#REM)<!-- Boucle sur le tableau  -->]
    <ul>
        <BOUCLE_data_tab(DATA){source table, #GET{tabMetaAuteur}}>       
            <li>#CLEF
                <B_data>
                    <ul>
                        [(#REM)<!-- Boucle sur le tableau et toute sa profondeur -->]
                        <BOUCLE_data(DATA){source table, #VALEUR}{' '}>
                            <li>\[#CLE\] => #VALEUR
                                <BOUCLE_recursive_data(BOUCLE_data)>
                                 </BOUCLE_recursive_data>
                            </li>      
                        </BOUCLE_data>
                    </ul> 
                </B_data>
            </li>
        </BOUCLE_data_tab>
    </ul>

    Noter l’écriture raccourcie de la boucle de calcul :

    <BOUCLE_recursive_data(BOUCLE_data)/>

    Il est possible d’éviter une boucle et d’arriver au même résultat avec le code ci-dessous.

    <BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}>
        <BOUCLE_data(DATA){source table, #VALEUR}{' '}>
            \[#CLE\] => #VALEUR
        <BOUCLE_recursive_data(BOUCLE_data)/>
        </BOUCLE_data>
    </BOUCLE_recup_tableau>

    Une solution encore plus rapide et d’utiliser print_r($array) de php en guise de filtre :’).

    [(#GET{tabMetaAuteur}|unserialize|print_r{1})]

    À noter que le tableau doit être désérialisé contrairement au critère de boucle DATA qui accepte les 2 formats.