phpな休日 BBS sitemap
1. フォルダ [images] 内のJPEGファイルを全て表示する

画像整理はめんどうなもので、横着者の整理術として、FTPで画像を放り込むだけでフォルダ内の全てのJPEGファイルを表示するスクリプトを書いてみます。

<?php
$imagedir = opendir("./images");
while (false !== ($file = readdir($imagedir))) {
//if (ereg(".jpg$", $file)) {php6でeregが削除になるというので2009年10月7日に修正
if (preg_match ("|.jpg$|", $file)) {
print "<img src='./images/" . $file . "' style='float:left;margin-right:4px;margin-bottom:4px;'>¥n";
}
}
closedir($imagedir);
?>

画像と画像の間を4ピクセル空けながら、imagesフォルダ内の全JPEGファイルを表示します。

実行

画像とファイル名を照合するために、画像の下にファイル名表示してみます。

<?php
$imagedir = opendir("./images");
while (false !== ($file = readdir($imagedir))) {
//if (ereg(".jpg$", $file)) {php6でeregが削除になるというので2009年10月7日に修正
if (preg_match ("|.jpg$|", $file)) {
print "<div style='float:left;margin-right:4px;margin-bottom:4px;'>¥n";
print "<table border='0'>¥n";
print "<tr>¥n";
print "<td><img src='./images/" . $file . "'></td>¥n";
print "</tr>¥n";
print "<tr>¥n";
print "<td align='center'>" . $file . "</td>¥n";
print "</tr>¥n";
print "</table>¥n";
print "</div>¥n";
}
}
closedir($imagedir);
?>

readdir の書式に関しては マニュアル の丸写しですが。

実行
2. ファイル名順で表示する

ファイル名でソートしてからファイル名順に表示してみます。

<?php
$imagedir = opendir("./images");
while (false !== ($file[] = readdir($imagedir)));
closedir($imagedir);
sort($file);
reset($file);
while (false !== ($jpg = each($file))){
//if (ereg(".jpg$", $jpg[1])) {php6でeregが削除になるというので2009年10月7日に修正
if (preg_match ("|.jpg$|", $jpg[1])) {
print "<div style='float:left;margin-right:4px;margin-bottom:8px;'>¥n";
print "<table cellspacing='0' cellpadding='0' border='0'>¥n";
print "<tr>¥n";
print "<td><img src='./images/" . $jpg[1] . "'></td>¥n";
print "</tr>¥n";
print "<tr>¥n";
print "<td align='center'>" . $jpg[1] . "</td>¥n";
print "</tr>¥n";
print "</table>¥n";
print "</div>¥n";
}
}
?>

sort関数を使っています。

実行

sort関数をnatsort関数に変更してみます。

<?php
$imagedir = opendir("./images");
while (false !== ($file[] = readdir($imagedir)));
closedir($imagedir);
natsort($file);
reset($file);
while (false !== ($jpg = each($file))){
//if (ereg(".jpg$", $jpg[1])) {php6でeregが削除になるというので2009年10月7日に修正
if (preg_match ("|.jpg$|", $jpg[1])) {
print "<div style='float:left;margin-right:4px;margin-bottom:8px;'>¥n";
print "<table cellspacing='0' cellpadding='0' border='0'>¥n";
print "<tr>¥n";
print "<td><img src='./images/" . $jpg[1] . "'></td>¥n";
print "</tr>¥n";
print "<tr>¥n";
print "<td align='center'>" . $jpg[1] . "</td>¥n";
print "</tr>¥n";
print "</table>¥n";
print "</div>¥n";
}
}
?>

natsort関数は自然順ソートになります。

実行

逆順で表示したい場合は、ソートした配列を逆順にしてから表示してみましょう。

<?php
$imagedir = opendir("./images");
while (false !== ($file[] = readdir($imagedir)));
closedir($imagedir);
natsort($file);
reset($file);
$reverse = array_reverse($file, true);
while (false !== ($jpg = each($reverse))){
//if (ereg(".jpg$", $jpg[1])) {php6でeregが削除になるというので2009年10月7日に修正
if (preg_match ("|.jpg$|", $jpg[1])) {
print "<div style='float:left;margin-right:4px;margin-bottom:8px;'>¥n";
print "<table cellspacing='0' cellpadding='0' border='0'>¥n";
print "<tr>¥n";
print "<td><img src='./images/" . $jpg[1] . "'></td>¥n";
print "</tr>¥n";
print "<tr>¥n";
print "<td align='center'>" . $jpg[1] . "</td>¥n";
print "</tr>¥n";
print "</table>¥n";
print "</div>¥n";
}
}
?>

array_reverse関数で配列を逆順にしています。

実行
3. 複数ページ表示

写真の枚数が増えてくると(あるいは画像のサイズが大きいと)1ページに全てを表示するのはきびしいので、枚数を指定して複数ページに分割します。

<?php
if (isset($_GET["imageno"])) { //ページ指定がある場合
$imageno = $_GET["imageno"]; //変数セット
$image = $imageno; //そのページが始まる画像NO
}
$imagedir = opendir("./images");
while (false !== ($file[] = readdir($imagedir)));
closedir($imagedir);
natsort($file);
reset($file);
$reverse = array_reverse($file, true);
if (!isset($imageno)) {
$imageno = 0; //最初のページは 0(ページ内で++していく)
$image = 0; //そのページが始まる画像NO
}
$pageline = 4; //1ページに表示させる枚数
$imagecount = 0; //ページ内で増やしていく
while (false !== ($jpg = each($reverse))){
//if (ereg(".jpg$", $jpg[1])) {php6でeregが削除になるというので2009年10月7日に修正
if (preg_match ("|.jpg$|", $jpg[1])) {
$imagecount++;
if ($imageno == ($image+$pageline)) { //このページの分が表示済みなら
break; //ループを抜ける
}
if ($imagecount > $image) { //このページの分まで来たら表示する
print "<div style='float:left;margin-right:4px;margin-bottom:8px;'>¥n";
print "<table cellspacing='0' cellpadding='0' border='0'>¥n";
print "<tr>¥n";
print "<td><img src='./images/" . $jpg[1] . "'></td>¥n";
print "</tr>¥n";
print "<tr>¥n";
print "<td align='center'>" . $jpg[1] . "</td>¥n";
print "</tr>¥n";
print "</table>¥n";
print "</div>¥n";
$imageno++; //1枚表示したら++
}
}
}
?>
</div>
<div style="margin-top:12px;clear:both;">
<p class="txt">
<?php
$page = $imageno+$pageline; //以下 back と next 表示
if ($imageno > $pageline) {
$backno = $imageno-($pageline*2);
print "<a href='index.php?imageno=" . $backno . "'>back</a> ";
}
if ($imageno < $imagecount) {
print "<a href='index.php?imageno=" . $imageno . "'>next</a>";
}
?>

ここでは1ページに4枚表示にしてみました。

実行


Fatal error: Uncaught Error: Undefined constant "Y.n.j" in /home/users/2/secret.jp-final/web/phpholiday/29/index.cgi:235 Stack trace: #0 /home/users/2/secret.jp-final/web/phpholiday/index.php(334): include() #1 {main} thrown in /home/users/2/secret.jp-final/web/phpholiday/29/index.cgi on line 235