質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

8806閲覧

PHPでのファイルアップロードがIEだけでできない

yamamotomohiro

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/06/20 05:41

編集2018/06/20 06:35

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/06/20 05:58

インデントはきちんとされた方が良いです。ifのカッコの位置がおかしく、読みづらくなっています。「選択しているはずの表示されているファイル名が消え」というのは自身に対してPOST送信しているのだから自然な現象です。ファイルサイズについては、サーバー側の処理なのでブラウザは関係ないように思いますが・・。
m.ts10806

2018/06/20 06:07

一応、エラーがでるファイルサイズと出ないサイズ、upload_max_filesize、post_max_size、memory_limitの設定を質問本文にご提示ください。
m.ts10806

2018/06/20 06:39 編集

ファイルはコードにあるように$_FILESですが、$_POSTで空ということはそもそも送信できていないということですよね。post_max_size も不十分ではないし、ブラウザによって違うというところがやはり理解に苦しみます。
yamamotomohiro

2018/06/20 06:43

いろいろありがとうございます。そうなのです。そもそも送信できていないと思われます。post_max_sizeは515MBなのでファイルサイズの2倍以上は確保してあるのですが...
yamamotomohiro

2018/06/20 06:52

このページには調査中にたどり着きました。ありがとうございます。関連性があるかもしれませんので、再度調査してみます。
guest

回答2

0

自己解決

結局、原因は不明ですが、
https://teratail.com/questions/66538
で書かれているような対処、
・「信頼済みサイト」に登録
することで、現象は起きなくなりました。

しばらくこれで様子を見て、まだ発生するようなら再調査という形になると思います。

投稿2018/06/21 00:32

yamamotomohiro

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず

PHP

1<form method="post" enctype="multipart/form-data"> 2<input type="hidden" name="MAX_FILE_SIZE" value="256000000" /> 3<input type="file" name="filename" size="40" accept="application/zip" /><br/><br/> 4<input type="submit" name="upload" value="アップロード" style="width:125px" />     5</form> 6<?php 7print_r($_FILES); 8?>

これでデータ送信が行われているのか、エラーなのか、成功しているのかは
判断できるでしょう
状況を確認してみてください

投稿2018/06/20 08:57

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamamotomohiro

2018/06/21 00:32 編集

ありがとうございます。 これも確認してみましたが、 Array (0) となりました。POSTデータとして渡っていないと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問