我有一个页面,允许用户在我的网站上发布广告。此页面允许他们上传相关产品的多张照片。
我目前有两种形式。第一个处理产品的细节,而第二个是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已经忘记它已被上传?还有其他原因我的档案不会通过吗?
非常感谢
答案 0 :(得分: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。
我希望能帮到某人......