ファイル一覧ページを作成して、wgetでファイルを取得する

システムが絡む制作をしていると、URLが同じでも条件によって表示を変更する動的なページの制作をすることがあります。動的なサイトだとよくありますね。

ECでも例えば売り切れの時は「SOLD OUT」を表示して、カートボタンを非表示にする。そのかわり、「商品リクエスト」ボタンを表示するとか「在庫が入ったら通知する」みたいなボタンを出したりします。これは、その時の状態(在庫)によって、表示を変えています。

ページ制作側は、一つのページに要素を全部入れちゃうこともあれば、別ページとして制作する場合もあります。

今回は非常にニッチなケースですが、これでルーチン化できたのでいいかなというものをご紹介します。

2016-09-06-blog-ogp.jpg

要件

  1. 同じページだけど、条件によって表示が異なる
  2. 表示が違うものは別ページとして制作している
  3. 制作したページをファイルとしてゲットしたい(wget)

そもそもなんでそのまま渡さないの?

制作したものをそのまま渡せばいいのですが、今回は以下の要件があり、そのまま渡せませんでした。

  • PHPやSSIなどのインクルードファイルは、インクルードファイルではなく、ページで読み込んだ状態のページデータがほしい

ということで、wgetしなければならないとなりました(アドバイスくれた方、感謝です)。

実現方法

  1. PHPでファイル一覧を取得し、リンクをはった表示をするスクリプトを用意する
  2. wgetコマンドを叩く

1. PHPでファイル一覧を取得し、リンクをはった表示をするスクリプトを用意する

参考サイトにスクリプトがあるので、今回はこちらを利用させていただきます。本当に感謝です。

このソースコードを、filelist.phpなどの名前で保存して、一覧を取得したいディレクトリに置きます。

参考サイト ディレクトリ内ファイル一覧表示

<?php
$DIR = "./"; //一覧表示するディレクトリ
function printfile($dir) {
$opendir = opendir($dir);
while($file = readdir($opendir)) {
if($file === "." or $file === "..") {
continue;
}
$file = $dir . "/" . $file;
if(is_dir($file)) {
printfile($file);
continue;
}
if(preg_match("/\.s?html$/", $file) and filesize($file) > 100) {
$filename = preg_replace("/^[\.\/]+/", "", $file);
echo "<a href=\"$file\">$filename</a><br>\n";
}
}
closedir($opendir);
}
?>

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>FileList</title>
</head>
<body>

<?php
printfile($DIR); //ファイル一覧表示
?>

</body>
</html>

filelist.php にブラウザでアクセスして、ファイル一覧とリンクが付いているかを確認します。なお、コードの見ると、HTMLかSHTMLのみ一覧化するように拡張子の判別処理が入っています。他の拡張子の一覧を取得するならば、そのあたりをカスタマイズするとよさそうです。

2. wgetコマンドを叩く

wget コマンドは、WindowsにもMacにも標準で入っていないっぽいです。自分はWindows使いなので、Cygwinを入れてコマンドをたたいています。Windowsな方は、ぜひCygwin を入れましょう。

こんな感じのコマンドで実行します。

$ wget --http-user=Basic認証ユーザー名 --http-passwd=Basic認証パスワード -r -l8 https://ホスト名/filelist.php

開発中のデータなので、Basic認証がかかっていました。認証用のユーザーIDとパスワードをオプションで設定します。再帰的に取得するならば、-r は欠かせません。-l で階層の深さを指定しましょう。

今までまともにwgetコマンドを触っていませんでしたが、これ便利ですね。サーバ移行とかするときに、静的なページだけであれば、これだけで以降用のデータが作れちゃいそうです。

参考URL 【 wget 】 ファイルをダウンロードする