|
|
|
| Написал небольшой скрипт, который загружает файл на сервер. Выбираю файл в форме, нажимаю submit, файл отправляется. Если после этого страницу обновить, то файл снова отправляется. Сделал в скрипте переадресацию на начальную страницу с формой, но теперь можно в браузере нажать "Назад" и "Обновить", что опять же, приводит к повторной загрузке. Как сделать, чтобы файл грузился только при нажатии submit? Меня больше интересует не готовое решение, а сама идея, так сказать, алгоритм. Хотя и от примера не откажусь :) | |
|
|
|
|
|
|
|
для: yuk
(22.04.2007 в 22:36)
| | Лишнее выкинешь)
<?php
// Проверяем директорию загрузки
if(!$_REQUST['dir']) $dir=getcwd();
?>
<body>
<h2><p><b> Форма для загрузки файлов на сервер</b></p></h2>
Максимальный размер загружаемого файла : 2Мб<br>
Загрузочная директория по умолчанию : <?php echo($dir);?>
<form aсtion="<?php echo $_SERVER['SCRIPT_NAME'];?>"
method="POST"
enctype="multipart/form-data">
<table width=100% border=0 cellpadding=5 cellspacing=2>
<tr valign=top>
<td><input type="file" name="filename"></td>
</tr>
<tr valign=top>
<td><input type="submit" value="Загрузить"></td>
</tr>
</table>
<br>
</form>
</body>
<?php
// Проверяем была загрузка или нет
if (!$_FILES['filename']['name'])
{
echo("Ожидание ввода загружаемого файла");
}
else
{
// Если загрузка была, то
// Проверяем размер загружаемого файла
if ($_FILES['filename']['size'] > 1024*2*1024)
{
echo("Размер файла превышает 2Мб");
exit;
}
// Из соображений безопасности проверяем загрузку по HTTP
if (is_uploaded_file($_FILES['filename']['tmp_name']))
{
// Если файл загружен средствами РНР, то переносим файл из временной директории
if (move_uploaded_file($_FILES['filename']['tmp_name'],
"$dir/".$_FILES['filename']['name']))
{
echo("Запрос обработан файлом : ".$_SERVER['SCRIPT_NAME']." <br>");
echo("Имя файла : ".$_FILES['filename']['name']." <br>");
echo("Размер файла : ".$_FILES['filename']['size']." <br>");
echo("Тип файла : ".$_FILES['filename']['type']." <br>");
echo("Файл успешно загружен в директорию : $dir <br>");
}
else
{
echo("Ошибка загрузки файла");
}
}
else
{
echo("Вниманмие: \"левый\" файл!!!");
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Valick
(22.04.2007 в 22:40)
| | Здесь та же самая проблема. Файл загружается, выдается вся информация. Но опять же, при обновлении страницы файл грузится повторно. | |
|
|
|
|
|
|
|
для: yuk
(22.04.2007 в 22:56)
| | Извиняюсь, не проверил (в Ослике в ифрейме у меня работало) | |
|
|
|
|
|
|
|
для: yuk
(22.04.2007 в 22:36)
| | при загрузке сделай
setcookie ('uploaded', 1);
и потом смотри, есть такая кука или нет | |
|
|
|
|
|
|
|
для: bronenos
(22.04.2007 в 22:58)
| | А если после этого отправить еще файл (по submit-у)? Он, похоже, не отправится. Или я ошибаюсь? | |
|
|
|
|
|
|
|
для: yuk
(22.04.2007 в 23:04)
| | Всё верно, не отправиться, записывай в куку имя файла, и проверяй. | |
|
|
|
|
|
|
|
для: Valick
(22.04.2007 в 23:09)
| | А вообще зачем вам это?
Если юзер загрузил файл, а потом изменил и хочет загрузить снова, это надо закрыть браузер, потом опять открыть (смотря на скока кукисы установите)... | |
|
|
|
|
|
|
|
для: yuk
(22.04.2007 в 23:04)
| | Кстати когда я скинул вам свой файл, я убрал одну строчку
Скрытое поле формы, щас попробую одну идею | |
|
|
|
|
|
|
|
для: Valick
(22.04.2007 в 23:18)
| | >А вообще зачем вам это?
Разрабатываю небольшую страничку с полем загрузки файла, и заметил такую особенность. На сервере файлы сохраняются с оригинальными именами, и получается, что вдруг пользователю стукнет в голову понажимать F5 - сервер начнет мусорится. | |
|
|
|
|
|
|
|
для: yuk
(22.04.2007 в 23:27)
| | понажимать F5 - сервер начнет мусорится
а мне кажеться будет перезаписываться один и тот же файл. | |
|
|
|
|
|
|
|
для: Valick
(22.04.2007 в 23:18)
| |
<?php
// Проверяем директорию загрузки
if(!$_REQUST['dir']) $dir=getcwd();
?>
<body>
<h2><p><b> Форма для загрузки файлов на сервер</b></p></h2>
Максимальный размер загружаемого файла : 2Мб<br>
Загрузочная директория по умолчанию : <?php echo($dir);?>
<form aсtion="<?php echo $_SERVER['SCRIPT_NAME'];?>"
method="POST"
enctype="multipart/form-data">
<input type="hidden" name="action" value="go">
<table width=100% border=0 cellpadding=5 cellspacing=2>
<tr valign=top>
<td><input type="file" name="filename"></td>
</tr>
<tr valign=top>
<td><input type="submit" value="Загрузить"></td>
</tr>
</table>
<br>
</form>
</body>
<?php
if (isset($_REQUEST['action']))
{
// Проверяем была загрузка или нет
if (!$_FILES['filename']['name'])
{
echo("Ожидание ввода загружаемого файла");
}
else
{
// Если загрузка была, то
// Проверяем размер загружаемого файла
if ($_FILES['filename']['size'] > 1024*2*1024)
{
echo("Размер файла превышает 2Мб");
exit;
}
// Из соображений безопасности проверяем загрузку по HTTP
if (is_uploaded_file($_FILES['filename']['tmp_name']))
{
// Если файл загружен средствами РНР, то переносим файл из временной директории
if (move_uploaded_file($_FILES['filename']['tmp_name'],
"$dir/".$_FILES['filename']['name']))
{
echo("Запрос обработан файлом : ".$_SERVER['SCRIPT_NAME']." <br>");
echo("Имя файла : ".$_FILES['filename']['name']." <br>");
echo("Размер файла : ".$_FILES['filename']['size']." <br>");
echo("Тип файла : ".$_FILES['filename']['type']." <br>");
echo("Файл успешно загружен в директорию : $dir <br>");
}
else
{
echo("Ошибка загрузки файла");
}
}
else
{
echo("Вниманмие: \"левый\" файл!!!");
}
}
}
?>
|
Вот так на обновление страницы не реагирует, только на submit.
А если нажать назад, то в Ослике всё ровно, а в опере остаётся имя файла, наверное нужен ЯваСкрипт)) | |
|
|
|
|
|
|
|
для: Valick
(22.04.2007 в 23:30)
| | Этот пример у меня на обновление тоже реагирует. А на счет перезаписи - наверно я не так выразился. Оригинальное имя файла - я имел ввиду не как у юзера он называется. Это имя генерируется на сервере типа как по счетчику (на случай, если вдруг с нескольких мест придут файлы с одинаковымы именами).
Ну да ладно, может и не стоит из этого делать проблему. Но интерес остался.
Появилась мысль генерировать имена исходя из исходного имени файла и времени его создания. Пусть тогда перезаписываются. | |
|
|
|
|
|
|
|
для: yuk
(23.04.2007 в 00:03)
| | Этот пример у меня на обновление тоже реагирует
Странно, ну да ладна значит мне уже пора спать, а то котелок не варит)
У вас браузер какой? Сейчас проверил в Мозиле, действительно реакция на обновление положительная. | |
|
|
|
|
|
|
|
для: yuk
(23.04.2007 в 00:03)
| | чтобы исключить передачу данных post-формы при обновлении страницы, нужно при приеме данных сделать переадресацию на страницу методом GET. header("Location: http://сайт/путь/файл"); | |
|
|
|