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

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

ただいまの
回答率

90.21%

PHPのファイルアップロードについて

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 215

maikeru

score 31

こんにちは。PHPでファイルをアップロードするプログラムを書いてみたのですがファイルがアップロードされません。
$_FILES['upfile']['error']は0でエラーメッセージは格納されていないようなのですが何が原因なのでしょうか。
保存先ディレクトリのパーミッションは rwxr-xr-x でした。

<form action="file2.php" method="post" enctype="multipart/form-data">
        <label for="upfile">file path : </label>
        <input type="hidden" name="max_file_size" value="1000000">
        <input type="file" id="upfile" name="upfile" size="40">
        <input type="submit" value="upload">
</form>
$ext = pathinfo($_FILES['upfile']['name']);
$perm = ['gif', 'jpg', 'jpeg', 'png'];

if($_FILES['upfile']['error'] !== UPLOAD_ERR_OK){
    $msg = [
        UPLOAD_ERR_INI_SIZE => "php.iniのupload_max_filesize制限を超えています。",
        UPLOAD_ERR_FORM_SIZE => "HTMLがMAX_FILE_SIZE制限を超えています。",
        UPLOAD_ERR_PARTIAL => "ファイルが一部しかアップロードされていません。",
        UPLOAD_ERR_NO_FILE => "ファイルはアップロードされませんでした。",
        UPLOAD_ERR_NO_TMP_DIR => "一時保存フォルダが存在しません。",
        UPLOAD_ERR_CANT_WRITE => "ディスクへの書き込みに失敗しました。",
        UPLOAD_ERR_EXTENSION => "拡張モジュールによってアップロードが中断されました。"
    ];
    $err_msg = $msg[$_FILES['upfile']['error']];
}elseif(!in_array(strtolower($ext['extension']), $perm)){
    $err_msg = "画像以外のファイルはアップロードできません";
}elseif(!@getimagesize($_FILES['upfile']['tmp_name'])){
    $err_msg = "ファイルの内容が画像ではありません";
}else{
    $src = $_FILES['upfile']['tmp_name'];
    $dest = mb_convert_encoding($_FILES['upfile']['name'], 'SJIS-WIN', 'UTF-8');
    if(!move_uploaded_file($src, "./".$dest)){
        $err_msg = "アップロード処理に失敗しました。";
    }else{
        print "アップロードに成功しました。<br>";
    }
}
if(isset($err_msg)){
    die('<div style="color:Red;">'.$err_msg.'</div>');
}

$ httpd -v
Server version: Apache/2.4.37 (Win64)
Apache Lounge VC14 Server built:   Nov 23 2018 10:40:53
$ php -v
PHP 7.3.0 (cli) (built: Dec  6 2018 01:54:19) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
with Xdebug v2.7.0, Copyright (c) 2002-2019, by Derick Rethans

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • m.ts10806

    2019/03/18 15:28

    同コード実行しましたが、アップロードされましたよ。
    環境情報(サーバーの情報)、PHPのバージョンなど詳細追記してください。

    キャンセル

  • m.ts10806

    2019/03/18 15:31

    あとはアップロードしようとした画像のファイルサイズも。

    キャンセル

  • ockeghem

    2019/03/18 16:14

    保存先ディレクトリのオーナーと、PHPスクリプトが動くユーザーの情報を追記ください

    キャンセル

まだ回答がついていません

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

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