move_uploaded_file не работает после страницы предварительного просмотра

Я отправляю форму на страницу предварительного просмотра (форму), а затем окончательную отправку. У меня возникли проблемы с работой 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); 

Related of "move_uploaded_file не работает после страницы предварительного просмотра"

Вы уверены, что временный файл $_FILES['titleimage']['tmp_name'] все еще существует после отправки второй формы? Помните, что это временный файл. Я боюсь, что он живет только на время подачи первой формы (только до обработки запроса).

Итак, вы должны:

  1. Как можно скорее (это означает, что на странице, которая получает первую форму, ваша страница предварительного просмотра фактически) вы сохраняете временный файл в своей папке с помощью move_uploaded_file() .

  2. Если пользователь подтверждает предварительный просмотр, вы перемещаете файл из каталога, в котором вы сохранили его на шаге 1, в его окончательную папку, используя функцию rename() .

  3. Если пользователь не подтверждает предварительный просмотр, вы удаляете его с помощью функции unlink() .


Кроме того, как отметил Марк Б , вы должны взглянуть на безопасность своей логики предварительного просмотра . Передача путей и имен файлов в скрытом виде – это очень хороший способ помочь хакерам разбить вашу систему. Взгляните на сессии PHP (возможно, вы уже знаете), и подумайте о переносе этих путей из открытой формы в переменную сеанса.