忍者ブログ

[PR] []

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

フォルダ内の画像一覧を自動で(ex.1 [WEB関連]

PHP辞典読んでいたら直せそうな部分があると気付いたので修正。
<?php

$imgdir = array(
"./2012/",
"./2011/",
"./2010/",
"./2009/"
);

foreach($imgdir as $dir){
$res_dir = opendir( $dir );
while ($entry = readdir($res_dir)){
if(is_file($dir.$entry)){
if (
(strstr($entry,".jpg")) &&
!(strstr($entry,"thumb"))
){
$img[]=$dir.$entry;
}
}
}
closedir( $res_dir );
}
rsort($img);
?>

ファイル名に.jpgが含まれ、かつ、thumbが含まれないファイルならば、
読みに行ったディレクトリ名($dir)/ファイル名($entry)の画像パスを配列にする。

!という論理演算子があることを失念していたせいで、だらだらと条件を連ねていたのでした。
なんだかものすごくわかりやすくなった…!

あと、rsort($img);は外に出しました。
PR

フォルダ内の画像一覧を自動で(4 [WEB関連]

さて、ページ分けですがPEAR::Pagerを使っちゃいます。
こういう便利なものがあるって知る前は、
.php?=page2 とかで飛べるようにして、for文で表示する範囲決めて…って思ってて、できる気がしない…でした。
「php ページ分け」ぐぐったらPEAR::Pagerを知りまして、調べてみるものだなあと。

で、このようになりました。
require_once 'Pager.php';
$params = array(
'mode' => 'Jumping',
'perPage' => 10,
'delta' => 5,
'itemData' => $data
);
$pager = & Pager::factory($params);
$data = $pager->getPageData();
$links = $pager->getLinks();

foreach ($data as $tag){
print $tag;
}

echo $links['first'];
echo $links['back'];
echo $links['pages'];
echo $links['next'];
echo $links['last'];


require_once 'Pager.php';でなんでいいのかわからん\(^o^)/
このファイルと同じ階層にはPager.phpなんてないんですけど
おまじない的なものなんだろか。
require_once("Pager/Pager.php");という書き方を推奨している方やマニュアルもあるようですが
ロリポではPager/つけたら動きませんでs…いや、動きました。
どっちでもいいみたい。

これを作るまで、処理を繰り返す場合にはfor()しか使ってこなかったので、
最初はなんだか苦労しました。
($i=0,$i<count($data),$i++){print $data[$i];}でいいかと思ったらぜんぜんだめで、
現在のページ数・1ページに表示するデータ数なんかを使って計算して
($i=$a,$i<$b,$i++){print $data[$i];} って。
今回ここと別の部分で初めてforeach()使うことになって、じゃあこっちもこれにしたらどう?って試したらあっさり成功して、なんだよー!かんたんじゃん!

まあ、以前はfor()の使い方を理解するのがやっとだったし、
ようやく別の繰り返し処理を理解できるようになったと思っておきます。

どうでもいいけど私はよく、$i=0とか[$i]の$を忘れて、駄目じゃんうごかねーwってなってます。
気づいてがっくりする。orz

ページのナビ部分は
http://pear.php.net/manual/ja/package.html.pager.intro.php
をいろいろ試しながら手探りです。
変数に収まるものをいちいちprintして確認しながら、使えるものを探しました。

上のコードの大部分:
http://pear.php.net/manual/ja/package.html.pager.intro.php
オプションについてはここが見やすかった:
http://hatomugi.sakura.ne.jp/forum/topic.php?id=42

あとこれも:
http://pear.php.net/manual/ja/package.html.pager.factory.php

ナビゲーションはこの辺もよさそう。:
http://cl.pocari.org/2007-12-02-1.html

初心者でもどうにかできて、先人の皆様に感謝です。

ページ分けできたので、あとは、print $tag;やecho $links~;なんかの前後に必要なhtmlタグをつけて、完成。

フォルダ内の画像一覧を自動で(3 [WEB関連]

複数のディレクトリにある画像をまとめて表示するのはできましたが
一枚一枚の画像が大きいので、小さく表示したいわけです。
本当はサムネイル表示・元画像にリンクしたいですが、現時点ではそんな知識はないので、
とりあえずタグで無理やり縮小します。
$thumb_size = 200;//縮小して表示したいサイズ。長辺のみの指定

foreach($imgarray as $imgpath){
list($width,$height,$type,$attr) = getimagesize($imgpath);

//表示する画像サイズの計算
if ((($width>$thumb_size) || ($height>$thumb_size)) && ($width>$height)){
$width_t=$thumb_size;
$height_t=round($height*$thumb_size/$width);

}elseif ((($width>$thumb_size) || ($height>$thumb_size)) && ($height>$width)){
$height_t=$thumb_size;
$width_t=round($width*$thumb_size/$height);

}elseif ((($width>$thumb_size) || ($height>$thumb_size)) && ($height=$width)){
$height_t=$thumb_size;
$width_t=$thumb_size;
}else{
$width_t=$width;$height_t=$height;
}

//元の画像サイズに応じてライトボックス使用不使用を切り分け、配列になおす
if (($width>1401) || ($height>951)) {
$data[]="<a href="$imgpath"><img src="$imgpath" width="$width_t" height="$height_t" class="img_wh"></a>
";
}else{
$data[]="<a href="$imgpath" rel="lightbox[img]"><img src="$imgpath" width="$width_t" height="$height_t"></a>
";
}
}

画像の表示にはライトボックスを使いますが、ウィンドウからはみ出すサイズの画像には使いません。
ウィンドウサイズは人それぞれなので難しいところですが、難しいところなので仕方ない。
自分基準でいきます。
うちのディスプレイはWSXGA+(22型ワイド、1680*1050)なので、
横1041pxか縦951pxより大きい画像では、rel="lightbox[img]"をつけないようにします。
<a><img></a>にして配列になおすのは、この後ページ分けするため。
画像の枚数が多くてページが重くなるので、分けないと実用的じゃないのです。

ページ分けるのはまた次の記事で

ディスプレイは今は23型が売れているようですが、狭い画面の人もいるわけで
javascript使って、ライトボックスを外す基準を変えたページへ飛ぶリンクを出すようにします。

「ライトボックスを外す基準を変えたページ」は、作ったphpファイルを丸ごとコピーして、
//元の画像サイズに応じてライトボックス使用不使用を切り分け、配列になおす
if (($width>1401) || ($height>951)) {
ここの、「1401」と「951」を適当に変えて、別名で保存したファイルになります

フォルダ内の画像一覧を自動で(2 [WEB関連]

前回記事で一つのディレクトリの画像を読むことには成功しましたが
実は年ごとにディレクトリが分かれているので、複数のディレクトリから読み出さねばなりません。
同じ処理を繰り返すので、ここはやはり読み込みに行くディレクトリを配列にしてしまう方法で行ってみます。

それで、ところで、私は先日、nicky!のちょこっと修正記事をあげてるのでここで明確にしますと
nicky!で作った記事に含まれる画像(写真・イラスト)を一定のルールでまとめたいわけです。

nicky!は、西暦4桁の名前のディレクトリを作って、その中に各ファイルを仕舞っています。
複数の画像を使うときも西暦直下に保存しているので、読み出すディレクトリはログのある年数分。
2009~2012です。

ついでに、特定の文字を含むファイルは除外するのもまとめることができました。
(line16からのあたり)
西暦直下にはログファイルもあるので、除外するために(strstr($entry,"nky"))としています。

あと、forよりforeachのがよさそうなので、変更。

このようにしました。

<?php

$imgdir = array(
"./2012/",
"./2011/",
"./2010/",
"./2009/"
);

foreach($imgdir as $value){

$dir = $value;
$res_dir = opendir( $dir );
while ($entry = readdir($res_dir)){
if(is_file($dir.$entry)){
if (
(strstr($entry,"html")) ||
(strstr($entry,"thumb")) ||
(strstr($entry,"nky"))
){

}else{
$imgarray[]=$dir.$entry;
rsort($imgarray);
}
}
}
closedir( $res_dir );
}

?>


この後に付け加える処理の都合で、直接imgタグを作らずにまとめたい画像パスを収めた配列$imgarrayを作ってます
imgタグにするなら、}else{の後にprint等で。

記事作ってから気づいたけど、$dir = $value; は余分ですな
作ってる最中は気づかないものです(´~`)
foreach($imgdir as $value) → foreach($imgdir as $dir) として、
$dir = $value;はなくしていいでしょう

参考:いろんな解説サイト:PHP辞典第2版

フォルダ内の画像一覧を自動で(1 [WEB関連]

ブログの記事が画像(写真やイラスト)だけとは限らないので、
画像だけ見たい人のためにあったら便利そうだな。
という自己満足を満たすために作り始めたもの。
<?php
$dir = "./2012/";
$res_dir = opendir( $dir );
while ($entry = readdir($res_dir)){
if(is_file($dir.$entry)){
$imgarray[] = $dir.$entry;
rsort($imgarray);
}
}
closedir( $res_dir );

line2:画像がアップされるディレクトリを指定
line3:opendir()でディレクトリを開く
line4:readdir()で開いたディレクトリを読み込む
line5:読み込んだ中身がファイルであるならば
line6:画像パスを、$imgarrayという配列に収める。

ということをしています。

line7:新しいものを先にしたいので、rsort()で降順に並べ替える。
line10:閉じる。
opendir($dir)に対応するものならclosedir($dir)じゃないの?と思ったけど違うようです。
おまじないだと思っておく…

これで、$dirで指定したディレクトリ内のファイルが配列になりました。

$dir内にimg1.png、img2.png、img3.pngがあるなら、
$imgarray = array("./2012/img1.png","./2012/img2.png","./2012/img3.png"); ってなってるってことでいいと思います。
自分の場合、数字が多い方が新しいので、rsort($imgarray)でひっくり返して、
$imgarray = array("./2012/img3.png","./2012/img2.png","./2012/img1.png"); にしてます
降順にするタイミングが合ってるのかどうかわからないけど、これで希望通りになってるのでいいとします。


さらに、実は、このディレクトリの中には、覗き見防止のindex.htmlが自動で生成されていたり、
サムネイルもつくられたりしていて、それは取り除きたいので、このように。
ちなみにサムネイルは、ファイル名にthumbという文字列が入るようになってます。
$num = count($imgarray);
for ($i=0;$i<$num; $i++){
if (
(strstr($imgarray[$i],"html")) ||
(strstr($imgarray[$i],"thumb"))
){

}else{
print "<img src="$imgarray[$i]">";
}
}
?>

line1:配列のデータ数を数える
line2:よくあるfor文です。
line3~6:配列の値(ファイルパス)にhtmlかthumbが入ってる場合、
line7:なにもしない。
何もしない場合空白でいいのか、ちょっと不安だけど、希望通りになってるので以下略。

line8:ファイルパスにhtmlもthumbも入ってないものが、まとめたい画像ファイルパスなので、
line9:printでタグ出力。

ディレクトリ内のファイルを読み込む段階で選別できそうな気がするけど、
なんだかややこしくなりそうだったので、順番にやっていくことにしました。

これで、$dir内の、サムネイルを除く画像一覧を表示するようにできました。

最新記事

オンマウスでタイトル~

ブログ内検索

オススメサーバなど。

はやくて、やすくて、カンタン。
全てが揃った究極のレンタルサーバ、☆さくらのレンタルサーバ
 
ロリポップのドメインは85種類!
きっとお好みのドメインが見つかるはず!
ロリポップはドメイン持ってる人が非常に使いやすいかと。
aaa.jpを取得して、web.aaa.jp、blog.aaa.jp、mail.aaa.jpみたいに、使い分けが出来て便利です。
メアドもたくさん作れて、転送設定なんかもできて良い。
実績から見ても信用できるし、イチオシです。
 
で、ドメイン取るならココ。
時々新規超安キャンペーンやってます。
ムームードメイン

 
お手軽価格で使いがい、あります。
月額250円~で、容量5GB、独自ドメイン、CGI使用、商用利用可能!
FC2レンタルサーバーLite
 
A8.net

プロフィール

HN:hrn
一言:ブログタイトル迷走中。
php初心者/htmlとcssならちょっと得意/javascriptは苦手。必要なことだけ調べるのでいつも遠回り、余計なことばかりしている。
琉金とポリプ飼ってます
透明水彩ってイイヨネ。
 
アクア用品なんかのレビューでは、アフィリエイトリンクつけてるものがあります。
記事が参考になったら、ここから買ってくれると嬉しい。