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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: загрузка текст+картинки в папку, потом в базу

Сообщения:  [1-10]   [11-14] 

 
 автор: sim5   (20.11.2008 в 18:09)   письмо автору
 
   для: Лена   (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

  Ответить  
 
 автор: Лена   (20.11.2008 в 17:59)   письмо автору
 
   для: sim5   (20.11.2008 в 17:50)
 

Это я уже поняла, что нужно получить тип реального файла.
Исправила:
if ($size[2] !== $type[$_FILES['img']['tmp_name'][$i]]) echo "Неправильное расширение файла.";

Ошибок не выдает, везде порядок. За это спасибо.
Теперь все в базу грузить буду.

Где эту библиотеку взять? Раз уже заговорили о ней, теперь все говорите.

  Ответить  
 
 автор: sim5   (20.11.2008 в 17:50)   письмо автору
 
   для: Лена   (20.11.2008 в 17:42)
 

Ну если вы даже ее и подключите, вы все равно не верно к ней обращаетесь, то есть:
exif_imagetype() также должна обращаться к реальному файлу, а не элементу массива как это у вас. Можете не беспокоится о подключении, тоже самое вы можете узнать с помощью getimagesize().

PS. Если все таки есть большая необходимость в этой функции, то должна быть подключена библиотека php_exif.dll.

  Ответить  
 
 автор: Лена   (20.11.2008 в 17:42)   письмо автору
 
   для: 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. В конфиг-файле вот этой строчки нет. Где ее искать?

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

  Ответить  
 
 автор: sim5   (20.11.2008 в 17:31)   письмо автору
 
   для: Лена   (20.11.2008 в 17:08)
 

exif_imagetype - если включена поддержка.
GetImageSize($_FILES['img']['size'][$i]) - нет, не правильно, GetImageSize() получает размер реально существующего файла, вы же пытаетесь получить размер переменной массива FILES. Хотите получить размеры загруженного файла, значит получайте его у $_FILES['img']['tmp_name'][$i].

  Ответить  
 
 автор: Лена   (20.11.2008 в 17:08)   письмо автору
 
   для: 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)){

  Ответить  
 
 автор: sim5   (20.11.2008 в 14:48)   письмо автору
 
   для: Лена   (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; Файл не был загружен.

  Ответить  
 
 автор: Лена   (20.11.2008 в 14:37)   письмо автору
 
   для: 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. Что это значит? Думаю, что причина в этом

  Ответить  
 
 автор: sim5   (20.11.2008 в 06:58)   письмо автору
 
   для: Лена   (19.11.2008 в 23:09)
 

Я не пробую, лишь говорю, что проверять надо. Кстати тип .doc это как пример у меня, не думаю, что вы будете этот формат файла загружать (ну если только не для закачки последующей пользователем), и разбирать его для отображения на странице. Скорее всего вы будет загружать готовый html, ну или чистый txt. Так что это можно и убрать вообще.

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

  Ответить  
 
 автор: Лена   (19.11.2008 в 23:09)   письмо автору
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()?

  Ответить  

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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