La configuration:Enregistrement d'un fichier .php et sauver le comprend aussi (peut-être)
J'ai un fichier standard .php (index.php) qui contient deux comprend, pour un en-tête (header.php) et un pour footer (footer.php). Le fichier index.php ressemble à ceci:
index.php
<?php
include header.php;
?>
<h2>Hello</h2>
<p class="editable">Lorem ipsum dolar doo dah day</p>
<?php
include footer.php;
?>
header.php comme ceci:
<html>
<head>
<title>This is my page</title>
</head>
<body>
<h1 class="editable">My Website rocks</h1>
et pied de page .php comme ceci:
<p>The end of my page</p>
</body>
J'écris un script PHP qui vous permet de modifier l'un des éléments ".editable" sur une page. Mon problème est que ces régions modifiables pourraient apparaître dans tous les fichiers inclus ainsi que le corps principal de index.php.
Mon code php saisit le fichier index.php avec file_get_contents(); ce qui fonctionne bien. Je suis également capable d'éditer et de sauvegarder toutes les régions ".editable" dans index.php.
Ma question:
J'ai été incapable de trouver un moyen de « trouver » le comprend et analyser à travers ceux des régions « .editable » aussi bien. Je cherche des suggestions sur la façon dont je travaillerais à travers tous les inclus dans index.php - en les vérifiant pour les régions modifiables. Aurais-je besoin d'utiliser des expressions régulières pour trouver "include * .php"? Je ne suis pas sûr d'où commencer même ...
Pour ceux d'entre vous qui souhaitent voir mon code PHP. Je me sers de la classe PHP: [texte du lien] [1] qui me permet d'écrire du code comme:
// load the class and file
$html = new simple_html_dom();
$html->load_file("index.php");
// find the first editable area and change its content to "edited"
$html->find('*[class*=editable]', 0)->innertext = "Edited";
// save the file
$html->save(index.php);
[1]: http://simplehtmldom.sourceforge.net/manual_api.htmanalyseur simple dom php
UPDATE
J'ai joué avec des expressions régulières pour essayer de faire correspondre les inclusions. Je suis assez nul à regex mais je pense que je me rapproche. Voici ce que j'ai jusqu'à présent:
$findinclude = '/(?:include|include_once|require|require_once)\s*(?:[a-z]|"|\(|\)|\'|_|\.|\s|\/)*(?=(?:[^\<\?]|[^\?\>])*\?>)/i';
Cela correspond assez bien même si elle ne semble revenir l'impair) et «lors de l'utilisation preg_match. J'essaye d'ajouter un peu de sécurité dans la regex pour m'assurer qu'elle correspond seulement aux balises php - cette partie: (? = (?: [^ \ < \?] | [^ \?>]) * \?>) - mais il ne renvoie que le premier include sur une page. Des astuces pour améliorer cette expression régulière? (Je suis là depuis environ 6 heures)
Ceci est un trou de sécurité sérieux. Laisser les gens éditer le code php réel qui fonctionnera sur votre serveur n'est pas intelligent. –
@George Edison - Le code PHP n'est pas éditable. Seul le HTML autour du PHP. Dans mon esprit (à condition que toutes les données sauvegardées soient validées correctement), ce n'est pas différent d'un système qui édite des fichiers HMTL. – Scott