前提・実現したいこと
CentOS7.3, PHP7.1 にて、ファイルアップロードを
実現したいと思っています。
手法は<input type="file"> タグによる、普通の手法です。
アップロードファイルはzipファイルで、最大256MBほどのサイズを
想定しています。
発生している問題・エラーメッセージ
IE11にて、「参照」ボタンでファイルを選択し、
「アップロード」ボタンをクリックすると、
選択しているはずの表示されているファイル名が消え、
即座に処理が終了します。(何も行われていない状態です)
ただ、常にというわけではなく、時々うまくアップロードされる場合も
あります。
正常にアップロードされるときは、しばらくアクセス状態になったのち、
「アップロードが正常に行われました。」が表示されます。
CromeやFireFoxだと問題なくアップロードできます。
IEの他のバージョンやEdgeは試していません。
該当のソースコード
PHP
1<!DOCTYPE html> 2<html> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <meta content="86400" http-equiv="Expires" > 6</head> 7<body> 8 <div style="text-align:center"> 9 <form method="post" enctype="multipart/form-data" action=""> 10 <input type="hidden" name="MAX_FILE_SIZE" value="256000000" /> 11 <input type="file" name="filename" size="40" accept="application/zip" /><br/><br/> 12 <input type="submit" name="upload" value="アップロード" style="width:125px" /> 13 </form> 14<?php 15 //アップロードボタンを押下時 16 if(isset($_POST['upload'])) 17 { 18 //ルートディレクトリの設定 19 $root_dir = $_SERVER['DOCUMENT_ROOT']. '/'; 20 21 //アップロード処理を行う一時フォルダ名の設定 22 $temp_dir = $root_dir. 'temp/'; 23 24 //フォルダがなければ作成する 25 if(!file_exists($temp_dir)){ 26 mkdir($temp_dir, 0777); 27 } 28 29 try { 30 //アップロードファイルのサイズをチェック(上限:256,000,000 byte) 31 if ($_FILES['filename']['size'] > 256000000 ) { 32 throw new Exception('アップロードファイルの容量が大きすぎます。'); 33 } 34 35 $zipExtention = strrchr($_FILES['filename']['name'], '.'); 36 37 //拡張子がZIP以外の場合はアップロード不可 38 if(strcasecmp($zipExtention, '.zip') != 0){ 39 throw new Exception('ZIPファイルを選択してください。'); 40 } 41 42 //アップロード先のファイル名を指定 43 $uploadfile = $temp_dir. $_FILES['filename']['name']; 44 //一時ファイルのアップロード可否をチェック 45 if (!move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile)) { 46 throw new Exception('アップロード時にエラーが発生しました。'); 47 } 48 49 } catch (Exception $e) { 50 deleteFile($temp_dir); 51 print '<FONT COLOR="RED">アップロードを中止します。<br><br></FONT>'; 52 print '<FONT COLOR="RED">※ '. $e->getMessage(). '</FONT>'; 53 exit(); 54 } 55 56 print '<p>アップロードが正常に行われました。</p>'; 57 }} 58?> 59 </div> 60 </body> 61</html>
試したこと
最下行3行を上部に移動しても同じでした。
zipファイルサイズが大きい時に発生するようです。(243MB)
100MBだとうまくいきます。
うまくいく場合もありますので、アップロードに関する
PHP.iniの設定は問題ないと思います。
ちなみに、POST送信時に$_POSTの内容をprint_r()等で表示しても、
空の状態でした。
補足情報(FW/ツールのバージョンなど)
[サーバー]
CentOS 7.3
PHP 7.1.17
[php.ini設定抜粋]
file_uploads = On
memory_limit = 1024M
post_max_size = 515M
upload_max_filesize = 512M
[クライアント]
Windows 7 Professional SP1
InternetExplorer 11.0.9600.19035
回答2件
あなたの回答
tips
プレビュー