我正在将表单提交到预览页面(表单),然后提交最终提交。我无法使move_uploaded_file工作。我该如何解决这个问题?当我检查目录时,那里没有文件。
预览页面
$tmpname = $_FILES['titleimage']['tmp_name'];
$imagefile = $_FILES['titleimage']['name'];
$filename = basename($imagefile);
$imagename = dirname(__FILE__).'/avatar/'.$filename;
echo "<form enctype='multipart/form-data' id='submitpreview' action='/upload' method='POST'>
<input type='hidden' name='image' value='$tmpname' readonly />
<input type='hidden' name='imagedir' value='$imagename' readonly />";
//other code
echo "<div id='preview-submit-button'><a>Submit</a></div>
</form>";
上传页面
$image = $_POST['image'];
$directory = $_POST['imagedir'];
move_uploaded_file($image,$directory);
答案 0 :(得分:1)
在提交第二个表单后,您确定临时文件$_FILES['titleimage']['tmp_name']
是否仍然存在?请记住,这是一个临时文件。我担心生活仅在第一个表单提交时(直到请求被处理)。
所以,你应该:
尽快(也就是说,在接收第一个表单的页面中,实际上是您的预览页面),您可以使用 move_uploaded_file()
将临时文件保存在您的文件夹中强>
如果用户确认预览,则将文件从步骤 1 中保存到的目录移动到权威文件夹,使用 rename()
功能。
如果用户未确认预览,则使用 unlink()
功能将其删除。
另外,正如 Marc B 所指出的那样,您应该了解预览 - 保存逻辑的安全性。在隐藏表单字段中传递路径和文件名是帮助黑客破坏系统的一种非常好的方法。看看 PHP Sessions (也许您已经知道),并考虑将这些路径从公共表单移动到会话变量。