• ベストアンサー

ファイルサイズ 取得 一致 PHP

formに入力されたファイルサイズが一致しているか確認したいです。 よろしくお願いします。 php $filesize = ''; $filesize = filesize($_FILES['upfile']['tmp_name'] ); if ($filesize !== ($_POST["size_name"])){ echo "ファイルサイズの値が一致しません"; exit; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

filesize()は 実際のファイルサイズをバイト数で返します。10KByteのファイルなら、10240です。 一方、入力フォームでファイルサイズを自己申告させるとなると、 利用者がどうやってサイズを調べて入力しているのかが問題になります。 エクスプローラー上のファイル一覧で見えているサイズは、KBやMBの単位で丸められていますし、 クラスタギャップも含めたディスク上の専有サイズを見せているので、 実サイズとは 値が異なっています。 なので、ファイルのプロパティーでみて、ディスク上のサイズでなく、実際のサイズのほうを 1Byte単位まで正確に自己申告してもらわないと合致しません。 もしくは、php側で 自己申告のサイズにKMGTPの単位があればそれを計算したうえで ある程度の誤差は許すかです。 ただし、クラスタギャップは、ローカル側のファイルシステムやパーティションサイズによって変わるので、サーバー側では予測計算できませんし、 そもそも、そんな大きなサイズ差も許すのなら、わざわざサイズを自己申告させて チェックをすること自体に意味があるのかが疑問になりますが。

その他の回答 (2)

回答No.2

if ($filesize !== $size_name){ echo "ファイルサイズの値が一致しません".$filesize." VS ".$size_name; exit; } とかすればどう異なっているか分かるでしょうけど。 自己申告のファイルサイズとアップロードされたファイルサイズを比較して何の意味があるのでしょうか???

losloson
質問者

補足

そうしたいからです

回答No.1

$_POST["size_name"]とは何を想定しているのでしょうか? 比較する理由は何でしょうか?

losloson
質問者

補足

説明不足ですいませんformに数値を入力するtextボックスを配置しており そちらの値を取得しているつもりです。 入力した数値とファイルサイズが一致して後で掲示板のように一覧を作りたいです。その際に間違っていない情報が欲しく記述しました。 先ほど数値として変換をしないといけないのでは?と思い $size_name = Intval($_POST["size_name"]); $filesize = filesize($_FILES['upfile']['tmp_name'] ); if ($filesize !== $size_name){ echo "ファイルサイズの値が一致しません"; exit; } このような形に変更してみましたが、うまくいかないみたいです。

関連するQ&A