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

Форум PHP

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

 

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

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

тема: Не загружается картинка на сервер
 
 автор: lElectroHardl   (25.02.2011 в 21:46)   письмо автору
 
 

Есть обычная форма, через которую на сервер (вирт. хостинг) было залито не одну сотню картинок. Но вот проблема! Из них около десятка просто не хотят проходить функцию copy();. Никаких ошибок, ни каких ничего. Просто не работает и все.
Что не так?

  Ответить  
 
 автор: sim5   (25.02.2011 в 21:51)   письмо автору
 
   для: lElectroHardl   (25.02.2011 в 21:46)
 

Вообще-то функцией copy() при загрузке файлов на сервер пользоваться не рекомендуется, а использовать для этого move_uploaded_file().
А вы проверяете ошибки при загрузке?

  Ответить  
 
 автор: lElectroHardl   (25.02.2011 в 22:06)   письмо автору
 
   для: sim5   (25.02.2011 в 21:51)
 

Ошибок нет. щас проверим функцию.
А почему не рекомендуется? И где рекомендуется?

  Ответить  
 
 автор: sim5   (25.02.2011 в 22:47)   письмо автору
 
   для: lElectroHardl   (25.02.2011 в 22:06)
 

Разработчиками РНР, а почему можно прочитать в официальном руководстве.
copy() использовалась до версии 4.
А ошибки, которые могут возникать при загрузке файлов, так это не только "не могу записать файл....", но еще надо самому проверять ошибки массива FILES.

  Ответить  
 
 автор: Lelik   (25.02.2011 в 21:55)   письмо автору
 
   для: lElectroHardl   (25.02.2011 в 21:46)
 

у меня в разработке в 90% случаев не работала загрузка из-за упущения в хтмле

<form action="" enctype="multipart/form-data" method="post">

  Ответить  
 
 автор: lElectroHardl   (25.02.2011 в 22:06)   письмо автору
 
   для: Lelik   (25.02.2011 в 21:55)
 

Я ж сказал, я уже заливал (через эту форму) несколько сот фото. И да, спасибо, этот параметр присутствует.

  Ответить  
 
 автор: Trianon   (25.02.2011 в 22:10)   письмо автору
 
   для: lElectroHardl   (25.02.2011 в 21:46)
 

>Есть обычная форма, через которую на сервер (вирт. хостинг) было залито не одну сотню картинок. Но вот проблема! Из них около десятка просто не хотят проходить функцию copy();.

Есл Вы убеждены, что проблема именно в ней, очевидно, всё определяется параметрами, которые Вы этой функции передаете.


>Никаких ошибок, ни каких ничего. Просто не работает и все.
>Что не так?

никаких ошибок обычно означает, что диагностика ошибок заблокирована.

  Ответить  
 
 автор: lElectroHardl   (25.02.2011 в 22:31)   письмо автору
 
   для: Trianon   (25.02.2011 в 22:10)
 

В том то и дело, что ошибок нет.

  Ответить  
 
 автор: Trianon   (25.02.2011 в 22:32)   письмо автору
 
   для: lElectroHardl   (25.02.2011 в 22:31)
 

Нет.
Дело не в этом. А в параметрах.

  Ответить  
 
 автор: lElectroHardl   (25.02.2011 в 22:45)   письмо автору
1.1 Кб
 
   для: Trianon   (25.02.2011 в 22:32)
 

В каком параметре?
Как может одна фото (даже больше размером чем не загружаемая картинка) загружаться, а вторая картинка нет?
Я не понимаю, что вы мне пытаетесь объяснить :).

Прикрепил файл скрипта.

  Ответить  
 
 автор: Trianon   (25.02.2011 в 23:12)   письмо автору
 
   для: lElectroHardl   (25.02.2011 в 22:45)
 

>В каком параметре?
Я написал - если дело именно в copy. Соответственно в параметрах copy() . Их у нее два.

>Как может одна фото (даже больше размером чем не загружаемая картинка) загружаться, а вторая картинка нет?

Не поверите - легко.
Более того, даже одна и та же картинка может сей момент загружаться, а три секунды спустя - нет.

>Прикрепил файл скрипта

Функции copy() я в ней не обнаружил.

Зато обнаружил достаточно других огрехов.
В частности:
а) использование расширения файла из данных клиента, без жесткого контроля по списку допустимых.
б) применение нераспределенного первичного ключа - значения id , которое еще не выдано INSERT-AUTO_INCREMENT-механизмом..

Так что полагаю, проблема не только в параметрах copy().

  Ответить  
 
 автор: lElectroHardl   (26.02.2011 в 16:24)   письмо автору
 
   для: Trianon   (25.02.2011 в 23:12)
 

а) а разве
preg_match("/^[image\/jpeg|image\/png|image\/gif]+$/", $imageinfo["mime"])
этого не проверяет?
б) не понял.

  Ответить  
 
 автор: Trianon   (26.02.2011 в 16:35)   письмо автору
 
   для: lElectroHardl   (26.02.2011 в 16:24)
 

а) этот код проверяет тип переданного файла, сообщенный клиентом, а не его расширение.

А при формировании имени Вы используете именно рашширение (то есть часть имени) , а не тип.


б) вот эта строка. $last_foto = $last_foto["id"] + 1;

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

  Ответить  
 
 автор: lElectroHardl   (26.02.2011 в 16:48)   письмо автору
 
   для: Trianon   (26.02.2011 в 16:35)
 

б) С чего это оно получит одно и тоже значение? Я же каждый раз по новой обращаюсь к базе, в которой каждый раз изменяется значение id.

  Ответить  
 
 автор: Trianon   (26.02.2011 в 16:54)   письмо автору
 
   для: lElectroHardl   (26.02.2011 в 16:48)
 

Потому что php (и SQL кстати тоже) может выполнять потоки запросов параллельно и одновременно.
Потому что в момент исполнения процитированного оператора скрипта - в таблице запись сама по себе не появляется.
А до момента как будет выполнен INSERT (в этом запросе) - в другом запросе того же скрипта нито не мешает выполниться такому же оператору еще раз.
Да, записей будет добавлено несколько. Но файлы, отвечающие некоторым из них, смогут получить равные значения (отличающиеся от id соответствующих записей )

  Ответить  
 
 автор: lElectroHardl   (28.02.2011 в 18:24)   письмо автору
 
   для: Trianon   (26.02.2011 в 16:54)
 

Не подскажите, как это исправить?

  Ответить  
 
 автор: neadekvat   (28.02.2011 в 18:40)   письмо автору
 
   для: lElectroHardl   (28.02.2011 в 18:24)
 

Например, генерируйте уникальное значение изображения, никак не завязанное на id. Ну, и храните это значения в отдельном столбце.

  Ответить  
 
 автор: Trianon   (28.02.2011 в 18:44)   письмо автору
 
   для: lElectroHardl   (28.02.2011 в 18:24)
 

сперва следует добавить строку в БД , потом взять id (mysql_insert_id() ) и уже его использовать для нужд.

  Ответить  
 
 автор: lElectroHardl   (28.02.2011 в 21:24)   письмо автору
 
   для: Trianon   (28.02.2011 в 18:44)
 

Ага. Пасиб.

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

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