4

私はphpのアップロード機能を試してきましたが、w3schoolでこのチュートリアルを見てきました。

http://www.w3schools.com/php/php_file_upload.asp

I installed this script on MYDOMAIN.com/New.html


<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

そして、このスニペットをMYDOMAIN.com/upload_file.phpに配置します

<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }
?>

今では本当に混乱している人である可能性が非常に高いですが、私が想定しているのは、New.htmlファイルに入れたファイルを取得し、それが画像ファイルの場合はディレクトリにアップロードすることですが、代わりに無効なファイルを出力するだけです。どうすればよいかわかりません。すぐに返信をお待ちしています。ありがとうございます。

4

6 に答える 6

10

スクリプトの問題は、おそらく制限よりも高いファイルをアップロードしようとしていることです。非常に低い最大ファイルサイズを指定しました。$ _FILES変数を印刷して、何が問題なのかに関する情報を取得します;)

ただし、ファイルをフォルダに移動するには、 move_uploaded_fileを使用する必要があります。

$allow = array("jpg", "jpeg", "gif", "png");

$todir = 'uploads/';

if ( !!$_FILES['file']['tmp_name'] ) // is the file uploaded yet?
{
    $info = explode('.', strtolower( $_FILES['file']['name']) ); // whats the extension of the file

    if ( in_array( end($info), $allow) ) // is this file allowed
    {
        if ( move_uploaded_file( $_FILES['file']['tmp_name'], $todir . basename($_FILES['file']['name'] ) ) )
        {
            // the file has been moved correctly
        }
    }
    else
    {
        // error this file ext is not allowed
    }
}
于 2012-11-20T10:09:34.237 に答える
2

画像をアップロードする最良の方法は、画像をコピーしてフォルダ内に保存してから、画像の新しい場所をデータベースに保存することだと思います。

ファイルを移動するには、move_uploaded_file関数を使用できます

$oldpath = $_FILES['image']['tmp_name'];
$newpath ="new_folder_location/".$_FILES['image']['name'];
move_uploaded_file($oldpath, $newpath);
于 2012-11-20T09:56:43.010 に答える
1

検証コードは、拡張子、mimeタイプ、ファイルサイズをチェックしています。

拡張子に大文字が含まれるファイルをアップロードしている可能性があります。拡張子をチェックするときは、大文字と小文字を.JPG区別してチェックします。これは有効な画像ファイル拡張子であるため、大文字と小文字を区別しないようにする必要があります。

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array(strtolower($extension), $allowedExts))
         // ^ added strtolower()

それが当面の問題ではない場合は、ファイルが大きすぎるか、mimeタイプが間違っています。デバッグするには、次のコマンドでファイル配列を表示します。

print_r($_FILES);
于 2012-11-20T10:02:20.260 に答える
1

問題は、そこに多くの条件がある場合(「無効なファイル」もその場合のその他の部分です)、問題を追跡するために単純化してみてください。一見すると、サイズが原因であると言えます。チェック中:

&& ($_FILES["file"]["size"] < 20000)

これは約20Kbで、写真をアップロードする場合は画像としてはかなり小さいです。より高い値を設定するか、その条件を取り除いて、スクリプトが機能するかどうかを確認してください。

于 2012-11-20T10:03:42.563 に答える
0

これは、次の式がfalseと評価されるために発生します。

(($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)

つまり、どちらか

  • ファイルタイプが正しくありません(GIF / JPEG / PNG / PNJPEGファイルではありません)
  • ファイルが20000バイトより大きい
  • ファイル拡張子が正しくありません(「jpg」、「jpeg」、「gif」、「png」のいずれでもありません)

私の推測では、ファイルサイズを大幅に増やします。最大10MBのサイズを許可するには、次のように変更します。

&& ($_FILES["file"]["size"] < 10485760)

問題を確認する最良の方法は、スクリプトの先頭に次の行を追加することです。

var_dump($_FILES);
于 2012-11-20T09:57:01.080 に答える
0

Ivoの回答には同意しますが、次のようなコードを変更できると思います。

$typePicture = array('jpg','png','jpeg','gif');

// Allow certain file formats

if($typePicture[0] != "jpg" || $typePicture[1] != "png" || $typePicture[2] != "jpeg" || $typePicture[3] != "gif" ) 
{
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
于 2016-06-01T01:01:23.827 に答える