下面的isset()函数是否正确放置?

时间:2012-04-22 18:00:02

标签: php

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

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

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

  <?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'];

    ?>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我发现您正在使用$_FILES["fileImage"]$_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代码调用