php中的文件上传问题

时间:2011-12-02 23:47:34

标签: php

好的我到了拔头发的地步。我一整天都在努力让这个工作正常而无所事事。现在这个脚本正在做的是当你上传文件时它进入页面并且没有图像。我不知道为什么它工作正常。我仍然是这个文件/图像上传的新手。我尝试了几种不同的方式,没有尝试。这是upload.php代码:

      <?php
    function dbConnect(){
    // Connect to the database
    $hostname="localhost";
     $database="myDatabase";
     $mysql_login="myLogin";
     $mysql_password="myPassword";

     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['upload']['name']);
    $fileType=$_FILES["upload"]["type"];
    if (in_array($_FILES["upload"]["type"],$aryImages)){
        createThumb($fileType,$_FILES['upload']['tmp_name'],$filename,100,100);
    }
    elseif (in_array($_FILES["upload"]["type"],$aryDocs)){
        move_uploaded_file($_FILES['upload']['tmp_name'],
    "/home/valerie2/public_html/elinkswap/imagefolder/".$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/upload/".$thumbFilename);
            imagejpeg($src_img,"/home/valerie2/public_html/elinkswap/upload/".$filename);
        }
        if (is_numeric(strpos($type,"png"))){
            imagepng($dst_img,"/home/valerie2/public_html/elinkswap/upload/".$thumbFilename);
            imagepng($src_img,"/home/valerie2/public_html/elinkswap/upload/".$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 upload 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 upload (fileName,thumbFileName,fileType) values('".$filename."','".$thumbFilename."','".$type."')";
        //echo $SQL;
        mysql_query($SQL);
    }
    ?>

这是我的index.php代码:

<!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="upload.php" method="post">

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

</form>
</html>

这两个文件都位于文件夹名称imagefolder中,只有一个名为upload的文件夹。我已经在文件/图像和很多视频上阅读了很多东西,但我仍然不明白为什么图片不会出现。我甚至尝试了另一种方式,但它一直告诉我invaild文件类型。

3 个答案:

答案 0 :(得分:1)

你的upload.php定义了很多功能,但它们实际上是在哪里调用的?有些人互相打电话,但似乎没有人从“总是执行”的代码中调用它们。你必须添加一些在执行这个php文件时执行的代码,例如在dbInsert函数之后:

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

但是从粗略的一瞥我无法确定dbConnect是否真的是适当的调用函数 - 你的函数似乎有点随机互联;当dbConnect正在调用createThumb时,为什么createThumb会调用dbInsert,而dbConnect又会再次调用{{1}}?这将创建一个无限递归循环。

如果我是你,我会开始没有任何功能来测试想要的行为。您可以随时将功能提取到函数中。

答案 1 :(得分:0)

似乎有很多功能,但它们永远不会被调用,所以我想不会发生任何事情。

答案 2 :(得分:0)

检查文件夹的权限并简化代码并尝试在每个函数中回显一些内容以便进行调试,然后确定它停止的位置然后我们可以帮助您更多

但很可能是一个许可问题