0

我正在将表单提交到预览页面(表单),然后最终提交。我无法让 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);
4

1 回答 1

1

您确定$_FILES['titleimage']['tmp_name']提交第二个表单后临时文件仍然存在吗?请记住,这是一个临时文件。恐怕它只存在于提交第一个表单的时间(直到处理请求)。

所以,你应该:

  1. 尽快(这意味着,在接收第一个表单的页面中,实际上是您的预览页面)您将临时文件保存在您的文件夹中,使用move_uploaded_file().

  2. 如果用户确认预览,则使用该功能将文件从您在步骤1中保存的目录移动到其最终文件夹rename()

  3. 如果用户不确认预览,则使用unlink()函数将其删除。


另外,正如Marc B指出的那样,您应该查看预览保存逻辑的安全性。在隐藏的表单字段中传递路径和文件名是帮助黑客破坏您的系统的好方法。看看PHP Sessions(也许你已经知道了),并考虑将这些路径从公共表单移动到会话变量。

于 2012-06-05T14:25:42.947 回答