Я отправляю форму на страницу предварительного просмотра (форму), а затем окончательную отправку. У меня возникли проблемы с работой 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);
Вы уверены, что временный файл $_FILES['titleimage']['tmp_name']
все еще существует после отправки второй формы? Помните, что это временный файл. Я боюсь, что он живет только на время подачи первой формы (только до обработки запроса).
Итак, вы должны:
Как можно скорее (это означает, что на странице, которая получает первую форму, ваша страница предварительного просмотра фактически) вы сохраняете временный файл в своей папке с помощью move_uploaded_file()
.
Если пользователь подтверждает предварительный просмотр, вы перемещаете файл из каталога, в котором вы сохранили его на шаге 1, в его окончательную папку, используя функцию rename()
.
Если пользователь не подтверждает предварительный просмотр, вы удаляете его с помощью функции unlink()
.
Кроме того, как отметил Марк Б , вы должны взглянуть на безопасность своей логики предварительного просмотра . Передача путей и имен файлов в скрытом виде – это очень хороший способ помочь хакерам разбить вашу систему. Взгляните на сессии PHP (возможно, вы уже знаете), и подумайте о переносе этих путей из открытой формы в переменную сеанса.