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

Форум PHP

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

 

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

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

тема: Как узнать: не пусто ли полу $_FILES??
 
 автор: Адоп Акробат   (08.01.2005 в 04:17)   письмо автору
 
 

Я думал точто вот так:
if(!empty($_FILE["foto1"]))

Но чота не получаеца

   
 
 автор: cheops   (08.01.2005 в 13:02)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 04:17)
 

Хм... а $_FILE - это опечатка? Нужно $_FILES... Дело в том, что массив $_FILES - это двумерный массив и для того, чтобы узнать пришло ли изображение на сервер следует проверить либо поле $_FILES["foto1"]['tmp_name'] в котором хранится имя временного файла, куда сервер поместил файл закаченный от клиента либо поле $_FILES["foto1"]['name'] - где хранится имя исходного файла, т.е. так как он назывался на машине клиента. Ещё в PHP имеется специальная функция is_uploaded_file(), которая проверяет загрузился файл на сервер или нет
<?php
  
if(is_uploaded_file($_FILES["foto1"]['name']))
  {
    echo 
"Ну слава богу...";
  }
  else
  {
    echo 
"Блин, это куда это файлы деваются :(((";
  }
?>

   
 
 автор: Адоп Акробат   (08.01.2005 в 13:30)   письмо автору
 
   для: cheops   (08.01.2005 в 13:02)
 

Мне нужно узнать точто есть чтолибо в поле $_FILES
Точто он не пуст

   
 
 автор: cheops   (08.01.2005 в 13:53)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 13:30)
 

Но ведь $_FILES - это массив и следует проверять значения его полей, т.е. либо $_FILES['foto1']['tmp_name'], либо $_FILES['foto1']['name']. Для отлдки может быть удобно вывести всё содержимое данного массива при помощи функции print_r():
<?php
  pritn_r
($_FILES);
?>

   
 
 автор: Адоп Акробат   (08.01.2005 в 17:21)   письмо автору
 
   для: cheops   (08.01.2005 в 13:53)
 

Нет, вот смотрите, у меня есть восемь полей
<input type='file' name='foto1' class='submit' size='5'>

И как мне узнать то, что содержит ли это поле что небуть?
а если оно пустое, то я его просто проигнорирую

вот поле <input type='text' name='tex' class='submit' size='5'>
я проверяю вот так
if(!empty($_REQUEST[text]))

А как мне сделать это с файлом?

   
 
 автор: cheops   (08.01.2005 в 18:11)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 17:21)
 

if(!empty($_FILES['foto1']['name']))

   
 
 автор: Адоп Акробат   (08.01.2005 в 18:24)   письмо автору
 
   для: cheops   (08.01.2005 в 18:11)
 

Спасиба :)

чета я ваще :(

   
 
 автор: Адоп Акробат   (08.01.2005 в 18:34)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 18:24)
 

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

   
 
 автор: cheops   (08.01.2005 в 18:44)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 18:34)
 

Дело в том, что файлы сначала помещаются во временную директорию на сервере с уникальным именем, которое можно узнать из элемента суперглобального массива $_FILES['foto1']['tmp_name']. Т.е. сам Web-сервер никогда ничего не затрёт. После того, как файлы загружены можно копировать их из временной директори в директорию назначения при помощи функции copy():
<?php
    
if (copy($_FILES['attach']['tmp_name'], $path))
    {
      
// Уничтожаем файл во временной директории
      
unlink($_FILES['attach']['tmp_name']);
      
// Изменяем права доступа к файлу
      
chmod($path0644);
    }
?>

где $path - путь к файлу куда следует поместить файл. Если такой файл уже существует он будет перезаписан - это нужно проверять самостоятельно. Я обычно, если файлы хранятся во одной директории изменяю имя файла на уникальное - например текущее время
<?php
    
// Извлекаем из имени файла расширение
    
$ext strrchr($_FILES['attach']['name'], "."); 
    
// Формируем путь к файлу    
    
$path="files/$id_theme-".date("YmdHis",time()).$ext
?>

Но это и по форуму видно, здесь имена файлов и фотографий имеют дикие имена вроде 1024-20041208093003.txt

   
 
 автор: Адоп Акробат   (08.01.2005 в 19:07)   письмо автору
 
   для: cheops   (08.01.2005 в 18:44)
 

А в этом фрагменте кода
<?php 
    
// Извлекаем из имени файла расширение 
    
$ext strrchr($_FILES['attach']['name'], "."); 
    
// Формируем путь к файлу     
    
$path="files/$id_theme-".date("YmdHis",time()).$ext
?> 


что такое $id_theme- ??

А и как зделать чтобы название было покароче?

   
 
 автор: cheops   (08.01.2005 в 20:04)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 19:07)
 

А это я просто передрал с форума - это номер темы (например для этой это 1428) - можно убрать, кроме того можно наверное убрать год (литера Y в строке форматирования функции date) - это укоротит имя на 4 символа, а вообще можно и месяц наверное убрать, кроме этого это не единственный способ генерации уникальных имён, но зато благодаря ему у вас точно не упрут автоматически картинки, так как сгенерировать имена не получится...

   
 
 автор: glsv (Дизайнер)   (08.01.2005 в 20:16)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 19:07)
 

>что такое $id_theme- ??
Это, видимо, случайно попало.

Имя файла Вы можете генерировать как хотите:

date("YmdHis",time()).$ext;

Эта строка генерирует имя файла состоящее из года, месяца, дня, часа, минут и секунд. Длинно – зато гарантирует уникальность названий файлов. Хотя, может быть Вам и не нужны уникальные имена? Тогда подставьте в эту строку что то свое.

   
 
 автор: Адоп Акробат   (08.01.2005 в 20:48)   письмо автору
 
   для: glsv (Дизайнер)   (08.01.2005 в 20:16)
 

Не мне кажеца этот способ неполучица потомучто у меня в одно и тоже време записываюца восемь файлов.
Какой лучьше способ использовать?

   
 
 автор: Адоп Акробат   (08.01.2005 в 20:54)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 20:48)
 

А и смотрите я нашол в мануале такую функцию move_uploaded_file мне кажеца точто она лутше чем copy
А вы как думаете?

   
 
 автор: cheops   (08.01.2005 в 21:32)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 20:54)
 

Чёрт его знает... в мануале написано, что при использовании этой функции могут быть проблемы с при включенном безопасном режиме, который везде и включён... но написано так коряво, что я не могу понять что за проблемы могут возникнуть :(((

   
 
 автор: Адоп Акробат   (08.01.2005 в 21:33)   письмо автору
 
   для: cheops   (08.01.2005 в 21:32)
 

Ну кагда загружу тогда и посмотрю :)

Ну так а че делать с именем?

   
 
 автор: Akira   (08.01.2005 в 21:49)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 21:33)
 

Дело в том что файлы мне могут загружаться одновременно =)
Несколько секунд все равно разные.
Да и имя можно генерировать случайными числами =)
По моему есть функция генерирования temp имен....
Почему бы ее не использовать?

   
 
 автор: Адоп Акробат   (08.01.2005 в 22:01)   письмо автору
 
   для: Akira   (08.01.2005 в 21:49)
 

Мне просто не хочица делать страшные именна.

   
 
 автор: Akira   (08.01.2005 в 22:51)   письмо автору
 
   для: Адоп Акробат   (08.01.2005 в 22:01)
 

Проблем нет =) Создовай тогда папки по дате =) Много папок зато шанс перезаписи файла минимален.
Я поступил так.
У меня пользователь загружает midi файл на сайт.
Я его заношу в бд.
Если он совпадает по всем параметрам то отклоняеться и не копируеться.
Если совпадает по имени то просто добавляю что-то к этому файлу.
Вообщем занося о файлах информацию в бд делает все проше.
Главное сначало запросы в бд а потом уже работа с файлом.

   
 
 автор: Адоп Акробат   (09.01.2005 в 02:57)   письмо автору
 
   для: Akira   (08.01.2005 в 22:51)
 

Фух с именем разобрался :)
Я сделал так:
беру из базы id прибавляю один и все :)

А когда копируешь файл из временной папки в обычную нужно указывать полный путь ?
или нет?

как правильно так
move_uploaded_file($_FILES["foto1"]["tmp_name"],"photos/" . $name);
или так
move_uploaded_file($_FILES["foto1"]["tmp_name"],"C:\Documents and Settings\Адоп Акробат\Рабочий стол\php/photos/" . $name);

   
 
 автор: cheops   (09.01.2005 в 03:41)   письмо автору
 
   для: Адоп Акробат   (09.01.2005 в 02:57)
 

Можно указывать и полный путь и относительный - лучше относительный - код будет переносимый...

   
Rambler's Top100
вверх

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