|
|
|
|
|
для: Лена
(20.11.2008 в 17:59)
| | if ($size[2] !== $type[$_FILES['img']['tmp_name'][$i]]) - вот совсем не понял, что это означает?
То есть вы узнали тип у загруженного файла, затем проверяете его по перчисленному в массиве, так? Так как можно обратиться к элементу массива по $_FILES['img']['tmp_name'][$i] ?
А если вы не хотите принимать файлов кроме JPG, GIF, PNG, то зачем вообще делать проверку через какой-то массив типов?
Эта библиотека может лежать в папке Денвера WebServers\usr\local\php5\ext, и закомментирована в php.ini. Если ее у вас нет, то нужно скачать, положить в эту папку и раскомментировать в расширениях.
PS. Если вы таким образом хотите получить расширение и проверить сразу на допустимось типа файла. То делайте так (возможно этого нет в вашем РНР-мануале):
<?
$size = getimagesize($_FILES['img']['tmp_name'][$i]);
$ext = array_key_exists($size['mime'], $type) ? $type[$size['mime']] : NULL;
if ($ext) //загрузка изображения
else //ошибка типа
|
Только в массиве расширений нужно сменить ключ image/pjpeg на image/jpeg | |
|
|
|
|
|
|
|
для: sim5
(20.11.2008 в 17:50)
| | Это я уже поняла, что нужно получить тип реального файла.
Исправила:
if ($size[2] !== $type[$_FILES['img']['tmp_name'][$i]]) echo "Неправильное расширение файла.";
Ошибок не выдает, везде порядок. За это спасибо.
Теперь все в базу грузить буду.
Где эту библиотеку взять? Раз уже заговорили о ней, теперь все говорите. | |
|
|
|
|
|
|
|
для: Лена
(20.11.2008 в 17:42)
| | Ну если вы даже ее и подключите, вы все равно не верно к ней обращаетесь, то есть:
exif_imagetype() также должна обращаться к реальному файлу, а не элементу массива как это у вас. Можете не беспокоится о подключении, тоже самое вы можете узнать с помощью getimagesize().
PS. Если все таки есть большая необходимость в этой функции, то должна быть подключена библиотека php_exif.dll. | |
|
|
|
|
|
|
|
для: sim5
(20.11.2008 в 17:31)
| | Как включить поддержку?
Fatal error: Call to undefined function exif_imagetype() in Z:\home\avart.ua\www\upload1.php on line 81
|
Из мануала:
Примечание: эта функция доступна только в PHP 4, скомпилированном с --enable-exif.
У меня PHP 5. В конфиг-файле вот этой строчки нет. Где ее искать?
Без вот этой строки и изображения, и текст все нормально грузятся. Нашла причину | |
|
|
|
|
|
|
|
для: Лена
(20.11.2008 в 17:08)
| | exif_imagetype - если включена поддержка.
GetImageSize($_FILES['img']['size'][$i]) - нет, не правильно, GetImageSize() получает размер реально существующего файла, вы же пытаетесь получить размер переменной массива FILES. Хотите получить размеры загруженного файла, значит получайте его у $_FILES['img']['tmp_name'][$i]. | |
|
|
|
|
|
|
|
для: sim5
(20.11.2008 в 14:48)
| | На параметры я правильно проверяю?
//проверка картинки на параметры
$max_image_width = 400;
$max_image_height = 500;
$max_img_size = 20000000;
if (filesize($_FILES['img']['size'][$i]) >= $max_img_size) echo "Размер файла больше " . $max_img_size;
if (!exif_imagetype($_FILES['img']['type'][$i])) echo "Неправильное расширение файла.";
$size = GetImageSize($_FILES['img']['size'][$i]);
if (($size[0][$i] >= $max_image_width) || ($size[1][$i] >= $max_image_height)) echo "Ширина и высота превышают максимум";
if (move_uploaded_file($_FILES['img']['tmp_name'][$i], $uploaddir . $filename . "-" . ($i+1) . $ext)){
|
| |
|
|
|
|
|
|
|
для: Лена
(20.11.2008 в 14:37)
| | Причина чего? Не правильной записи в базу? Запись (последовательность) не должна зависить от загрузки или нет изображений.
Если вы загружаете из трех одно, то естественно у двух последних будет код ошибки 4 - изображение не загружено. А не загружены значит нет их, зачем для них что-то писать в базу?
Если проверять по полной, то, коды ошибок:
UPLOAD_ERR_OK
Значение: 0; Ошибок не возникало, файл был успешно загружен на сервер.
UPLOAD_ERR_INI_SIZE
Значение: 1; Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini.
UPLOAD_ERR_FORM_SIZE
Значение: 2; Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.
UPLOAD_ERR_PARTIAL
Значение: 3; Загружаемый файл был получен только частично.
UPLOAD_ERR_NO_FILE
Значение: 4; Файл не был загружен. | |
|
|
|
|
|
|
|
для: sim5
(20.11.2008 в 06:58)
| | Я думаю, проблема вот в чем.
if (!$_FILES['img']['error'][$i]){
//проверяю параметры файла, загружаю в папку, даю сведения о нем в базу
}
У меня три поля для вставки изображений. Если я загружаю 1 картинку, в массиве $_FILES появляется сообщение об ошибке:
$_FILES [img][error] => Array
(
[0] => 0
[1] => 4
[2] => 4
)
Одна картинка загружена - ошибок нет [0] => 0
два поля пустые, в них картинки не были загружены, там появляется ошибка 4. Что это значит? Думаю, что причина в этом | |
|
|
|
|
|
|
|
для: Лена
(19.11.2008 в 23:09)
| | Я не пробую, лишь говорю, что проверять надо. Кстати тип .doc это как пример у меня, не думаю, что вы будете этот формат файла загружать (ну если только не для закачки последующей пользователем), и разбирать его для отображения на странице. Скорее всего вы будет загружать готовый html, ну или чистый txt. Так что это можно и убрать вообще.
Что касается определения типа файла посредством расширения (после точки) - да пожалуйста, если это вы пишите для себя как администратора, в противном случае, я могу любую картинку обозвать расширением .txt, или текст расширеним .jpg и вы это "скушаете". Вот тут и посмотрите как в такой ситуации принимается (опознается) тип. | |
|
|
|
|
 1.9 Кб |
|
|
для: sim5
(19.11.2008 в 18:21)
| | >$id = mysql_insert_id();
Это уже знаю, Trianon рассказывал. Сделаю чуть позже, если сегодня успею, покажу. Сейчас с другим разбиралась (то, что ниже идет).
>Вы запустите простой скрипт загрузки файла на сервер под основными браузерами,
Скрипт запустила - прикрепила то, что запускала.
Загружаю gif-файл в Опере, получаю массив:
Array
(
[myfile] => Array
(
[name] => Name1.gifD.gif
[type] => image/gif
[tmp_name] => Z:\tmp\php48.tmp
[error] => 0
[size] => 3171
)
)
|
В Мозилле то же самое:
Array
(
[myfile] => Array
(
[name] => Name1.gifD.gif
[type] => image/gif
[tmp_name] => Z:\tmp\php4C.tmp
[error] => 0
[size] => 3171
)
)
|
То же самое и с doc-файлом. И в Эксплорере та же самая картина. А вы на каких файлах пробовали, когда писали сообщение?
И еще один вопрос: почему нельзя расширение файла выделять вот так:
$uploadfile = $uploaddir . date("m.d.y_H.i_") . strrchr($_FILES['text']['name'], ".");
или через pathinfo()? | |
|
|
|
|