|
|
|
| <html>
Подскажите пожалуйста в чем дело, после загрузки выводится информация о файле и то что он успешно загружен, но на самом деле его нигде нет
Спасибо заранее
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<tr><td><center><input type="file" name="filename"><br><br>
<input type="submit" value="Загрузить">
</form>
</body>
</html>
и стандартный скрипт загрузки
<html>
<head>
<title>Результат загрузки файла</title>
</head>
<body>
<?php
if($_FILES["filename"]["size"] > 1024*3*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}
if(copy($_FILES["filename"]["tmp_name"],
"tmp/".$_FILES["filename"]["name"]))
{
echo("Файл успешно загружен <br>");
echo("Характеристики файла: <br>");
echo("Имя файла: ");
echo($_FILES["filename"]["name"]);
echo("<br>Размер файла: ");
echo($_FILES["filename"]["size"]);
echo("<br>Каталог для загрузки: ");
echo($_FILES["filename"]["tmp_name"]);
echo("<br>Тип файла: ");
echo($_FILES["filename"]["type"]);
} else {
echo("Ошибка загрузки файла");
}
?>
</body>
</html> | |
|
|
|
|
|
|
|
для: Vladim
(09.05.2007 в 13:07)
| | Установите ему ещё права при помощи функции chmod() - скрипт закачивается от имени apache, а не от вашего и вы его можете не видеть
<?php
...
if(copy($_FILES["filename"]["tmp_name"],
"tmp/".$_FILES["filename"]["name"]))
{
chmod("tmp/".$_FILES["filename"]["name"], 0644);
...
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(09.05.2007 в 14:21)
| | выдает синтаксическую ошибку, повсякому пробывал. | |
|
|
|
|
|
|
|
для: Vladim
(09.05.2007 в 16:57)
| | Значит опечатка! | |
|
|
|
|
|
|
|
для: Vladim
(09.05.2007 в 16:57)
| | Как выглядит сообщение об ошибке? | |
|
|
|
|
|
|
|
для: Vladim
(09.05.2007 в 13:07)
| | где вы заставляете скрипт работать? дома или на реальном сервере? (вряд ли на реальном)
Если дома то проверте в php.ini строчку upload_tmp_dir, если в ней ничего нет, то допишите upload_tmp_dir =\tmp, заодно проверте upload_max_filesize по умолчанию он 2 Мб (а у вас 3Мб), и наконец не поленитесь посмотреть file_uploads, ну уж совсем на крайний случай, вдруг =Офф. | |
|
|
|
|
|
|
|
для: Valick
(09.05.2007 в 18:21)
| | Попробуйте вот так:
<?php
if($_FILES["filename"]["size"] > 1024*3*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}
if (move_uploaded_file($_FILES['filename']['tmp_name'],"$dir/".$_FILES['filename']['name']))
{
echo("Файл успешно загружен <br>");
echo("Характеристики файла: <br>");
echo("Имя файла: ");
echo($_FILES["filename"]["name"]);
echo("<br>Размер файла: ");
echo($_FILES["filename"]["size"]);
echo("<br>Каталог для загрузки: ");
echo($_FILES["filename"]["tmp_name"]);
echo("<br>Тип файла: ");
echo($_FILES["filename"]["type"]);
} else {
echo("Ошибка загрузки файла");
}
?>
|
| |
|
|
|
|
|
|
|
для: Valick
(09.05.2007 в 18:38)
| | Всё понял, просто у вас скорее всего нет папки tmp в каталоге со скриптом(рядышком с файлом upload.php) Добавил папрку и вот уже ваш скрипт у меня не ругается.
Но всётаки лучше использовать функцию move_uploaded_file вместо copy. | |
|
|
|
|
|
|
|
для: Valick
(09.05.2007 в 18:50)
| | Чисто для интереса:
А чем отличаются move_uploaded_file и copy? | |
|
|
|
|
|
|
|
для: mr Bin
(09.05.2007 в 18:57)
| | Вопервых она не копирует, а перемещает файл.
Во-вторых она проверяет, что этот файл был действительно загружен. | |
|
|
|
|
|
|
|
для: Valick
(09.05.2007 в 19:04)
| | По большому счету копирование или перемещение - для файла, который если останется, все равно будет вытерт по завершении скрипта - разница невелика.
Важнее другое. функция copy при некоторых настройках безопасности может и не пройти.
move_uploaded_file - пройдет всегда. | |
|
|
|
|
|
|
|
для: Trianon
(09.05.2007 в 19:38)
| | спасибо. | |
|
|
|
|
|
|
|
для: Trianon
(09.05.2007 в 19:38)
| | для файла, который если останется, все равно будет вытерт по завершении скрипта - разница невелика
По отношению к данному скрипту, да - разницы нет, но в целом copy всётаки копирует | |
|
|
|
|
|
|
|
для: Valick
(09.05.2007 в 20:23)
| | Несомненно :)
Более того, оригинальным файлом до завершения скрипта еще можно воспользоваться (если права позволяют) | |
|
|
|
|
|
|
|
для: Trianon
(09.05.2007 в 20:35)
| | Скрипт на сервере, папка tmp есть,
раньше все нормально загружало, а сейчас три разных скрипта пробывал и не один не работает, права выставил папкам, что нужно не пойму.
а вот этот скрипт
<?php
if($_FILES["filename"]["size"] > 1024*3*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}
if (move_uploaded_file($_FILES['filename']['tmp_name'],"$dir/".$_FILES['filename']['name']))
{
echo("Файл успешно загружен <br>");
echo("Характеристики файла: <br>");
echo("Имя файла: ");
echo($_FILES["filename"]["name"]);
echo("<br>Размер файла: ");
echo($_FILES["filename"]["size"]);
echo("<br>Каталог для загрузки: ");
echo($_FILES["filename"]["tmp_name"]);
echo("<br>Тип файла: ");
echo($_FILES["filename"]["type"]);
} else {
echo("Ошибка загрузки файла");
}
?>
выдает следующее:
Warning: move_uploaded_file(): open_basedir restriction in effect. File(/button4C.jpg) is not within the allowed path(s): (/httpdocs:/tmp) in /httpdocs/upload.php on line 13
Ошибка загрузки файла | |
|
|
|
|
|
|
|
для: Vladim
(09.05.2007 в 21:44)
| | Из Вашего ответа не видно чему равно $dir .
А диагностика говорит, что Вы пытаетесь загрузить файл куда-то в чужое место. | |
|
|
|
|
|
|
|
для: Trianon
(09.05.2007 в 22:43)
| | Каюсь $dir мой, просто забыл заменить на тот же tmp/, но даже с ним у меня ошибки в этом скрипте не выдаёт... но у меня это дома под Виндой, а там реальный сервер | |
|
|
|
|
|
|
|
для: Vladim
(09.05.2007 в 21:44)
| | А safe_mode на сервере on или off?
P.S. Это к тому, что раньше всё загружало, а теперь нет. | |
|
|
|
|
|
|
|
для: Vladim
(09.05.2007 в 21:44)
| | У вас $dir является пустой строкой и скрипт пытается записать файл непосредственно в root - /button4C.jpg - это везде будет запрещено. Проследите, чтобы переменная $dir принимала адекватное значение. | |
|
|
|
|
|
|
|
для: cheops
(10.05.2007 в 13:20)
| | Да, уже все работает, но почему то этих файлов сразу после загрузки не видно на сервере, нужно подождать 5 мин.
Спасибо | |
|
|
|
|
|
|
|
для: Vladim
(10.05.2007 в 17:22)
| | А вы как смотрите, через FTP или при помощи скрипта?
PS Бывают хитрые рейд-контроллеры, которые держат файлы в буфере, а записывают реально их на жёсткий диск лишь спустя некоторое время. | |
|
|
|
|
|
|
|
для: cheops
(11.05.2007 в 13:30)
| | Я смотрю через FTP, скорее всего это так как вы говорите. Спасибо | |
|
|
|