読者です 読者をやめる 読者になる 読者になる

ITは遊び

毎日パソコンのことばかり考えてる

テキストで簡単編集!オンラインブックマークスクリプト、に認証機能と編集機能を追加

前回:2008-04-03 - ITで遊ぶ

概要。使うパソコンやブラウザが増えるとブックマークの管理とか共有って面倒だ。だから、ウェブページがブックマークだと助かるかもしれない。簡単に増やしたり消したりできるようなインターフェイスを作るよりは簡単なテキストを書き換えるだけだと楽だと思う。さらに階層化は必須だろう。

認証機能と編集機能を付けました

テキストで編集できることが便利なンラインブックマークスクリプトに編集機能をつけました。どんなテキストを書けばよいのかは、前回2008-04-03 - ITで遊ぶを参照。

認証機能と編集機能を付けました。ただ、本当に付けただけなので注意。その辺は自己責任でお願いします。

使ってみてなんぼだとおもうので

また、設置してみた。パスワードは「password」。お試し用のため、書き換えはできない仕様です。

お試し用サイトはこちら

設置の仕方

  1. 下のソースの1行目のパスワードと2行目のブックマークファイルの格納先を書き換える。
  2. 文字コードutf-8で保存し、PHPの動くウェブサーバにアップロードする。
  3. ブックマークファイルの格納先にした空ファイルを作り、apacheに書き込み権限(例えば777等)を与える。または、格納したディレクトリに書き込み権限を与える。

ソースコード

PHPライセンスで。

<?php
$password='password';	//パスワード
$file='./bookmark.dat';	//ブックマークファイルの格納先
header('Content-type: text/html; charset=utf-8');
ini_set('session.cookie_lifetime','2592000');
ini_set('session.gc_maxlifetime','2592000');
session_name('74thbookmark');
session_cache_limiter('private');
session_start();
if( $_SESSION['74thbookmark'] != 1 ){
	if( $_POST['password'] === $password ){
		$_SESSION['74thbookmark']=1;
	}else{
?>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>
<h1>74th bookmark</h1>
<form action="./" method="post"><input type="password" name="password" /><input type="submit" /></form>
</body></html>
<?php
		exit();
	}
}else if( isset($_GET['logout'])){
	unset($_SESSION['74thbookmark']);
?>
<html><body>Logout</body></html>
<?php
	exit();
}else if( isset($_GET['edit']) ){
	if( isset($_POST['text']) ){
		$fp=fopen($file,'w');
		fwrite($fp,mb_convert_encoding($_POST['text'],'utf-8'));
		fclose($fp);
	}
	$fp=fopen($file,'r');
?>
<html><head><body>
<form method="POST">
<input type="submit"><a href="./">back</a><br />
<textarea name="text" cols="100" rows="40" wrap="off"><?php 
	while($a=fgets($fp)){
		echo($a);
	} 
?></textarea><br />
</form>
</body></html>
<?php
	exit();
}
$fp = fopen($file,'r');
$bookmark = array();
$bookmark[0]=array();
$refere = array();
$refere[0]=0;
$category = array();
$j=0;
$depth=0;
while( $line = fgets($fp) ){
	if( mb_ereg('^(\*+)(.+)$',$line,$result) ){
		$j++;
		$depth = strlen($result[1]);
		$refere[$depth]=$j;
		$category[$j][0]=$refere[$depth-1];
		$category[$j][1]=trim($result[2]);
		$category[$j][2]=$depth;
		$bookmark[$j]=array();
	}else if( mb_ereg('^(\S+) (.+)$',$line,$result)){
		$link[0]=$result[1];
		$link[1]=trim($result[2]);
		array_push($bookmark[$j],$link);
	}
}
?>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script language="JavaScript">
<!--
var beforecategory='m0';
function OpenCategory(category) {
	if( document.all['c'+category] ){
		if( document.all['c'+category].style.display == "none" ){
			if( document.all['b'+category] ){
				document.all['b'+beforecategory].style.display = "none";
				document.all['b'+category].style.display = "block";
				beforecategory=category;
			}
			document.all['c'+category].style.display = "block";
		}else{
			document.all['c'+category].style.display = "none";
		}
	}else{
		if( document.all['b'+category] ){
			document.all['b'+beforecategory].style.display = "none";
			document.all['b'+category].style.display = "block";
			beforecategory=category;
		}
	}
}
//-->
</script>
</head><body>
<table width="100%"><tr><td width="40%" align="left" valign="top">
<?php
echo("<a href=\"javaScript:OpenCategory('m0')\">トップ</a><br />\n");
$see=1;
$mark='';
for($i=1;isset($category[$i]);$i++){
	if($category[$i][2] > $see){
		echo("<div id=\"cm".$category[$i][0]."\" style=\"display:none\">\n");
		$mark='';
		for($j=1;$j<$category[$i][2];$j++){
			$mark.='*';
		}
		$see = $category[$i][2];
	}else{
		for($j=0;$j<($see - $category[$i][2]);$j++){
			echo("</div>\n");
		}
		$mark='';
		for($j=1;$j<$category[$i][2];$j++){
			$mark.='*';
		}
		$see = $category[$i][2];
	}
	echo($mark."<a href=\"javaScript:OpenCategory('m".$i."')\">".$category[$i][1]."</a><br />\n");
}
?>
</td><td align="left" valign="top">
<?php
for($i=0;isset($bookmark[$i]);$i++){
	if(count($bookmark[$i])!=0){
		if($i==0){
			echo("<div id=\"bm0\" style=\"display:block\">\n");
		}else{
			echo("<div id=\"bm".$i."\" style=\"display:none\">\n");
		}
		foreach($bookmark[$i] as $one){
			echo('<a href="'.$one[0].'">'.$one[1]."</a><br />\n");
		}
		echo("</div>\n");
	}
}
?>
</td></table>
<a href="./?edit">edit</a>
<a href="./?logout">logout</a>
</body></html>

で、

作った自分は手放せなくなりました。