1

我在下面有这段代码,问题是它没有上传文件,并且底部的回调 javascript 函数没有显示结果。现在,在我输入 if isset ($_POST[fileImage'])... 代码和$_SESSION['fileImage']['name'] = $_FILES['fileImage']['name'];, 然后文件完美上传之前。但是使用这 2 段代码,它已经停止了上传。

所以我认为问题在于我使用的上面的代码放错了地方。如何将下面的代码正确放置在正确的位置以使上传重新开始工作?

以下是假设上传文件但失败的代码:

  <?php

    $result = 0;

       if (isset($_POST['fileImage']) && ((($_FILES["fileImage"]["type"] == "image/gif")
    || ($_FILES["fileImage"]["type"] == "image/jpeg")
    || ($_FILES["fileImage"]["type"] == "image/pjpeg")
    || ($_FILES["fileImage"]["type"] == "image/jpg")
    || ($_FILES["fileImage"]["type"] == "image/png")
    || ($_FILES["fileImage"]["type"] == "image/tif"))){

    if( file_exists("ImageFiles/".$_FILES['fileImage']['name'])) {  

        $parts = explode(".",$_FILES['fileImage']['name']);
        $ext = array_pop($parts);
        $base = implode(".",$parts);
        $n = 2;

        while( file_exists("ImageFiles/".$base."_".$n.".".$ext)) $n++;
        $_FILES['fileImage']['name'] = $base."_".$n.".".$ext;

        move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
        "ImageFiles/" . $_FILES["fileImage"]["name"]);
        $result = 1;

    }
        else
          {
          move_uploaded_file($_FILES["fileImage"]["tmp_name"],
          "ImageFiles/" . $_FILES["fileImage"]["name"]);
          $result = 1;

          }

          ?>

<script language="javascript" type="text/javascript">
window.top.stopImageUpload(<?php echo $result;?>);
</script>   

          <?php

    }

      $_SESSION['fileImage']['name'] = $_FILES['fileImage']['name'];

    ?>
4

2 回答 2

0

考虑使用一个函数来处理上传:

function handleImageUpload()
{
    // was a file uploaded?
    if (!isset($_FILES['fileImage'])) {
        return;
    }
    if (!isImage($_FILES['fileImage'])) {
        // consider throwing an exception here
        return;
    }
    $savepath = getFileSavePath($_FILES['fileImage'], 'ImageFiles/')
    // handle upload
    // ...
}

function isImage($imagepath)
{
    // return boolean 
}

function getFileSavePath($uploadpath, $destinationdirectory)
{
    // return path to save upload without overwriting any existing file
}

考虑使用pathinfo()获取有关文件的信息。http://www.php.net/manual/en/function.pathinfo.php

于 2012-04-22T18:17:42.793 回答
0

我看到您同时使用$_FILES["fileImage"]and$_POST['fileImage']并且不确定这是正确的。

您还编写的方式不够干净,无法轻松识别错误..您可以使用它

尝试

<?php

$result = 0;
$errors = array ();
$dirImage = "ImageFiles/";

$allowedTypes = array (
        "image/jpeg",
        "image/gif",
        "image/pjpeg",
        "image/jpg",
        "image/png",
        "image/tif" 
);

if (isset ( $_FILES ['fileImage'] ) && $_FILES ["fileImage"] ["error"] == UPLOAD_ERR_OK) {

    $fileName = $_FILES ['fileImage'] ['name'];
    $fileSize = $_FILES ['fileImage'] ['size'];
    $fileTemp = $_FILES ['fileImage'] ['tmp_name'];
    $fileType = $_FILES ['fileImage'] ['type'];

    $fileExt = pathinfo ( $fileName, PATHINFO_EXTENSION );
    $fileExt = strtolower ( $fileExt );

    if (empty ( $fileName ))
        continue;

    if (! in_array ( $fileType, $allowedTypes )) {
        $errors [] = "File Type is not accepted";

    }

    if(!is_writable($dirImage ))
    {
        $errors [] = "File Destination not writeable";
    }


    $fileDst = $dirImage . DIRECTORY_SEPARATOR . $fileName;
    $filePrifix = basename ( $fileName, "." . $fileExt );
    $i = 0;
    while ( file_exists ( $fileDst ) ) {
        $i ++;
        $fileDst = $dirImage . DIRECTORY_SEPARATOR . $filePrifix . "_" . $i . "." . $fileExt;

    }
    // Move the file

    if (count ( $errors ) == 0) {
        if (move_uploaded_file ( $fileTemp, $fileDst )) {
            $result = 1;
        }
    }

}

$_SESSION ['fileImage'] ['name'] = $_FILES ['fileImage'] ['name'];
?>

请注意,错误存储在$errors变量中,我建议您将其转换为json可以通过您的 JavaScript 代码调用它

于 2012-04-22T18:43:46.660 回答