0

PHP を使用して、ディレクトリへの .jpg、.gif、.jpeg、.png、.zip、および .rar ファイルのアップロードを処理していますupload/。ファイルをアップロードできるのは、許可されたユーザー (所定のパスワードを持つ) のみです。適切なアクセス権を持つフォルダーのupload/所有権を与えたので、それは問題ではありません。www-data:www-data

サイト全体をホストし、IP が特定のドメインに関連付けられているサーバーに直接 Web サイトを介してアップロードしている限り、アップロードはうまく機能します。別のコンピューターに移動して、ウェブサイトからサーバーに zip ファイルをアップロードしようとすると、Invalid fileメッセージが表示され、データベースに何もアップロードまたは保存されません。これが私のコードです:

$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["fajl"]["name"]));
$allowedExts1 = array("zip", "rar");
$extension1 = end(explode(".", $_FILES["fajl"]["name"]));
if ((($_FILES["fajl"]["type"] == "image/gif")
    || ($_FILES["fajl"]["type"] == "image/jpeg")
|| ($_FILES["fajl"]["type"] == "image/png")
|| ($_FILES["fajl"]["type"] == "image/pjpeg"))
    && ($_FILES["fajl"]["size"] < 4000000)
    && in_array($extension, $allowedExts))
{
    if ($_FILES["fajl"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["fajl"]["error"] . "<br />";
    }
    else
    {
        echo "Upload: " . $_FILES["fajl"]["name"] . "<br />";
        echo "Type: " . $_FILES["fajl"]["type"] . "<br />";
        echo "Size: " . ($_FILES["fajl"]["size"] / 1024) . " KB<br />";
        echo "Temp file: " . $_FILES["fajl"]["tmp_name"] . "<br />";

        if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/upload/slike/' . $nav . '/' . $_FILES["fajl"]["name"]))
        {
            echo $_FILES["fajl"]["name"] . " already exists. ";
        }
        else
        {
            move_uploaded_file($_FILES["fajl"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'] . '/upload/slike/' . $nav . '/' . $_FILES["fajl"]["name"]);
            echo "Stored in: " . $_SERVER['DOCUMENT_ROOT'] . '/upload/slike/' . $nav . '/' . $_FILES["fajl"]["name"];
            $pomlokacijasl='/upload/slike/' . $nav . '/' . $_FILES["fajl"]["name"];
            $query22 = "INSERT INTO `slike` (navig, slik) VALUES ('$nav', '$pomlokacijasl')";
            $query22 = mysql_query($query22) or trigger_error ("Error in query: $query22. ".mysql_error());
            mysql_free_result($query22);
        }
    }
}
else if ((($_FILES["fajl"]["type"] == "application/x-rar-compressed")
    || ($_FILES["fajl"]["type"] == "application/zip"))
    && ($_FILES["fajl"]["size"] < 25000000)
    && in_array($extension1, $allowedExts1)) 
{
    if ($_FILES["fajl"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["fajl"]["error"] . "<br />";
    }
    else
    {
        echo "Upload: " . $_FILES["fajl"]["name"] . "<br />";
        echo "Type: " . $_FILES["fajl"]["type"] . "<br />";
        echo "Size: " . ($_FILES["fajl"]["size"] / 1024) . " KB<br />";
        echo "Temp file: " . $_FILES["fajl"]["tmp_name"] . "<br />";

        if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/upload/datoteke/' . $nav . '/' . $_FILES["fajl"]["name"]))
        {
            echo $_FILES["fajl"]["name"] . " already exists. ";
        }
        else
        {
            move_uploaded_file($_FILES["fajl"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'] . '/upload/datoteke/' . $nav . '/' . $_FILES["fajl"]["name"]);
            echo "Stored in: " . $_SERVER['DOCUMENT_ROOT'] . '/upload/datoteke/' . $nav . '/' . $_FILES["fajl"]["name"];
            $pomlokacijadat='/upload/datoteke/' . $nav . '/' . $_FILES["fajl"]["name"];
            $query22 = "INSERT INTO `datoteke` (navig, dat) VALUES ('$nav', '$pomlokacijadat')";
            $query22 = mysql_query($query22) or trigger_error ("Error in query: $query22. ".mysql_error());
            mysql_free_result($query22);
        }
    }
}
else
{
    echo "Invalid file";
}

どうすればこれを解決できますか? 追加$_SERVER('DOCUMENT_ROOT')$_SERVER('SERVER_NAME')機能しますか?

4

1 に答える 1

2

MIME タイプ チェックで、zip ファイルの有効なタイプの一部が除外されています。ブラウザによって異なりますが、最も一般的なタイプは次のとおりです。

application/zip   
application/x-zip
application/octet-stream
application/x-zip-compressed

チェックでそれらすべてを許可する必要があります。コードの残りの部分を一致させるには、次のようにします。

$allowedCompressedTypes = array("application/x-rar-compressed", "application/zip", "application/x-zip", "application/octet-stream", "application/x-zip-compressed");

else if (in_array($_FILES["fajl"]["type"], $allowedCompressedTypes)
    && ($_FILES["fajl"]["size"] < 25000000)
    && in_array($extension1, $allowedExts1)) {
于 2012-10-12T04:00:09.300 に答える