2009年07月01日


Form(サーバー送信)汎用スケルトン(5) : ディレクトリ内のファイル一覧


ブラウザでダウンロード
今回は、ファイルを3つに分けたので、common.php と、view.php
はダウンロードパッケージの中にあります。
<?
// *********************************************************
// 共通部分
// *********************************************************
require_once( 'common.php' );

// *********************************************************
// 変数
// *********************************************************
// データを作成するディレクトリ
$upload_dir = './upload';
// テーブルタグを含むファイル名リストの文字列
$upload_list = '';
// 一行の列数
$cols = 4;


////////////////////////////////////////////////////////////
// POST された場合の処理
////////////////////////////////////////////////////////////
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

	if ( !file_exists( $upload_dir ) ) {
		mkdir( $upload_dir );
	}

	$Message = "POSTされました<br>\n";

	// テスト用の簡単な ID 取得
	$srcid = uniqid();

	// ファイルへ入力されたデータを書き込み
	file_put_contents( "$upload_dir/$srcid.txt", $_POST['text'] );

}


////////////////////////////////////////////////////////////
// 常に実行するファイル一覧の取得
////////////////////////////////////////////////////////////
$DirHandle = @opendir($upload_dir);
if ( $DirHandle ) {

	// ループ処理
	while( 1 ) {

		$rows = ReadRow( $DirHandle, $cols );
		// 配列が空の場合はデータが全く存在しないので、
		// 何もしないですぐ終わる
		if ( count( $rows ) == 0 ) {
			break;
		}

		$upload_list .= "<tr>\n";
		for( $i = 0; $i < $cols; $i++ ) {
			$upload_list .= "<td>";
			$upload_list .= "<a href=\"$upload_dir/{$rows[$i]}\"";
			$upload_list .= " target=\"_blank\">{$rows[$i]}</a>";
			$upload_list .= "</td>\n";
		}
		$upload_list .= "</tr>\n";

	}
}


// *********************************************************
// 一行のデータを読んで、配列にデータをセットする
// ( 戻り値の配列数が 0 の場合、データは存在しない )
// $cols で、1行の列数を決定する
// *********************************************************
function ReadRow( $handle, $cols ) {

	$ret = array();

	while( 1 ) {
		$Target = readdir( $handle );
		// データが完全な終了
		if ( $Target === false ) {
			break;
		}
		// 対象外は読み飛ばし
		if ( $Target == '.' || $Target == '..' ) {
			continue;
		}

		$ret[] = $Target;

		// 指定回数配列がセットされたらループを終了する
		if ( count( $ret ) == $cols ) {
			break;
		}
	}

	return $ret;
}

// *********************************************************
// 画面
// *********************************************************
require_once( 'view.php' );

?>

posted by at 2009-07-01 21:02 | スケルトン | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します