2011-12-01 189 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为一个很好的清单。