0

即使没有上传图像,也会执行“unlink()”方法,为什么会这样,我该如何解决?

If (isset($_FILES["image"]["name"])) {
    move_uploaded_file($_FILES["imageUp"]["tmp_name"],
        "C:/xampp/htdocs/" . $_FILES["image"]["name"]);
    //if (file_exists($delete)) {
        unlink($delete);
    }
    else {
    $img = $data['row']->image_name;
    }
//}
4

3 回答 3

0
isset($_FILES["image"]["name"] 

即使您是否上传文件,也将始终设置。isset检查事物是否已设置。所以它永远都是true

所以你需要改变你的代码:

if (isset($_FILES["image"]["name"]) && !empty($_FILES["image"]["name"])) {
move_uploaded_file($_FILES["imageUp"]["tmp_name"],
    "C:/xampp/htdocs/" . $_FILES["image"]["name"]);
//if (file_exists($delete)) {
    unlink($delete);
} else {
    $img = $data['row']->image_name;
}

请试试这个。希望这可以帮助 :)

于 2013-02-16T16:23:53.667 回答
0

根据php 文档 move_uploaded_file返回TRUE是否一切正常以及FALSE是否有问题。

正如您所说,图像没有移动,因为 move_uploaded_file 正在返回FALSE
您可以证明将代码更改为:

var_dump(move_uploaded_file($_FILES["imageUp"]["tmp_name"],
    "C:/xampp/htdocs/" . $_FILES["image"]["name"]));

并看到正在返回的内容。

move_uploaded_file在以下情况下将返回 FALSE:

  1. 目的地不存在
  2. 服务器没有足够的权限将文件移动到目标
  3. 该文件没有上传,因为它比 php.ini 变量大upload_max_filesize
  4. 该文件没有上传,因为它比 php.ini 变量大post_max_size

检查并纠正所有这些点,它应该可以工作。

于 2013-02-16T16:24:02.403 回答
0

执行的真正原因unlink()是您禁用了 if 条件

if (file_exists($delete))通过使用//.

这是代码,您可能要编写:

if (isset($_FILES["image"]["name"]) && is_uploaded_file($_FILES['image']['tmp_name'])) {
    move_uploaded_file($_FILES["image"]["tmp_name"],
        "C:/xampp/htdocs/" . $_FILES["image"]["name"]);
    if (file_exists($delete)) {
        unlink($delete);
    } else {
        $img = $data['row']->image_name;
    }
}

并确保$delete保存!想象一下如果$delete等于' C:\users\your-name\some-private-file'。如果您需要更多帮助,请向我们提供围绕此代码段的更多代码。

于 2013-02-16T16:30:46.693 回答