|
|
|
| Есть обычная форма, через которую на сервер (вирт. хостинг) было залито не одну сотню картинок. Но вот проблема! Из них около десятка просто не хотят проходить функцию copy();. Никаких ошибок, ни каких ничего. Просто не работает и все.
Что не так? | |
|
|
|
|
|
|
|
для: lElectroHardl
(25.02.2011 в 21:46)
| | Вообще-то функцией copy() при загрузке файлов на сервер пользоваться не рекомендуется, а использовать для этого move_uploaded_file().
А вы проверяете ошибки при загрузке? | |
|
|
|
|
|
|
|
для: sim5
(25.02.2011 в 21:51)
| | Ошибок нет. щас проверим функцию.
А почему не рекомендуется? И где рекомендуется? | |
|
|
|
|
|
|
|
для: lElectroHardl
(25.02.2011 в 22:06)
| | Разработчиками РНР, а почему можно прочитать в официальном руководстве.
copy() использовалась до версии 4.
А ошибки, которые могут возникать при загрузке файлов, так это не только "не могу записать файл....", но еще надо самому проверять ошибки массива FILES. | |
|
|
|
|
|
|
|
для: lElectroHardl
(25.02.2011 в 21:46)
| | у меня в разработке в 90% случаев не работала загрузка из-за упущения в хтмле
<form action="" enctype="multipart/form-data" method="post">
|
| |
|
|
|
|
|
|
|
для: Lelik
(25.02.2011 в 21:55)
| | Я ж сказал, я уже заливал (через эту форму) несколько сот фото. И да, спасибо, этот параметр присутствует. | |
|
|
|
|
|
|
|
для: lElectroHardl
(25.02.2011 в 21:46)
| | >Есть обычная форма, через которую на сервер (вирт. хостинг) было залито не одну сотню картинок. Но вот проблема! Из них около десятка просто не хотят проходить функцию copy();.
Есл Вы убеждены, что проблема именно в ней, очевидно, всё определяется параметрами, которые Вы этой функции передаете.
>Никаких ошибок, ни каких ничего. Просто не работает и все.
>Что не так?
никаких ошибок обычно означает, что диагностика ошибок заблокирована. | |
|
|
|
|
|
|
|
для: Trianon
(25.02.2011 в 22:10)
| | В том то и дело, что ошибок нет. | |
|
|
|
|
|
|
|
для: lElectroHardl
(25.02.2011 в 22:31)
| | Нет.
Дело не в этом. А в параметрах. | |
|
|
|
|
 1.1 Кб |
|
|
для: Trianon
(25.02.2011 в 22:32)
| | В каком параметре?
Как может одна фото (даже больше размером чем не загружаемая картинка) загружаться, а вторая картинка нет?
Я не понимаю, что вы мне пытаетесь объяснить :).
Прикрепил файл скрипта. | |
|
|
|
|
|
|
|
для: lElectroHardl
(25.02.2011 в 22:45)
| | >В каком параметре?
Я написал - если дело именно в copy. Соответственно в параметрах copy() . Их у нее два.
>Как может одна фото (даже больше размером чем не загружаемая картинка) загружаться, а вторая картинка нет?
Не поверите - легко.
Более того, даже одна и та же картинка может сей момент загружаться, а три секунды спустя - нет.
>Прикрепил файл скрипта
Функции copy() я в ней не обнаружил.
Зато обнаружил достаточно других огрехов.
В частности:
а) использование расширения файла из данных клиента, без жесткого контроля по списку допустимых.
б) применение нераспределенного первичного ключа - значения id , которое еще не выдано INSERT-AUTO_INCREMENT-механизмом..
Так что полагаю, проблема не только в параметрах copy(). | |
|
|
|
|
|
|
|
для: Trianon
(25.02.2011 в 23:12)
| | а) а разве
preg_match("/^[image\/jpeg|image\/png|image\/gif]+$/", $imageinfo["mime"])
| этого не проверяет?
б) не понял. | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.02.2011 в 16:24)
| | а) этот код проверяет тип переданного файла, сообщенный клиентом, а не его расширение.
А при формировании имени Вы используете именно рашширение (то есть часть имени) , а не тип.
б) вот эта строка. $last_foto = $last_foto["id"] + 1;
В момент выполнения id еще не создан в таблице.
При одновременном выполнении нескольких схожих запросов, эта переменная может получить одно и то же число в качестве значения. | |
|
|
|
|
|
|
|
для: Trianon
(26.02.2011 в 16:35)
| | б) С чего это оно получит одно и тоже значение? Я же каждый раз по новой обращаюсь к базе, в которой каждый раз изменяется значение id. | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.02.2011 в 16:48)
| | Потому что php (и SQL кстати тоже) может выполнять потоки запросов параллельно и одновременно.
Потому что в момент исполнения процитированного оператора скрипта - в таблице запись сама по себе не появляется.
А до момента как будет выполнен INSERT (в этом запросе) - в другом запросе того же скрипта нито не мешает выполниться такому же оператору еще раз.
Да, записей будет добавлено несколько. Но файлы, отвечающие некоторым из них, смогут получить равные значения (отличающиеся от id соответствующих записей ) | |
|
|
|
|
|
|
|
для: Trianon
(26.02.2011 в 16:54)
| | Не подскажите, как это исправить? | |
|
|
|
|
|
|
|
для: lElectroHardl
(28.02.2011 в 18:24)
| | Например, генерируйте уникальное значение изображения, никак не завязанное на id. Ну, и храните это значения в отдельном столбце. | |
|
|
|
|
|
|
|
для: lElectroHardl
(28.02.2011 в 18:24)
| | сперва следует добавить строку в БД , потом взять id (mysql_insert_id() ) и уже его использовать для нужд. | |
|
|
|
|
|
|
|
для: Trianon
(28.02.2011 в 18:44)
| | Ага. Пасиб. | |
|
|
|