WordPressでリンク先のzipのファイルサイズを取得して表示する:メモ

悩み
悩み

妙なところで躓いたのでメモ。

調べ切れておらず、理解し切れていない部分もありますので、とりあえず現時点でのメモとして。

マニュアルを元にしたような情報はいろいろあるのですが、語句の意味が理解できないとそれすら迷う要因となり、無駄に時間をくいましたので…。

前提と実現したいこと

前提は以下の通り。

  • WordPressをインストールしたフォルダ(/wp/)にダウンロードファイルを入れる専用フォルダを(/download/)を作成
  • downloadフォルダにはzipを入れる
  • zipファイルの名称は各投稿画面にてカスタムフィールドで指定する
  • カスタムフールドの「名前」は「zipname」

続いて実現したいことは以下の通り。

  • 該当のzipファイルのファイルサイズを表示

実際にはファイルサイズを表示するだけなので、前提はあまり気にしなくともよいかと思います。

つまりはほとんどWordPressに限定する意味が無いのですが、ファイル名の指定部分だけカスタムフィールドを利用しているので、その一点で「WordPress」をタイトルにつけています。

コード

作ったのは以下のコードです。
なお、functions.phpに関数を作り、single.phpで呼び出す感じにしています。

ので、まずはfunctions.phpから。


function zip_file_size($filename){
 $path = $_SERVER['DOCUMENT_ROOT'] . '/wp/download/' . $filename . '.zip';
 $filesize = filesize($path);
 $s = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
 $e = floor(log($filesize)/log(1024));
 echo 'File Size: ' . sprintf('%.1f '.$s[$e], ($filesize/pow(1024, floor($e))));
}

上記は「ファイルサイズを取得し、単位を出力するスクリプト」の記事を参考にさせていただきました。

続いて呼び出す側のsigle.php。


zip_file_size(post_custom('zipname'));

これだけです。

つまずいた点

終わってみれば簡単なのですが、できるまでは以下の事柄でつまずきました。

filesize関数

phpでファイルサイズの取得にはfilesize関数を用いますが、php.netさんのfilesizeのページをから該当箇所を引用します。

int filesize ( string $filename )

なお、調べた際のurlを紛失してまったのですが、「Content-Length」はファイルサイズと同一ではないと見ました。
この辺まだ理解できていません…。

size_format関数

WordPressには、size_format関数という便利なものがあります。

どういうものかという部分を、コーデックスの「関数リファレンス/size format」から引用します。
※原文参照を推奨されていますので「Function Reference/size format」もご覧下さい。

バイト数を人間に読みやすい単位にフォーマットする。

ファイルサイズに基づいてKBやMBなどを自動で丸めて表示してくれ便利ですが、丸めすぎてる感がありました。例えば、1.9MBが2MBで表示されるなどです。

そこを制御するためかオプションが存在します。

$decimals
(int) (オプション) 小数点以下の桁数の精度。非推奨。

ところが、引用部分にあるように「非推奨」。ちょっと悩みましたが、非推奨は使いたくないのでsize_format関数は諦めました。

結び

jpgなどの画像やpdfでもなく、zipが対象のためzip関数も調べたりしましたが、filesize関数でよかったようで。

パスの指定や$filenameに渡す値などでも勘違いからつまづきましたので、無駄に時間がかりました…。

1人がこの記事を評価

役に立ったよという方は上の「記事を評価する」ボタンをクリックしてもらえると嬉しいです。

連投防止のためにCookie使用。SNSへの投稿など他サービスとの連動は一切ありません。

コメント欄