2012-02-24 137 views
0

我正在尋找PHP文件上傳的幫助。我試圖上傳的圖像,使用下面的代碼(在W3Schools的教程中提供):PHP文件上傳問題

if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
&& ($_FILES["file"]["size"] < 20000)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
{ 
echo "Return Code: " . $_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 "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 

if (file_exists("upload/" . $_FILES["file"]["name"])) 
    { 
    echo $_FILES["file"]["name"] . " already exists. "; 
    } 
else 
    { 
    move_uploaded_file($_FILES["file"]["tmp_name"], 
    "upload/" . $_FILES["file"]["name"]); 
    echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
    } 
} 
     } 
      else 
      { 
      echo "Invalid file"; 
    } 

很顯然,我有一些變化,使他們的代碼,但它不會做什麼它說,它應該要照原樣去做。所以我問:

  1. 爲什麼這不會創建一個名爲「上傳」的新文件夾,因爲它聲稱它會?我收到以下錯誤: Warning: move_uploaded_file(upload/donkeykong.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in ... etc.

  2. 我應該如何編寫要上傳圖像的URL?

+0

不確定你的意思是_如何寫我想要圖片上傳的URL?如果你澄清,我會相應地更新我的答案。 – 2012-02-24 02:37:31

+0

我只是不確定寫入的語法,我希望將圖像上載到根目錄中的圖像文件夾,而上載頁面不在根目錄中。它是標準的PHP語法「../../images/blah/」? – muttley91 2012-02-24 02:43:11

+1

請參閱下面的答案。 – 2012-02-24 02:48:36

回答

2

它不創建一個文件夾,因爲mkdir()永遠不會被調用。該代碼假定upload/目錄已經存在。創建該目錄,如果它不存在:

if (!file_exists('upload')) { 
    mkdir('./upload'); 
} 

順便說一句,開頭的語句可以用多種方法清除。一個possibilty是使用in_array(),而不是一堆||條件:

if (in_array($_FILES['file']['type'], array("image/gif", "image/jpeg", "image/pjpeg") 
    && ($_FILES["file"]["size"] < 20000) 
) 

要放置在上傳相upload/到服務器的根目錄,你可以使用$_SERVER['DOCUMENT_ROOT']。但是,您應手動創建upload/目錄並使其可通過Web服務器寫入。爲了通過PHP創建目錄,整個文檔根目錄需要被Web服務器寫入,這是一個巨大的安全缺陷。

$uploads_dir = $_SERVER['DOCUMENT_ROOT'] . "/upload/"; 
move_uploaded_file($_FILES["file"]["tmp_name"], $uploads_dir . $_FILES["file"]["name"]); 
+0

所以當我做'if(!file_exists('upload'))''上傳'應該由實際位置替換是嗎? – muttley91 2012-02-24 04:08:00

+0

謝謝!目錄不存在,以及指定的位置不正確,是我的問題! – muttley91 2012-02-24 04:18:29

2

我建這個awial前,適用於JPEGJPGGIFPNG

保存到當前目錄中的 「圖像」。

<? 
max_size = 300; //size in kbs 

if($_POST['Submit'] == "Upload"){$image =$_FILES["file"]["name"];$uploadedfile = $_FILES['file']['tmp_name']; 
    if ($image){$filename = stripslashes($_FILES['file']['name']);$extension = getExtension($filename); $extension = strtolower($extension);  
     if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) {$change='Invalid Picture';$errors=1;} 
     else{$size=filesize($_FILES['file']['tmp_name']); 
      if ($size > $max_size*1024){$change='File too big!';$errors=1;} 
      else{ 
       if($extension=="jpg" || $extension=="jpeg"){$uploadedfile = $_FILES['file']['tmp_name'];$src = imagecreatefromjpeg($uploadedfile);} 
       else if($extension=="png"){$uploadedfile = $_FILES['file']['tmp_name'];$src = imagecreatefrompng($uploadedfile);} 
       else {$src = imagecreatefromgif($uploadedfile);} 
       echo $scr; 
       list($width,$height)=getimagesize($uploadedfile); 

       //MAIN IMAGE 
       $newwidth=300; 
       $newheight=($height/$width)*$newwidth; 
       $tmp=imagecreatetruecolor($newwidth,$newheight); 
       $kek=imagecolorallocate($tmp, 255, 255, 255); 
       imagefill($tmp,0,0,$kek); 
       imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 

       //Does Directory Exhist? 
       if(is_dir("images")==FALSE){mkdir("images");} 

       //Build file path and SAVE 
       $filepath = "images/".md5(genRandomString().$_FILES['file']['name']).".".$extension; 
       imagejpeg($tmp,$filepath,100); 
       imagejpeg($tmp,$filepath,100); 
       imagedestroy($src); 
       imagedestroy($tmp); 

       //ERROR HANDLING 
       if($_FILES["file"]["size"]<=0){$errors=1;$change='No file';} 
       if($errors!=1){$change='Image Uploaded!';} 
      } 
     } 
    } 
} 
?> 

爲你的錯誤:

<div><? echo $change ?></div> 
1

1.通常表示文件路徑不正確或權限設置不正確。您應該創建上傳目錄並進行設置,以便適當的人員可以手動讀取和寫入。在Apache中我覺得是這樣的:

mkdir uploaded_files 
chown -R nobody uploaded_files 
chmod 755 -R uploaded_files 

2.In問候的路徑,可以使用絕對或relative-最好還是做用:

$_SERVER['DOCUMENT_ROOT] . '/uploaded_files' 
1

希望這有助於

<?php 
if (isset($_FILES['photo'])) 
{ 
    $mimetype = mime_content_type($_FILES['photo']['tmp_name']); 
    if(in_array($mimetype, array('image/jpeg', 'image/gif', 'image/png'))) { 

    move_uploaded_file($_FILES['photo']['tmp_name'], 
'/images/' . $_FILES['photo']['name']); 
    echo 'OK'; 
    } else { 
      echo 'Not an image file!'; 
    } 
}