実は画像をアップロードして、小さいデータならうまく表示しますが、4Mや5M以上のデータですと、自分が書いたエラーチェックが出てきます。確認のためecho $_FILES['upfile']['size']で画像のサイズをエコしてみました。
小さい画像はまだバイト数が普通にでてくるですが、4Mや5Mの画像ですと、0と出てきました。それとともに自分が書いたエラーチェックのUPLOAD_ERR_FORM_SIZE:が通れなくなってエラー文が出ます。画像の容量が0と表示しているのにサイズがオーバーするのはどういうことですか?
何故小さいデータならうまくいって、大きいデータだとこうなるでしょうか?
php.iniの方も5Mに変えています。
理解ができなくて何回も質問して申し訳ないですが、よろしくお願いいたします。
html
1<!DOCTYPE html> 2<html> 3<head> 4 5 <meta charset="utf-8"> 6 <title>php</title> 7</head> 8<body> 9<form action="resize.php" method="post" name="form" enctype="multipart/form-data"> 10 11 12<input type="hidden" name="MAX_FILE_SIZE" value="524288"> 13<p> 14<input type="file" name="upfile" size="30" id="upload"> 15</p> 16 17<p> 18<input type="submit" value="送信する"> 19</p> 20</form> 21</body> 22 </html>
php
1<?php 2ini_set('display_errors', '1'); 3error_reporting(E_ALL); 4 5if (!isset($_FILES['upfile'])) { 6 echo '<FONT COLOR="RED">恐らくアップロードページのHTMLに記述ミス有り!</FONT>'; 7 return; 8} 9 10$file = $_FILES['upfile']; 11$tmp_name = $file['tmp_name']; // 一時ファイルのパス 12 13echo $_FILES['upfile']['size']; 14 15 16switch ($file['error']) { 17 case UPLOAD_ERR_OK: 18 break; 19 case UPLOAD_ERR_INI_SIZE: 20 echo '<FONT COLOR="RED">アップロードされたファイルは、php.ini の upload_max_filesize ディレクティブの値を超えています。</FONT>'; 21 return; 22 case UPLOAD_ERR_FORM_SIZE: 23 echo '<FONT COLOR="RED">アップロードされたファイルは、HTML フォームで指定された MAX_FILE_SIZE を超えています。</FONT>'; 24 return; 25 case UPLOAD_ERR_PARTIAL: 26 echo '<FONT COLOR="RED">もう一度実行してみてください!</FONT>'; 27 return; 28 case UPLOAD_ERR_NO_FILE: 29 echo '<FONT COLOR="RED">ファイルを選択して下さい!</FONT>'; 30 return; 31 case UPLOAD_ERR_NO_TMP_DIR: 32 case UPLOAD_ERR_CANT_WRITE: 33 case UPLOAD_ERR_EXTENSION: 34 echo '<FONT COLOR="RED">サーバ内部で発生したエラー!</FONT>'; 35 return; 36 default: 37 echo '<FONT COLOR="RED">何が起きたか分からない!</FONT>'; 38 return; 39} 40 41$finfo = new finfo(FILEINFO_MIME_TYPE); 42if (!preg_match('/\.jpg$|\.jpeg$/i', $file['name']) 43 || $finfo->file($tmp_name) !== 'image/jpeg') { 44 echo '<FONT COLOR="RED">JPEGファイルを選択してください!</FONT>'; 45 return; 46} 47 48$result = true; 49$get = getimagesize($tmp_name); 50 51if ($get["0"]>1000) { 52 $result = false; 53 echo '<FONT COLOR="RED">横幅を小さくしてください!</FONT>'; 54} 55if ($get["1"]>1000) { 56 $result = false; 57 echo '<FONT COLOR="RED">縦幅を小さくしてください!</FONT>'; 58} 59 60if ($result) { 61 echo '送信完了'; 62 63} 64 65?>
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。