セットアップ:
ヘッダー用 (header.php) とフッター用 (footer.php) の 2 つのインクルードを含む標準の .php ファイル (index.php) があります。index.php ファイルは次のようになります。
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:
<html>
<head>
<title>This is my page</title>
</head>
<body>
<h1 class="editable">My Website rocks</h1>
フッター .php は次のようになります。
<p>The end of my page</p>
</body>
ページ上の「.editable」アイテムを編集できるようにする PHP スクリプトを作成しています。私の問題は、これらの編集可能な領域が、index.php の本体だけでなく、含まれているファイルにも表示される可能性があることです。
私のphpコードは、file_get_contents()でindex.phpファイルを取得しています。これはうまく機能します。また、index.php の「.editable」領域を編集して保存することもできます。
私の問題:
インクルードを「見つける」方法を見つけられず、「.editable」領域のインクルードも解析できませんでした。index.phpのすべてのインクルードをどのように処理するかについての提案を探しています-編集可能な領域をチェックします。「include *.php」を見つけるために正規表現を使用する必要がありますか? どこから始めればいいのかわからない...
私の PHP コードを見たい人のために。私は PHP クラスを利用しています: [link text][1] これにより、次のようなコードを書くことができます:
// 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.htm シンプルな php dom パーサー
アップデート
インクルードを一致させるために、正規表現をいじってみました。私は正規表現でかなりゴミですが、近づいていると思います。これが私がこれまでに持っているものです:
$findinclude = '/(?:include|include_once|require|require_once)\s*(?:[a-z]|"|\(|\)|\'|_|\.|\s|\/)*(?=(?:[^\<\?]|[^\?\>])*\?>)/i';
preg_match を使用すると奇数の ) と ' が返されるように見えますが、これはかなりよく一致します。PHPタグ間でのみ一致するように、正規表現に少しのセキュリティを追加しようとしています-この部分: (?=(?:[^\<\?]|[^\?>])*\?>) - ただし、ページの最初のインクルードのみを返します。この正規表現を改善するためのヒントはありますか? (私は約6時間そこにいました)