ここから、ここまで 書き換える

既に出来上がっているサイトの好きな部分を、WEB上から書き換えるスクリプトを作りました。
書き換えしたい箇所を特定のコメントタグで挟んでおくだけで、以降何度でも書き換えできます。
場所も大きさも自由なので、頻繁に書き換えるトップページの更新情報とか、多数のページに跨る広告エリアの張り替えとかに使うと便利なんじゃないかなあと思います。

豆知識サイトを使って実験してみました。 左下の部分です。


サーバーのトップに「update.php」と「dat.txt」をアップロードするだけで使えます。


「update.php」にアクセスすると管理画面になります。


あらかじめ書き換えたい場所に、A か B のコメントタグをコピーして貼り付けておきます。

もしくは、書き換えたい個所の前後を、どちらかのコメントタグで挟みます。


次に管理画面のパターンのテキストエリアにコードを書き込みます。


実行ボタンを押すと、コメントタグで挟まれた箇所が書き換えられ、更新したページの一覧が表示されます。

タグごとのパターンを複数記入した場合は、各ページごとにランダムに書き換えられます。


実行ボタンの横の「バックアップ」にチェックをしておくと、サーバー上に「backupフォルダ」が作られ、実行毎に書き換えられる前の元ファイルがコピーされていきます。

万一タグの付け方を失敗するなどしてデザインを崩してしまった場合は、こちらの元ファイルを使って元に戻します。


現時点でのファイルの対象は、1階層目、2階層目、3階層目までの html(htm)です。
同じタグは1ページにひとつしか使えません。
AタグBタグ自体を、管理画面から自由に変更できます。
バックアップはチェック方式にしましたが、チェックすると実行する度に元ファイルが次々と増えていってしまうので、次回は違う方式を考えます。
将来的にはタグの種類とパターン数をもっと増やして、より実用的にしていきます。

update.php

<?php

	$y = "\n";  $sheep = "$^#";
	date_default_timezone_set('Asia/Tokyo');

	$snow = "ここから、ここまで 書き換える";

		# dat 読み込み
		$dt = file("dat.txt");

		$k = 5; $l = 0;
		for ( $i=0;$i<2;$i++ ){
		$a[$i] = rtrim( $dt[$l] ); $l++;
		$z[$i] = rtrim( $dt[$l] ); $l++;

		for ( $j=1;$j<4;$j++ ){ 
		$p[$j][$i] = str_replace( $sheep ,"\n",$dt[$k]); $k++; }}

		if ( $dt[4] == 1 ) { $check_b = "checked"; } else $check_b = "";
		$ie = 'rows="3" cols="55" style="width:400px; height:40px;"';

////////////////////////////////////////////////////////////////////////////////////
# 実行が押されたら
if (isset( $_POST["ok"] )){ 

	# POST
	for ( $i=0;$i<2;$i++ ){
	$rain = explode("\n",$_POST[$i]);
	$a[$i] = rtrim( stripslashes( $rain[0] ));
	$z[$i] = rtrim( stripslashes( $rain[1] ));

		for ( $j=1;$j<4;$j++ ){
		$p[$j][$i] = stripslashes( $_POST["p$j$i"] );
		}}

	# バックアップ処理
	$bat = $_POST["backup"];
	if ( $bat ){
	$rabbit = date("Y.m.d.H.i.s");
	if ( !is_dir( "backup" )){ umask(0); $rc = mkdir("backup",0777 ); }
	if ( !is_dir( "backup/$rabbit" )){ umask(0); $rc = mkdir("backup/$rabbit",0777 ); }
	$bone  = "backup/$rabbit/"; }

		# A-B loop
		for ( $i=0;$i<2;$i++ ){
		$r[$i] = 0;
			for ( $j=1;$j<4;$j++ ){
			if ( strlen($p[$j][$i]) > 0 ){ $r[$i]++; $rnd[$r[$i]][$i] = $p[$j][$i]; }
			}

			# ファイル検索
			$blood = "./"; jump();

			if ( $dir1 = opendir("./")) { 	
			while (( $fire = readdir($dir1)) !== false ) {
			if ( $fire != "." && $fire != ".." && $fire !="backup" && is_dir($fire)) { 
			$blood = "$fire/"; jump();

				if ( $dir2 = opendir($fire)) { 
				while (( $fox = readdir($dir2)) !== false ) {
				if ( $fox != "." && $fox != ".." && is_dir("$fire/$fox")) {
				$blood = "$fire/$fox/"; jump();

				}} closedir($dir2); }

			}} closedir($dir1); }

		# 文章結合
		for ( $j=1;$j<4;$j++ ){ 
		$p[$j][$i] = rtrim( $p[$j][$i] );
		$p[$j][$i] = str_replace( array( "\r\n","\n","\r" ),$sheep,$p[$j][$i] );
		}


		} // A-B loop //

			# dat更新
			if ( $bat ){ $bug = 1;	$check = "checked"; } else { $bug = 0; $check = "";}

			$mouse = $a[0].$y.$z[0].$y.$a[1].$y.$z[1].$y.$bug.$y.
                                  $p[1][0].$y.$p[2][0].$y.$p[3][0].$y.
                                  $p[1][1].$y.$p[2][1].$y.$p[3][1];

			$fish = fopen( "dat.txt","w" );
			fwrite( $fish,$mouse );
			fclose( $fish );

			for ( $i=0;$i<2;$i++ ){ 
			for ( $j=1;$j<4;$j++ ){
			$p[$j][$i] = str_replace( $sheep ,"\n",$p[$j][$i]);
			}}

} // 実行が押されたら //



# html
print <<< penguin
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">

<style>
body{ background:#000; color:#fff; padding:0 20px; letter-spacing: 1px; line-height :20px;
		font-family: "ヒラギノ角ゴ Pro W3",	"Hiragino Kaku Gothic Pro", "メイリオ", 
	   Meiryo, Osaka, "MS Pゴシック","MS PGothic",sans-serif; }
h1{ margin :30px 0; font-size :18px; padding :10px;
    color :#fff ;width :370px; text-align:center; }
h1,#moon{ background :#222;border :1px solid #666; }
p{ font-size :12px; margin :15px 0 3px 10px; }
#wrap{ width :925px; clear:both;overflow: hidden; }
#block_L,#block_R{ width :410px;  float :left; margin :10px 20px 30px 0;
padding :10px 20px 20px; border :1px solid #fff; }
#block_R{ margin :10px 0 0 0; }
#moon{ clear:both;overflow: hidden; width :390px; margin :20px 0;
       padding :20px 30px; }
#moona,#moonb{ font-size :10px; line-height :16px; width :195px; float :left; }
input { margin:0 0 10px 0; }
#moon a{color:#ccc;}
</style>

<title>$snow</title>
</head>

<body>
<h1>$snow</h1>
<form action="$PHP_SELF" method="post"> 
<input type="submit"   name="ok" 	 value="  実行  " > 
<input type="checkbox" name="backup" value="backup" $check > バックアップ   
<a href="/"  target="_blank" >index</a>

$moon

<div id="wrap">
<div id = "block_L">
<p>Aタグ</p><textarea name="0" $ie >$a[0]\n$z[0]</textarea>
<p>パターン1 </p><textarea name="p10" $ie >{$p[1][0]}</textarea>
<p>パターン2 </p><textarea name="p20" $ie >{$p[2][0]}</textarea>
<p>パターン3 </p><textarea name="p30" $ie >{$p[3][0]}</textarea>
</div>

<div id = "block_R">
<p>Bタグ</p><textarea name="1" $ie >$a[1]\n$z[1]</textarea>
<p>パターン1 </p><textarea name="p11" $ie >{$p[1][1]}</textarea>
<p>パターン2 </p><textarea name="p21" $ie >{$p[2][1]}</textarea>
<p>パターン3 </p><textarea name="p31" $ie >{$p[3][1]}</textarea>
</div>

</div><!-- wrap -->
</body>
</html>
penguin;


	function jump(){ 

			extract( $GLOBALS ); global $sun,$moon;

				$eye = opendir( $blood );
				while( $chrome = readdir($eye)) 
				if ( $chrome !="." && $chrome !=".." && preg_match('/.htm/',$chrome )){ 

					# file名取得
					$heart = $blood.$chrome;
					$dog = file( $blood.$chrome );

						# backup
						if ( $bat && $i == 0 ){
						if ( !is_dir( "$bone$blood" )){ umask(0); $rc = mkdir("$bone$blood",0777 ); }
						copy( $heart,"$bone$blood$chrome" ); }

							# ランダム処理
							foreach ( $dog as $cat ) {
							$rm = rand(1,$r[$i]);
							$word = $rnd[$rm][$i];

								# 書き変え
								if ( preg_match( $a[$i] , $cat )){
								$lion  = implode( "", file( $heart ));
								$tiger = explode( $a[$i], $lion );
								$wolf  = explode( $z[$i], $tiger[1] );
								$bear  = "$tiger[0]$a[$i]\n$word\n$z[$i]$wolf[1]";

									# html上書き
									$fish = fopen( $heart,"w" );
									fwrite( $fish,$bear );
									fclose( $fish );
									$sun[$i] .="<br>\n<a href='$blood$chrome' target='_blank'>$chrome</a>";


				}}} closedir($eye);
	# 結果表示
	$moon = "<div id='moon'>\n".
		"<div id='moona'>-- Aタグ -- <br>$sun[0] \n</div>".
		"<div id='moonb'>-- Bタグ -- <br>$sun[1] \n</div>\n</div>";

	} // function jump() //

dat.txt

<!-- A ここから A -->
<!-- A ここまで A -->
<!-- B ここから B -->
<!-- B ここまで B -->
1