2011-12-01 187 views
0

我正在研究如何上傳文件。由於我只是在學習這一點,它對我來說有點令人困惑。我有一個數據庫名稱tblFile上傳。我在uploads上的桌面名稱上傳中也有一個文件夾。然後我有一個名爲filename.php的腳本。這裏有一點我的代碼。正如你所看到的我最有可能有一些地區錯誤。上傳不在uploads文件夾。文件上傳php

$aryImages=array("image/jpeg","image/png"); 

$aryDocs=array("application/msword","application/pdf","video/x-msvideo"); 

$filename=filenameSafe($_FILES['upload']['name']); 

$fileType=$_FILES["upload"]["type"]; 

if (in_array($_FILES["upload"]["type"],$aryImages)){ 
    createThumb($fileType,$_FILES['uploadFile']['tmp_name'],$filename,100,100); 
} 
elseif (in_array($_FILES["uploadFile"]["type"],$aryDocs)){ 
    move_uploaded_file($_FILES['uploadFile']['tmp_name'], 
       "/home/valerie2/public_html/elinkswap/filename.php/".$filename); 

    $aryColumns=array( "sessionID"=>$curSess, 
         "fileName"=>$filename, 
         "fileType"=>$fileType, 
         "thumbFileName"=>$thumbFilename, 
         "dateCreated"=>date('Y-m-d H:i:s')); 
    dbInsert($filename,$aryColumns,$_FILES["upload"]["type"]); 
} 
else{ 
    echo "File Uploaded"; 
} 

我越來越糊塗我已經在PHP抽筋了所有不同的區域爲約16周,在這一點上的一切似乎只是在我的腦海中運行插件。這是作業的一部分,但我認爲我有一些文件倒退,我只是希望有人能幫助我理解我在做什麼。由於

編輯: 這裏是我的工作更多的文件:

<?php 


function dbConnect(){ 
// Connect to the database: 
$hostname="localhost"; 
$database="tblFile"; 
$mysql_login="valerie2_shuawna"; 
$mysql_password="norris"; 

if(!($db=mysql_connect($hostname, $mysql_login, $mysql_password))){ 
    echo"error on connect"; 
} 
else{ 
    if(!(mysql_select_db($database,$db))){ 
     echo mysql_error(); 
     echo "<br />error on database connection. Check your settings."; 
    } 
    else{ 
       echo "This is the home page. I have successfully made a connection to my database and everything 
is working as it should."; 
     } 


} 

$aryImages=array("image/jpeg","image/png"); 
$aryDocs=array("application/msword","application/pdf","video/x-msvideo"); 
$filename=filenameSafe($_FILES['uploads']['name']); 
$fileType=$_FILES["uploads"]["type"]; 
if (in_array($_FILES["uploads"]["type"],$aryImages)){ 
    createThumb($fileType,$_FILES['uploads']['tmp_name'],$filename,100,100); 
} 
elseif (in_array($_FILES["uploads"]["type"],$aryDocs)){ 
    move_uploaded_file($_FILES['uploads']['tmp_name'], 
"/home/valerie2/public_html/elinkswap/uploads/".$filename); 
    $aryColumns=array("sessionID"=>$curSess,"fileName"=>$filename,"fileType"=>$fileType,"thumbFileName"=>$thumbFilename,"dateCreated"=>date('Y-m-d H:i:s')); 
    dbInsert($filename,$aryColumns,$_FILES["upload"]["type"]); 
} 


    else{ 

    echo "File Uploaded"; 
    } 
} 
function createThumb($type,$tmpname,$filename,$new_w,$new_h){ 
    $thumbFilename="tmb-".$filename; 
    echo $type; 
    echo "<br>".$tmpname; 
    if (is_numeric(strpos($type,"jpeg"))){ 
     $src_img=imagecreatefromjpeg($tmpname); 
    } 
    if (is_numeric(strpos($type,"png"))){ 
     $src_img=imagecreatefrompng($tmpname); 
    } 
    $old_x=imageSX($src_img); 
    $old_y=imageSY($src_img); 
    if ($old_x > $old_y) { 
     $thumb_w=$new_w; 
     $thumb_h=$old_y*($new_h/$old_x); 
    } 
    if ($old_x < $old_y) { 
     $thumb_w=$old_x*($new_w/$old_y); 
     $thumb_h=$new_h; 
    } 
    if ($old_x == $old_y) { 
     $thumb_w=$new_w; 
     $thumb_h=$new_h; 
    } 
    $dst_img=imagecreatetruecolor($thumb_w,$thumb_h); 
    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); 
    if (is_numeric(strpos($type,"jpeg"))){ 
     imagejpeg($dst_img,"/home/valerie2/public_html/elinkswap/uploads/".$thumbFilename); 
     imagejpeg($src_img,"/home/valerie2/public_html/elinkswap/uploads/".$filename); 
    } 
    if (is_numeric(strpos($type,"png"))){ 
     imagepng($dst_img,"/home/valerie2/public_html/elinkswap/uploads/".$thumbFilename); 
     imagepng($src_img,"/home/valerie2/public_html/elinkswap/uploads/".$filename); 
    } 
    imagedestroy($dst_img); 
    imagedestroy($src_img); 
    dbInsert($filename,$thumbFilename,$type); 
} 
function filenameSafe($filename) { 
    $temp = $filename; 
    // Lower case 
    $temp = strtolower($temp); 
    // Replace spaces with a ’_’ 
    $temp = str_replace(" ", "_", $temp); 
    // Loop through string 
    $result = ""; 
    for ($i=0; $i<strlen($temp); $i++) { 
     if (preg_match('([0-9]|[a-z]|_|.)', $temp[$i])) { 
      $result = $result.$temp[$i]; 
     } 
    } 
    dbConnect(); 
    $SQL="SELECT fileID FROM uploads WHERE fileName='".$result."'"; 
    //echo $SQL; 
    $rs=mysql_query($SQL); 
    echo mysql_num_rows($rs); 
    if(mysql_num_rows($rs)!=0){ 
     $extension=strrchr($result,'.'); 
     $result=str_replace($extension,time(),$result); 
     $result=$result.$extension; 
    } 
    return $result; 
} 

function dbInsert($filename,$thumbFilename,$type){ 
    dbConnect(); 
    $SQL="INSERT Into uploads (fileName,thumbFileName,fileType) values('".$filename."','".$thumbFilename."','".$type."')"; 
    //echo $SQL; 
    mysql_query($SQL); 


} 



?> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title>File Upload</title> 
<link href="styles.css" type="text/css" rel="stylesheet" /> 
</head> 
<body> 


<form enctype="multipart/form-data" action="filename.php" method="post"> 

Select File: <input type="file" name="uploads"> 
<input type="hidden" name="MAX_FILE_SIZE" value="1000000"/> 
<input name="Submit" type="submit" value="uploads"> 

</form> 

但文件仍然沒有負載文件夾上傳。

+0

'/ home/valerie2/public_html/elinkswap/filename.php /' - 你真的有一個目錄名「filename.php」嗎?另外,如果上傳成功,您將檢查ZERO,並且相信用戶不會將「nastyvirus.exe」重命名爲「cutekittens.jpg」,並繞過您的(* ahem *)「安全性」。 –

回答

1

好吧,看起來你的名字混淆了$_FILES['upload']$_FILES['uploadFile']。我把所有的名字都叫做一個名字:upload。讓我們來看看代碼:

首先是一些聲明......

$aryImages=array("image/jpeg","image/png"); 
$aryDocs=array("application/msword","application/pdf","video/x-msvideo"); 

$filename=filenameSafe($_FILES['upload']['name']); 
$fileType=$_FILES["upload"]["type"]; 

那麼我認爲你建議立即進行刪除驗證文件類型您生成thumb,對不對?如果文件類型不正常,則原因是您不創建thumb

if (in_array($_FILES["upload"]["type"],$aryDocs)) { 

那麼文件類型是好的,現在創建thumb ...

if (in_array($_FILES["upload"]["type"],$aryImages)) { 
     createThumb($fileType,$_FILES['upload']['tmp_name'],$filename,100,100); 
    } 

重建議,以驗證像move_uploaded_file所有步驟。此功能是至關重要的整個腳本正常工作......

if (move_uploaded_file($_FILES['upload']['tmp_name'], 
"/home/valerie2/public_html/elinkswap/filename.php/".$filename)) { 
     $aryColumns=array("sessionID"=>$curSess,"fileName"=>$filename,"fileType"=>$fileType,"thumbFileName"=>$thumbFilename,"dateCreated"=>date('Y-m-d H:i:s')); 

好,現在在這裏你驗證,如果你的函數dbInsert做他的工作好...

 if (dbInsert($filename,$aryColumns,$_FILES["upload"]["type"])) { 
      // Upload OK 
     } else { 
      // Error inserting on DB 
     } 
    } else { 
     // Error moving file!! 
    } 
} 

請注意,我還沒有測試過這個腳本。我希望它有幫助!

+0

所有其他的an魚都有重要的提示!看到他們全部。 – 2011-12-01 18:01:15

+0

@ sn1984:這可能比我的回答好。我強烈建議你多讀幾篇文章,以確保你理解它。 –

+0

@Raskolnikov但是你說'enctype =「multipart/form-data」'和Matthew對'mime類型'所說的話也很重要! – 2011-12-01 18:04:28

1

我注意到你指的是$_FILES['upload']$_FILES['uploadFile']。我懷疑這是你的問題。檢查表單域的名稱。如果這不能解決您的問題,我建議您閱讀PHP網站上關於file uploads的章節。您還可能發現,您尚未正確設置表單域,例如,在<form>標記中未設置enctype="multipart/form-data"屬性。

此外,通過將error reporting設置爲更高級別,您將獲得更多調試信息。我懷疑這會診斷你的問題比問堆棧溢出更快:)

1

除了Raskolnikov寫的,還要確保你的MIME類型涵蓋了所有你需要的東西,例如「image/jpeg」不是在某些系統中,唯一的用於JPG文件的MIME類型也可以是「image/jpg」,並且由於MIME類型是瀏覽器(即最終用戶機器發送到表單的內容),所以它可以是許多其中之一。

退房http://www.webmaster-toolkit.com/mime-types.shtml爲一個很好的清單。