0

我有一个页面,允许用户在我的网站上发布广告。此页面允许他们上传相关产品的多张照片。

我目前有两种形式。第一个处理产品的详细信息,而第二个是允许他们上传照片的 dropzone(使用 dropzone.js)。我热衷于将这些表格分开,因为照片可能非常大,我希望它们立即上传,而不是等待用户按下提交。这应该可以节省整体时间。

因此,当照片被放入 dropzone 时,它​​们会被上传到一个 tmp 目录(以防用户没有发布整个广告)。用户提交第一个表单后,我将使用 move_uploaded_file() 将文件移动到其永久位置。这是我正在使用的代码:

for ($loop=1; $loop<=6; $loop++) {

    // Retrieve filename and path
    $file_path = "image_".$loop;
    $tmp_path = $form_data[$file_path]; // $form_data is an array of POST data and contains the file_path of the image in the tmp dir

    // Move file
    $destination_path = 'images/adverts/'.$advert->id;
    $success = move_uploaded_file($tmp_path, $destination_path);

}

但是, move_uploaded_file() 不起作用。查阅文档后,我可以看到 move_uploaded_file() 检查文件是否是使用 HTTP POST 上传的(确实如此)。可以肯定的是,我运行了一个快速测试来查看 is_uploaded_file() 是否在我上传的文件上返回 TRUE,但它没有。

is_uploaded_file() 如何判断文件是否已上传?我想知道当我来移动文件时,php是否已经忘记它已经上传了?还有其他原因我的文件不会通过吗?

非常感谢

4

1 回答 1

1

我想我已经深究了...

move_uploaded_file() 似乎只在 POST 数据发送到的函数中起作用。就我而言,我发送了两个单独的 POST 请求。第一个来自 dropzone.js,它将图像存储在 tmp 目录中。如果我在接收该 POST 请求的函数中运行了 is_uploaded_file(),它返回 TRUE。

但是,一旦上传到 tmp 目录,我就会在第二种形式的隐藏字段中插入路径。我试图在从第二种形式接收 POST 数据的函数中运行 move_uploaded_file() (它又使用 is_uploaded_file())。但是,由于该文件不是此 POST 数据的一部分(只是 tmp 目录的路径),is_uploaded_file() 然后返回 false。

我希望对某人有所帮助...

于 2013-08-04T16:03:26.080 回答