[PHP] CMS: Files includen vanuit database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FunzoneQ!
  • Registratie: Oktober 2002
  • Laatst online: 15-11-2024
Dag mede-GoTters :)

Ik zit met een probleem. Ik heb een CMS gemaakt, maar nu wil ik vanuit de database een lokaal PHP bestand includen dmv een tag [include:bla.php] ofzo.
Ik dacht dat ik dit ging aanpakken door een eregi_replace met regular expressions te gebruiken, alleen dat dacht ik blijkbaar mis, want ik kom er niet uit.

Dit is wat ik heb aan reg expressions:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$content = eregi_replace("^[[content:]+[0-9A-Za-z_]+[/.html|/.htm|/.php|/.inc]+[]]$", 
includeCMSfile(PATH.'\\2\\3'), $content);

function includeCMSfile($file){
    if(file_exists($file)){
        $fp = fopen($file, 'r');
        $info = fread($fp, strlen($file));
        fclose($fp);
        return $info;
    }else{
        return FALSE;
    }
}


Nu geeft hij aan dat mijn regulair expression fout is, kan ik ook wel begrijpen aangezien ik daar geen held in ben :P

Kan iemand mij een beetje op weg helpen?

Grtz,

Arnoud

//edit: layout fuckup ;)

[ Voor 4% gewijzigd door FunzoneQ! op 13-04-2004 14:40 ]

Bla


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Probeer die actie eens stap voor stap te doorlopen om te achterhalen wat er nu daadwerkelijk gebeurt. Zal de replace functie nu het argument van de includeCMSfile functie, of het resultaat van die functie met \1\2 als argument aanpassen?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • FunzoneQ!
  • Registratie: Oktober 2002
  • Laatst online: 15-11-2024
Janoz schreef op 13 april 2004 @ 14:45:
Probeer die actie eens stap voor stap te doorlopen om te achterhalen wat er nu daadwerkelijk gebeurt. Zal de replace functie nu het argument van de includeCMSfile functie, of het resultaat van die functie met \1\2 als argument aanpassen?
Tnx for the tip. Heb ik gedaan doormiddel van preg_match. Een vriend van me heeft mijn regex aangepast. Nu pakt hij wel wanneer er alleen de include code staat, alleen wanneer er 1 teken bij komt, doet hij het niet meer.

code:
1
2
3
4
5
$String = '[include:10polyringtonesinclude.php]';
$RegEx  = '/^\\[(include:)([0-9a-zA-Z_\.]+\.(html?|php|inc))\]$/';
preg_match($RegEx, $String, $Matches);

echo '<pre>'; print_r($Matches); echo '</pre>';


zo dus wel netjes.
output:
code:
1
2
3
4
5
6
7
Array
(
    [0] => [include:10polyringtonesinclude.php]
    [1] => include:
    [2] => 10polyringtonesinclude.php
    [3] => php
)


maar zodra ik de string verander (spatie toevoeg doet hij het niet meer).

code:
1
2
3
4
5
6
$String = ' [include:10polyringtonesinclude.php]';

output:
Array
(
)


Iemand enig idee hoe dit komt?

Grtz

Arnoud

Bla


Acties:
  • 0 Henk 'm!

  • FunzoneQ!
  • Registratie: Oktober 2002
  • Laatst online: 15-11-2024
Ok ik heb de uiteindelijke code gevonden (met hulp van Wouter, tnx ;))
dus voor de mensen die het misschien ooit willen gaan gebruiken (?) hier is de juiste regex

code:
1
$RegEx      = '/\s*\\[(include:)([0-9a-zA-Z_\.]+\.(html?|php|inc))\]\s*/';


Grtz,

Arnoud

Bla