0

PHPでファイルをアップロードしようとすると、アップロードできません。変数をあちこちにダンプした後、次のようになりました。

Invalid file!
!
NULL
24M
32MNULL 

これから来たもの:

echo "Invalid file!"; //So, we screwed up...
echo "<br />" . $ext . "!<br />";
echo var_dump($_FILES['fileupl']);
echo "<br />" . ini_get('upload_max_filesize');
echo "<br />" . ini_get('post_max_size');
echo "<br />" . var_dump($_FILES['error']);

アップロードしたファイルはすべてそれを返します。
小さなMinecraftファイル共有プラットフォーム用の.zip、.jar、.pngのファイルをアップロードしようとしています。


変数:

$title = $_POST['title'];
    $desc = $_POST['desc'];

    $type = $_GET['type'];

    //File stuff
    $name = $_FILES['fileupl']['name'];
    $rname = $_FILES['fileupl']['tmp_name'];
    $ftype = $_FILES['fileupl']['type'];
    $size = $_FILES['fileupl']['size'];
    $ext = strrchr($rname, '.');
    $allowedExtensions = array(".zip", ".jar", ".png");

コード:

if (!in_array(end(explode(".",
            strtolower($name))),
            $allowedExtensions)) { 

            echo "Invalid file!"; //dafuq, how'd you screw that up man?
            echo "<br />" . $ext . "!<br />";
            echo var_dump($_FILES['fileupl']);
            echo "<br />" . ini_get('upload_max_filesize');
            echo "<br />" . ini_get('post_max_size');
            echo "<br />" . var_dump($_FILES['error']);
        }
        else
        {
            $uploaddir = './content/';

            //Begin file shizzle

            if (is_uploaded_file($_FILES['fileupl']['tmp_name'])) //Is the file uploaded?
            {
                $uploadfile = $uploaddir . basename($name);
                echo $name . " Uploaded successfully.";
                if (move_uploaded_file($rname, $uploadfile))
                {
                    echo $name . " (" . display_filesize($size) . ") Successfully uploaded!";
                    $q = mysql_query("INSERT INTO `content`(`type`, `creator`, `title`, `description`, `filename`) VALUES('" . mysql_real_escape_string($type) . "', '" . $username . "', '" . mysql_real_escape_string($title) . "', '" . mysql_real_escape_string($desc) . "', 'Anon')");
                    if (!$q)
                    {
                        echo "mySQL execution failed!";
                    }
                    else
                    {
                        echo "Uploaded to database!";
                    }
                }
                else
                {
                    echo "File could not be moved!";
                }

            }
            else
            {
                echo "File could not be uploaded!";
                echo var_dump($_FILES['fileupl']);
                echo "<br />" . ini_get('upload_max_filesize');
                echo "<br />" . ini_get('post_max_size');
            }
        }

私はほぼすべてを試しましたが、誰かが何が起こっているのかを知っていれば、非常に感謝しています.

ありがとう!

4

2 に答える 2

1

マルチパートフォームデータをタグに追加して試してください

enctype="multipart/form-data"
于 2012-08-02T17:10:54.450 に答える
0

フォームを修正した後に言及したように、次のようになります: (わかりやすくするために編集しました)

Invalid file! 
!    
array(5) { ["name"]=> string(17) "EasyMinecraft.zip" ["type"]=> string(15) "application/zip" ["tmp_name"]=> string(14) "/tmp/php87jMDe" ["error"]=> int(0) ["size"]=> int(4325565) } 
24M 
32MNULL 
Array ( [fileupl] => Array ( [name] => EasyMinecraft.zip [type] => application/zip [tmp_name] => /tmp/php87jMDe [error] => 0 [size] => 4325565 ) )

これは、$ext が空であることを示しています。変数割り当ての関連行は次のとおりです。

$rname = $_FILES['fileupl']['tmp_name'];
$ext = strrchr($rname, '.');

それで、何$_FILES['fileupl']['tmp_name']ですか?あなたの出力はそれが/tmp/php87jMDeであることを示しています。その中にはピリオドがないためです。tmp_name ではなく、実際の名前を使用するように最初の行を変更することをお勧めします。たとえば、次のようになります。

$rname = $_FILES['fileupl']['name'];

この条件式でもエラーが発生します。

if (!in_array(end(explode(".",
            strtolower($name))),
            $allowedExtensions)) { 

end(explode(".", strtolower($name)))「.zip」ではなく「zip」のみが提供されることに注意してください。$ext既に作成した拡張機能を使用するのではなく、ここで拡張機能を削除しようとしている理由がわかりませんか? 作成するときは小文字に$extすることをお勧めしますが、それでよろしいでしょうか?

于 2012-08-02T17:56:02.103 に答える