[英]Php upload image to directory
我一直在嘗試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文件的文件,如果它是一個圖像文件上傳到我的目錄,但相反它只是輸出無效的文件我不知道該怎么做任何幫助很希望很快收到回復謝謝
您的腳本問題是您可能正在嘗試上傳超出限制的文件! 你指定了一個非常低的max filesize! 打印出你的$ _FILES var以獲取有關錯誤的信息;)
但是,為了將文件移動到您的文件夾,您仍然需要使用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
}
}
上傳圖像的最佳方式我認為是復制圖像並存儲在文件夾中,然后將圖像的新位置存儲到數據庫中。
移動文件我們可以使用move_uploaded_file函數
$oldpath = $_FILES['image']['tmp_name'];
$newpath ="new_folder_location/".$_FILES['image']['name'];
move_uploaded_file($oldpath, $newpath);
您的驗證代碼正在檢查擴展名,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類型。 要調試,請使用以下命令查看files數組:
print_r($_FILES);
我會說問題在於,如果,那里有很多條件(也就是“無效文件”是其中的其他部分),試着簡化它來跟蹤問題,乍一看我會說這是因為它的大小檢查:
&& ($_FILES["file"]["size"] < 20000)
大約20Kb,對於圖像來說,如果你正在上傳一張照片,試圖提高一個值或者取出那個條件並查看腳本是否有效
發生這種情況是因為以下表達式的計算結果為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)
這意味着哪一個
我的猜測是文件大小 - 大幅增加。 將其更改為以下內容以允許最大10 MB的大小:
&& ($_FILES["file"]["size"] < 10485760)
查看問題的最佳方法是將此行添加到腳本的開頭:
var_dump($_FILES);
我同意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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.