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

Форум PHP

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

 

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

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

тема: Загрузка файлов на сайт
 
 автор: (Sandr)   (12.06.2011 в 21:17)   письмо автору
 
 

Помогите решить проблему пжл..

Есть форма

<form enctype="multipart/form-data" action="up.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Путь к файлу: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

А это файл up.php

<?php
$uploaddir = './up/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$_FILES['userfile']['name'])) {
print "Загружено!";
} else {
print "Возникла ошибка((";
}
echo "Информация о загруженном на сервер файле: >";
echo "Оригинальное имя загруженного файла: ".$_FILES['userfile']['name'];
echo "<p>Mime-тип загруженного файла: ".$_FILES['userfile']['type'];
echo "<p>Размер загруженного файла в байтах: ".$_FILES['userfile']['size'];
echo "<p>Временное имя файла: ".$_FILES['userfile']['tmp_name']."</p>";
?>

Пробую загрузить в уже созданный каталог тхт-файл - загрузился. Пробую загрузить картинку - пишет "Возникла ошибка".

  Ответить  
 
 автор: (Sandr)   (12.06.2011 в 21:20)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:17)
 

И после загрузки тхт-файла есго имя(если оно на кирилице) перекодируется в неизвестную кодировку. Можете сказать почему?

  Ответить  
 
 автор: cheops   (12.06.2011 в 21:21)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:20)
 

Где дело происходит? На хостинге?

  Ответить  
 
 автор: (Sandr)   (12.06.2011 в 21:22)   письмо автору
 
   для: cheops   (12.06.2011 в 21:21)
 

Нет. На денвере.

  Ответить  
 
 автор: cheops   (12.06.2011 в 21:27)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:22)
 

Вообще это странно, денвер должен без проблем оперировать русскими именами под Windows.

  Ответить  
 
 автор: cheops   (12.06.2011 в 21:20)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:17)
 

Имя изображения английскими буквами набрано?

  Ответить  
 
 автор: (Sandr)   (12.06.2011 в 21:23)   письмо автору
 
   для: cheops   (12.06.2011 в 21:20)
 

Да. К примеру "x_c4289722.jpg"

  Ответить  
 
 автор: cheops   (12.06.2011 в 21:26)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:23)
 

Лучше все-таки русские символы перекодировать в транслит.

  Ответить  
 
 автор: (Sandr)   (12.06.2011 в 21:30)   письмо автору
 
   для: cheops   (12.06.2011 в 21:26)
 

Да кодировка, это ещё по беды.. Меня больше волнует, почему файл не грузится..

  Ответить  
 
 автор: (Sandr)   (12.06.2011 в 21:31)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:30)
 

Это может быть из-за того, что сама форма расположена в switch'е ?

  Ответить  
 
 автор: cheops   (12.06.2011 в 21:36)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:31)
 

Маловероятно, если форма отображается и позволяет вам отправить файл на сервер, дальше она участия в его судьбе не принимает.

  Ответить  
 
 автор: cheops   (12.06.2011 в 21:35)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:30)
 

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

  Ответить  
 
 автор: (Sandr)   (12.06.2011 в 21:38)   письмо автору
 
   для: cheops   (12.06.2011 в 21:35)
 

Добавил это
if(is_uploaded_file($_FILES['userfile']['tmp_name']))
{echo 'Загружен!';} else {echo 'Не загружен';}

Выдает, что не загружен.

  Ответить  
 
 автор: cheops   (12.06.2011 в 22:04)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 21:38)
 

А размер файла большой? Не может он превышать 30Кб (это ограничение указано у вас с HTML-форме)?

  Ответить  
 
 автор: (Sandr)   (12.06.2011 в 22:19)   письмо автору
 
   для: cheops   (12.06.2011 в 22:04)
 

Точно! Я думал там ограничение в мб указывается) Спасибо. Теперь всё норм)

  Ответить  
 
 автор: (Sandr)   (12.06.2011 в 23:12)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 22:19)
 

Ещё один вопрос, Решил сделать несколько инпутов, т.е.
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>
<input name="userfile[]" type="file"><br>

Но, что нужно изменить с самом скрипте, чтоб он загружал все файлы?

  Ответить  
 
 автор: cheops   (13.06.2011 в 00:08)   письмо автору
 
   для: (Sandr)   (12.06.2011 в 23:12)
 

Сделать цикл обхода массива $_FILES['userfile']['tmp_name'], а к самим значениям обращаться через $_FILES['userfile']['tmp_name'][$i], где $i - значение от 0 до n - 1, где n - количество input-элементов типа type.

  Ответить  
 
 автор: (Sandr)   (13.06.2011 в 13:19)   письмо автору
 
   для: cheops   (13.06.2011 в 00:08)
 

Спасибо, получилось)

  Ответить  
 
 автор: (Sandr)   (14.06.2011 в 12:46)   письмо автору
 
   для: cheops   (13.06.2011 в 00:08)
 

Выложил на хост этот скрипт, не загружает..

индекс.пхп
echo '<form enctype="multipart/form-data" action="up.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="999999999999999999">
Путь к файлу: <br>
<input name="userfile" type="file"><br>
<input type="submit" value="Send File">
</form>';


юп.пхп

$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/up/';
//$uploaddir = 'up/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$_FILES['userfile']['name'])) {
print "Загружено!";
} else {
print "ВНЕЗАПНО!!!!!Возникла ошибка((<p>";
}
echo "<h3>Информация о загруженном на сервер файле: </h3>";
echo "<p><b>Оригинальное имя загруженного файла: ".$_FILES['userfile']['name']."</b></p>";
echo "<p><b>Mime-тип загруженного файла: ".$_FILES['userfile']['type']."</b></p>";
echo "<p><b>Размер загруженного файла в байтах: ".$_FILES['userfile']['size']."</b></p>";
echo "<p><b>Временное имя файла: ".$_FILES['userfile']['tmp_name']."</b></p>";

Не пойму в чём проблема. На денвере всё прекрасно работает.

  Ответить  
 
 автор: cheops   (14.06.2011 в 12:48)   письмо автору
 
   для: (Sandr)   (14.06.2011 в 12:46)
 

Права доступа на папку up выставлены (0777)?

  Ответить  
 
 автор: (Sandr)   (14.06.2011 в 12:55)   письмо автору
 
   для: cheops   (14.06.2011 в 12:48)
 

Выставлял 777, но я так понимаю, что это тоже самое что и 0777

  Ответить  
 
 автор: (Sandr)   (14.06.2011 в 13:22)   письмо автору
 
   для: cheops   (14.06.2011 в 12:48)
 

Изменил move_uploaded_file на copy и все норм стало. Скажите, если убрать поле <input type="hidden" name="MAX_FILE_SIZE" value="99999999999999999999"> то какие ограничения будут на размер файлов?

  Ответить  
 
 автор: cheops   (14.06.2011 в 13:43)   письмо автору
 
   для: (Sandr)   (14.06.2011 в 13:22)
 

Ограничения будут задаваться директивами post_max_size и upload_max_filesize конфигурационного файла php.ini, посмотреть их значения можно через отчет функции phpinfo().

  Ответить  
Rambler's Top100
вверх

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