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

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

ただいまの
回答率

90.62%

  • PHP

    19786questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 266

 前提・実現したいこと

CentOS7.3, PHP7.1 にて、ファイルアップロードを
実現したいと思っています。
手法は<input type="file"> タグによる、普通の手法です。

アップロードファイルはzipファイルで、最大256MBほどのサイズを
想定しています。

 発生している問題・エラーメッセージ

IE11にて、「参照」ボタンでファイルを選択し、
「アップロード」ボタンをクリックすると、
選択しているはずの表示されているファイル名が消え、
即座に処理が終了します。(何も行われていない状態です)

ただ、常にというわけではなく、時々うまくアップロードされる場合も
あります。

正常にアップロードされるときは、しばらくアクセス状態になったのち、
「アップロードが正常に行われました。」が表示されます。

CromeやFireFoxだと問題なくアップロードできます。
IEの他のバージョンやEdgeは試していません。

 該当のソースコード

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta content="86400" http-equiv="Expires" >
</head>
<body>
    <div style="text-align:center">
        <form method="post" enctype="multipart/form-data" action="">
              <input type="hidden" name="MAX_FILE_SIZE" value="256000000" />
              <input type="file" name="filename" size="40" accept="application/zip" /><br/><br/>
              <input type="submit" name="upload" value="アップロード" style="width:125px" />    
        </form>
<?php
    //アップロードボタンを押下時
    if(isset($_POST['upload'])) 
    {
        //ルートディレクトリの設定
        $root_dir = $_SERVER['DOCUMENT_ROOT']. '/';

        //アップロード処理を行う一時フォルダ名の設定
        $temp_dir = $root_dir. 'temp/';

        //フォルダがなければ作成する
        if(!file_exists($temp_dir)){
            mkdir($temp_dir, 0777);
        }

        try {
            //アップロードファイルのサイズをチェック(上限:256,000,000 byte)
            if ($_FILES['filename']['size'] > 256000000 ) {
                throw new Exception('アップロードファイルの容量が大きすぎます。');
            }

            $zipExtention = strrchr($_FILES['filename']['name'], '.');

            //拡張子がZIP以外の場合はアップロード不可
            if(strcasecmp($zipExtention, '.zip') != 0){
                throw new Exception('ZIPファイルを選択してください。');
            }

            //アップロード先のファイル名を指定
            $uploadfile = $temp_dir. $_FILES['filename']['name'];
            //一時ファイルのアップロード可否をチェック
            if (!move_uploaded_file($_FILES['filename']['tmp_name'], $uploadfile)) {
                throw new Exception('アップロード時にエラーが発生しました。');
            }

        } catch (Exception $e) {
            deleteFile($temp_dir);
            print '<FONT COLOR="RED">アップロードを中止します。<br><br></FONT>';
            print '<FONT COLOR="RED">※ '. $e->getMessage(). '</FONT>';
            exit();
        }

        print '<p>アップロードが正常に行われました。</p>';
    }}
?>
    </div>
    </body>
</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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yamamotomohiro

    2018/06/20 15:43

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

    キャンセル

  • mts10806

    2018/06/20 15:48

    再送信で欠落することはあるようですが、そういうわけでもないですよね。 https://teratail.com/questions/66538

    キャンセル

  • yamamotomohiro

    2018/06/20 15:52

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

    キャンセル

回答 2

check解決した方法

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

とりあえず

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/21 09:30 編集

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

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19786questions

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