[英]PHP file upload won't accept zip files
我正在使用PHP處理.jpg,.gif,.jpeg,.png,.zip和.rar文件upload/
到upload/
目錄。 只允許授權用戶(使用給定密碼)上傳文件。 我給了文件夾upload/
所有權www-data:www-data
具有適當的訪問權限,所以這不是問題。
上傳工作很好,只要我通過網站直接在服務器上傳,該服務器托管整個網站並且其IP與某個域相關聯。 如果我去另一台計算機並嘗試通過網站將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')
?
您的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)) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.