2011-12-01 4 views
0

나는 파일 업로드 방법을 연구 중이다. 나는 단지 이것을 배우기 때문에 다소 혼란 스럽다. 업로드를위한 데이터베이스 이름은 tblFile입니다. 데스크톱 이름에 uploads에 대한 폴더를 업로드했습니다. 그런 다음 filename.php라는 스크립트가 있습니다. 여기에 약간의 코드가 있습니다. 보시다시피 일부 영역이 잘못 표시 될 가능성이 높습니다. 업로드는 uploads 폴더에 없습니다. 나는 약 16주으로이 시점에 모든 것을 모든 다른 지역에서 PHP에 속박 된 혼란 얻고있다파일 업로드 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 


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"입니까? 또한 업로드가 성공했는지 여부를 확인하고, 사용자가 "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 같은 모든 단계를 확인하는 것이 좋습니다 무거운 만듭니다. 전체 스크립트가 잘 작동에이 기능은 기능 dbInsert가 아니라 자신의 일을 할 경우 지금 여기 당신이 확인 ...

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')); 

좋은, 매우 중요합니다 ...

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

이 스크립트는 테스트하지 않았습니다. 도움이되기를 바랍니다!

+0

다른 모든 anwsers에는 중요한 팁이 있습니다 !! 그들 모두를보십시오. –

+0

@ sn1984 : 이것은 아마도 내 대답보다 낫습니다. 나는 당신이 그것을 이해할 수 있도록 여러 번이 게시물을 읽는 것이 좋습니다. –

+0

@Raskolnikov하지만'enctype = "multipart/form-data"에 대해 말했고 Matthew가'mime types '에 대해서 말한 내용 역시 중요합니다 !! –

1

나는 $_FILES['upload']$_FILES['uploadFile']을 모두 언급하는 것으로 나타났습니다. 나는 이것이 당신의 문제라고 생각합니다. 양식 필드의 이름을 확인하십시오. 그래도 문제가 해결되지 않으면 PHP 사이트의 file uploads에 대한 장을 읽는 것이 좋습니다. 예를 들어 <form> 태그에 enctype="multipart/form-data" 속성을 설정하지 않아서 양식 필드를 올바르게 설정하지 않았을 수도 있습니다.

또한 error reporting을 상위 레벨로 설정하여 더 많은 디버깅 정보를 얻을 수 있습니다. 나는 이것이 스택 오버 플로우에 대해 묻는 것보다 더 빨리 문제를 진단했을 것이라고 생각한다. :)

1

Raskolnikov가 쓴 것 이외에, 당신의 MIME 타입이 당신이 필요로하는 것을 모두 포함하는지 확인한다. 예를 들어 "image/jpeg"는 그렇지 않다. 일부 시스템에서 JPG 파일의 유일한 MIME 유형은 "이미지/jpg"일 수 있으며 MIME 유형은 브라우저 (즉, 최종 사용자 시스템이 사용자의 양식으로 전송하는 브라우저)이므로 많은 사용자 중 하나 일 수 있습니다.

좋은 목록을 보려면 http://www.webmaster-toolkit.com/mime-types.shtml을 확인하십시오.