file_exists在两个地方返回相同条件的不同结果

时间:2017-03-01 15:43:10

标签: php

我有一些上传表单,file_exists在同一个请求的两个地方返回相同条件的不同结果。以下是示例代码。

$flag = file_exists($_FILES['image']['name']); // return TRUE
move_uploaded_file(
     $_FILES['image']['tmp_name'],
     'uploads/' . $_FILES['image']['name']
);

require_once APPPATH . 'custom_classes/ImageResize.class.php';

$img_resize = new ImageResize($_FILES['image']['tmp_name']); // here is the Exception thrown
$img_resize->set_resize_dimensions(650, 451);
$img_resize->crop_image();
$img_resize->save_image('uploads/cropped.jpg');
$img_resize->free_resourses();

这是抛出异常的类构造函数。

public function __construct($filepath)
{
    if (!file_exists($filepath)) // same condition as above, throws Exception
    {
        throw new Exception('File not found!');
    }

    $this->get_source_dimensions($filepath);
    $this->load_source_img($filepath);
}
它让我发疯了。我可以从文件系统传递临时路径,但我很确定此代码之前有效,现在它给了我这个。我做错了吗?

2 个答案:

答案 0 :(得分:3)

它说该文件不存在的原因是因为它不再存在。

您正在将文件从tmp_name位置移动到uploads文件夹中,然后在刚移出它的tmp_name位置查找该文件。

答案 1 :(得分:0)

移动文件后,它不再位于旧位置,而是移动""移动"不是"副本"因此:

$flag = file_exists($_FILES['image']['name']); // return TRUE
$newlocation = 'uploads/'.$_FILES['image']['name'];
move_uploaded_file(
     $_FILES['image']['tmp_name'],
     $newlocation
);

require_once APPPATH . 'custom_classes/ImageResize.class.php';

$img_resize = new ImageResize($newlocation); // no more Exception thrown!
$img_resize->set_resize_dimensions(650, 451);
$img_resize->crop_image();
$img_resize->save_image('uploads/cropped.jpg');
$img_resize->free_resourses();

应该更适合你。 (不太清楚为什么你有tmp_name和名字,但我猜你知道)