Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузка файлов на сервер не удается
 
 автор: Vladim   (09.05.2007 в 13:07)   письмо автору
 
 

<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>

   
 
 автор: cheops   (09.05.2007 в 14:21)   письмо автору
 
   для: 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);
...
?>

   
 
 автор: Vladim   (09.05.2007 в 16:57)   письмо автору
 
   для: cheops   (09.05.2007 в 14:21)
 

выдает синтаксическую ошибку, повсякому пробывал.

   
 
 автор: ddhvvn   (09.05.2007 в 17:44)   письмо автору
 
   для: Vladim   (09.05.2007 в 16:57)
 

Значит опечатка!

   
 
 автор: cheops   (10.05.2007 в 13:15)   письмо автору
 
   для: Vladim   (09.05.2007 в 16:57)
 

Как выглядит сообщение об ошибке?

   
 
 автор: Valick   (09.05.2007 в 18:21)   письмо автору
 
   для: 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:38)   письмо автору
 
   для: 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:50)   письмо автору
 
   для: Valick   (09.05.2007 в 18:38)
 

Всё понял, просто у вас скорее всего нет папки tmp в каталоге со скриптом(рядышком с файлом upload.php) Добавил папрку и вот уже ваш скрипт у меня не ругается.
Но всётаки лучше использовать функцию move_uploaded_file вместо copy.

   
 
 автор: mr Bin   (09.05.2007 в 18:57)   письмо автору
 
   для: Valick   (09.05.2007 в 18:50)
 

Чисто для интереса:
А чем отличаются move_uploaded_file и copy?

   
 
 автор: Valick   (09.05.2007 в 19:04)   письмо автору
 
   для: mr Bin   (09.05.2007 в 18:57)
 

Вопервых она не копирует, а перемещает файл.
Во-вторых она проверяет, что этот файл был действительно загружен.

   
 
 автор: Trianon   (09.05.2007 в 19:38)   письмо автору
 
   для: Valick   (09.05.2007 в 19:04)
 

По большому счету копирование или перемещение - для файла, который если останется, все равно будет вытерт по завершении скрипта - разница невелика.
Важнее другое. функция copy при некоторых настройках безопасности может и не пройти.
move_uploaded_file - пройдет всегда.

   
 
 автор: mr Bin   (09.05.2007 в 19:56)   письмо автору
 
   для: Trianon   (09.05.2007 в 19:38)
 

спасибо.

   
 
 автор: Valick   (09.05.2007 в 20:23)   письмо автору
 
   для: Trianon   (09.05.2007 в 19:38)
 

для файла, который если останется, все равно будет вытерт по завершении скрипта - разница невелика
По отношению к данному скрипту, да - разницы нет, но в целом copy всётаки копирует

   
 
 автор: Trianon   (09.05.2007 в 20:35)   письмо автору
 
   для: Valick   (09.05.2007 в 20:23)
 

Несомненно :)

Более того, оригинальным файлом до завершения скрипта еще можно воспользоваться (если права позволяют)

   
 
 автор: Vladim   (09.05.2007 в 21:44)   письмо автору
 
   для: 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
Ошибка загрузки файла

   
 
 автор: Trianon   (09.05.2007 в 22:43)   письмо автору
 
   для: Vladim   (09.05.2007 в 21:44)
 

Из Вашего ответа не видно чему равно $dir .
А диагностика говорит, что Вы пытаетесь загрузить файл куда-то в чужое место.

   
 
 автор: Valick   (09.05.2007 в 22:51)   письмо автору
 
   для: Trianon   (09.05.2007 в 22:43)
 

Каюсь $dir мой, просто забыл заменить на тот же tmp/, но даже с ним у меня ошибки в этом скрипте не выдаёт... но у меня это дома под Виндой, а там реальный сервер

   
 
 автор: Valick   (09.05.2007 в 22:48)   письмо автору
 
   для: Vladim   (09.05.2007 в 21:44)
 

А safe_mode на сервере on или off?

P.S. Это к тому, что раньше всё загружало, а теперь нет.

   
 
 автор: cheops   (10.05.2007 в 13:20)   письмо автору
 
   для: Vladim   (09.05.2007 в 21:44)
 

У вас $dir является пустой строкой и скрипт пытается записать файл непосредственно в root - /button4C.jpg - это везде будет запрещено. Проследите, чтобы переменная $dir принимала адекватное значение.

   
 
 автор: Vladim   (10.05.2007 в 17:22)   письмо автору
 
   для: cheops   (10.05.2007 в 13:20)
 

Да, уже все работает, но почему то этих файлов сразу после загрузки не видно на сервере, нужно подождать 5 мин.
Спасибо

   
 
 автор: cheops   (11.05.2007 в 13:30)   письмо автору
 
   для: Vladim   (10.05.2007 в 17:22)
 

А вы как смотрите, через FTP или при помощи скрипта?

PS Бывают хитрые рейд-контроллеры, которые держат файлы в буфере, а записывают реально их на жёсткий диск лишь спустя некоторое время.

   
 
 автор: Vladim   (11.05.2007 в 15:52)   письмо автору
 
   для: cheops   (11.05.2007 в 13:30)
 

Я смотрю через FTP, скорее всего это так как вы говорите. Спасибо

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования