website-structuur-class

Gesponsorde koppelingen

PHP script bestanden

  1. website-structuur-class

« Lees de omschrijving en reacties

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
<?php
class structure
{
     private $structure;
     private $variables;
     private $contents;
     
     //Stel een aantal variabelen in
    public function __construct($cur_file, $match_name = NULL)
    {

         //Het bestand dat doorzocht wordt
        $this->variables['cur_file'] = $cur_file;
        
        //De naam van de capture group
        //Dit mag ook een array zijn, die de match functie

        $this->variables['match_name'] = $match_name;
        
        //De array met match regexes, welke op NULL staat zodat wij geen geheugen gaan gebruiken
        //Maar toch een regex kunnen toevoegen met []

        $this->variables['match_regexes'] = NULL;
        
        //De array met prepare regexes
        $this->variables['prep_regexes'] = NULL;
        
        //De array met prepare vervangingen, het is je eigen probleem als je hier niet genoeg dingen doorgeeft;)
        $this->variables['prep_replacements'] = NULL;
        
        //De array met modules
        $this->variables['modules'] = NULL;
        
        //De array in welke alle matches komen te staan, deze array wordt ook uiteindelijk teruggegeven met display()
        $this->structure[$cur_file] = array();
    }

    
    //Voeg functies toe om het resultaat te bewerken
    //$func_use mag 'each' of 'once' zijn
    //'each' betekent dat deze functie moet worden uitgevoerd op ieder element in de array
    //'once' betekent dat deze functie slechts 1 keer per bestand wordt uitgevoerd
    //(bijv. om een paar bestanden toe te voegen die moeilijk zijn te vinden via het script zelf)
        
    //Iedere module krijgt 3 argumenten mee.
    //De eerste kan 2 dingen zijn:
    //1. Als de $func_use 'each' is, is het het huidige bestand
    //2. Als de $func_use 'once' is, is het de complete structure array
    //De andere zijn alle variabelen van het huidige structure object en het huidige structure object zelf ($this)
    //(in die volgorde)
    //Je hoeft echter niet persee iets te doen met deze argumenten

    public function add_module($func_name, $func_use = 'each')
    {

        $this->variables['modules'][] = array('func_name' => $func_name, 'func_use' => $func_use);
    }

    
    //Een 'match regex' toevoegen, welke zegmaar de structuur zullen aangeven
    public function add_match($regex)
    {

         //Omdat preg_match %'tjes voor en na een regex wil hebben, kijken we hier even of die er wel zijn
         if(!preg_match('/^%/', $regex))
         {

            $regex = '%'.$regex;
        }

        
        if(!preg_match('/%$/', $regex))
        {

            $regex = $regex.'%';
        }

        
        //En we voegen de regex toe aan de variables array
        $this->variables['match_regexes'][] = $regex;
    }

    
    //Een 'voorbereid regex' toevoegen, welke op de inhoud los kunnen worden gelaten om bijvoorbeeld commentaren uit PHP script te halen
     //Een voorbeeld regex + vervanging (deze regel haalt alle PHP comments uit een bestand)
     //$contents = preg_replace('%\/\/.*\r\n|\/\*(?:.*?\r*?\n*?)*?\*\/%', '', $contents);

    public function add_prepare($regex, $replacement)
    {

         //Als de regex al %en heeft, voeg ze niet toe
         //In dit geval gebruik ik / om de regex aan te geven, omdat dat hier duidelijker is (t.o.v '%%$%')

        if(!preg_match('/^%/', $regex))
         {

            $regex = '%'.$regex;
        }

        
        if(!preg_match('/%$/', $regex))
        {

            $regex = $regex.'%';
        }

        
        $this->variables['prep_regexes'][] = $regex;
        $this->variables['prep_replacements'][] = $replacement;
    }

    
    //Verwerk de array met bestanden
    public function process()
    {

         //Bereidt de inhoud voor
         $this->prepare();
         //Zoek de matches
         $this->match();
         
         //Mits er modules zijn toegevoegd
         if(!is_null($this->variables['modules']))
         {

            //Voer de modules uit
            foreach($this->variables['modules'] as $module)
            {

                 //Als deze module op ieder gevonden bestand moet worden losgelaten
                 if($module['func_use'] == 'each')
                {

                     //En mits er wel gevonden bestanden zijn
                     if($this->structure[$this->variables['cur_file']] != NULL)
                     {

                         $tmp_structure = NULL;
                        //Voeren we deze module uit op ieder gevonden bestand
                         foreach($this->structure[$this->variables['cur_file']] as $tmp_file)
                         {

                              $tmp = $module['func_name']($tmp_file, $this->variables, $this);
                              if(!is_null($tmp))
                              {

                                $tmp_structure[$tmp_file] = $tmp;
                            }

                            else
                            {
                                $tmp_structure[] = $tmp_file;
                            }
                        }

                        
                        $this->structure[$this->variables['cur_file']] = $tmp_structure;
                    }
                }

                //Als deze module op de hele array moet worden uitgevoerd
                elseif($module['func_use'] == 'once')
                {

                     //Voeren we deze module uit op de array van gevonden bestanden
                    $this->structure[$this->variables['cur_file']] = $module['func_name']($this->structure[$this->variables['cur_file']], $this->variables, $this);
                }
            }
        }
    }

    
    //Een functie om de array weer te geven
    public function display($func_name = NULL)
    {

         //Als er een functie op is gegeven
        if(!is_null($func_name))
        {

             if($func_name == 'array')
             {

                 //Een speciale 'functie', welke ENKEL de array teruggeeft
                return $this->structure[$this->variables['cur_file']];
            }

            else
            {
                 //De functie die op is gegeven
                return $func_name($this->structure);
            }
        }

        else
        {
             //Een standaard teruggave, welke een 'mooie' array weergeeft
            return '<pre>'.print_r($this->structure, true).'</pre>';
        }
    }

    
    //Debug functie om protected/private variabelen te kunnen bekijken
    public function debug($var)
    {

        return $this->$var;
    }

    
    //Bereidt de inhoud van het bestand voor (optioneel uiteraard)
    private function prepare()
    {

         $this->contents = $this->get_contents($this->variables['cur_file']);
         
         //Mits er voorbereid regexen en vervangingen zijn toegevoegd
         if(!is_null($this->variables['prep_regexes']) && !is_null($this->variables['prep_replacements']))
         {

              //Zoek in de tekst naar de regex, en vervang deze
            $this->contents = preg_replace($this->variables['prep_regexes'], $this->variables['prep_replacements'], $this->contents);
        }
    }

    
    //De methode om matches te vinden
    private function match()
    {

         //Voor iedere match regex die er is opgegeven
         foreach($this->variables['match_regexes'] as $regex)
         {

             if(is_int(stripos($regex, '(?P<'.$this->variables['match_name'].'>')))
             {

                  //Als er een capture groep is opgegeven, gebruik die
                preg_match_all($regex, $this->contents, $matches);
                $tmp_structure = NULL;
                
                if(isset($matches[$this->variables['match_name']][0]))
                {

                    foreach($matches[$this->variables['match_name']] as $tmp)
                    {

                        $this->structure[$this->variables['cur_file']][] = $tmp;
                    }
                }
            }

            else
            {
                 //anders, geef gewoon alle matches terug
                preg_match_all($regex, $this->contents, $matches);
                
                foreach($matches[0] as $match)
                {

                    $this->structure[$this->variables['cur_file']][] = $match;
                }
            }
        }

        
        //Als er geen matches zijn gevonden, geef een 'mooie' waarde terug
        if(!isset($this->structure[$this->variables['cur_file']][0]))
        {

            $this->structure[$this->variables['cur_file']] = NULL;
        }
    }

    
    //Inhoud van het bestand ophalen
    private function get_contents($file)
    {
    
         //Om gewoon zeker te weten dat we niet een niet bestaand bestand proberen te openen
        if(file_exists($file))
        {

            return file_get_contents($file);
        }

        else
        {
            return NULL;
        }
    }
}

?>

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.