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

Форум PHP

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

 

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

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

тема: не вставляется фотка
 
 автор: Dizels   (23.07.2008 в 12:41)   письмо автору
 
 

Форма:

...
<tr>
  <td><p class=zag2>Изображение</td>
  <td><input type="checkbox" name="chk_filename" onclick="freeze_filename(this.form)" <?php echo htmlspecialchars($chk_filename); ?>></td>
  <td><input class=input size=70 type=file name=filename></td>
</tr>
...

скрипт-обработчик:

...
// Если поле выбора картинки не пустое - закачиваем её на сервер
  // Если требуется загрузить файл - загружаем
  $path = "";
  if($_POST['chk_filename'] == "on")
  {
    if (!empty($_FILES['filename']['tmp_name']))
    {
      // Формируем путь к файлу    
      $path = "../files_news/".date("YmdHis",time());
      // Если оператор пожелал переименовать файл - переименовываем 
      if($_POST['chk_rename'] == "on")
      {
        // Проверяем, чтобы не было прямых и обратных слешей
        $_POST['rename'] = str_replace("\\","",$_POST['rename']);
        $_POST['rename'] = str_replace("/","",$_POST['rename']);
        $_POST['rename'] = stripcslashes($_POST['rename']);
        $path = "../files_news/".substr($_POST['rename'], 0, strrpos($_POST['rename'], ".")); 
      }
      
      // Проверяем, не является ли файл скриптом PHP или Perl, html, если это так преобразуем его в формат .txt
      $extentions = array("#\.php#is",
                          "#\.phtml#is",
                          "#\.php3#is",
                          "#\.html#is",
                          "#\.htm#is",
                          "#\.hta#is",
                          "#\.pl#is",
                          "#\.xml#is",
                          "#\.inc#is",
                          "#\.shtml#is", 
                          "#\.xht#is", 
                          "#\.xhtml#is");
      // Извлекаем из имени файла расширение
      $ext = strrchr($_FILES['filename']['name'], "."); 
      $add = $ext;
      foreach($extentions AS $exten) 
      {
        if(preg_match($exten, $ext)) $add = ".txt"; 
      }
      $path .= $add; 
  
      // Перемещаем файл из временной директории сервера в
      // директорию /files_news Web-приложения
      if (copy($_FILES['filename']['tmp_name'], "../".$path))
      {
        // Уничтожаем файл во временной директории
        @unlink($_FILES['filename']['tmp_name']);
        // Изменяем права доступа к файлу
        @chmod("../".$path, 0644);
      }
    }
    else links("Не указан файл для загрузки");
  }
...

Выводит ошибку: "Не указан файл для загрузки". В чем причина - не могу разобраться, подскажите.

   
 
 автор: Dizels   (23.07.2008 в 13:00)   письмо автору
 
   для: Dizels   (23.07.2008 в 12:41)
 

up

   
 
 автор: Dizels   (23.07.2008 в 13:12)   письмо автору
 
   для: Dizels   (23.07.2008 в 13:00)
 

Если
if (!empty($_FILES['filename']['tmp_name'])) 
поменять на 
if (!empty($_FILES['filename']['name']))

то все работает и записывается в БД, кроме создания самого файла.

   
 
 автор: Dizels   (23.07.2008 в 13:34)   письмо автору
 
   для: Dizels   (23.07.2008 в 13:12)
 

Я уже совсем запутался - тот код, который приведен в самом начале вроде правильный, сверился с книгой PHP5 Практика создания веб-сайтов. Там вроде все так же - где ошибка - не могу понять(((

   
 
 автор: Trianon   (23.07.2008 в 14:01)   письмо автору
 
   для: Dizels   (23.07.2008 в 13:34)
 

Ошибка в том, что Ваш код не анализирует поле $_FILES['filename']['error'] .
Хотя бы так:
else links("Не указан файл для загрузки (ошибка ".$_FILES['filename']['error'].")" );

   
 
 автор: sim5   (23.07.2008 в 13:42)   письмо автору
 
   для: Dizels   (23.07.2008 в 12:41)
 

Корректную загрузку изображения можно проверить либо is_uploaded_file(), либо непосредственно по move_uploaded_file(). $_FILES['filename']['tmp_name'] это временное имя файла на сервере, поэтому давайте либо свое, либо используйте $_FILES['filename']'name'], вы же вообще никакого не используете. Забудьте о copy($_FILES['filename']['tmp_name']... возможны баги при некоторых условиях.

   
 
 автор: Dizels   (23.07.2008 в 14:02)   письмо автору
 
   для: sim5   (23.07.2008 в 13:42)
 

Все таки хотелось бы разобраться что у меня не так, так как раньше все работало превосходно.

   
 
 автор: Dizels   (23.07.2008 в 14:04)   письмо автору
 
   для: Dizels   (23.07.2008 в 14:02)
 

Вставил строчку:
else links("Не указан файл для загрузки (ошибка ".$_FILES['filename']['error'].")" );

Теперь выдает: Не указан файл для загрузки (ошибка 1)

   
 
 автор: Trianon   (23.07.2008 в 14:07)   письмо автору
 
   для: Dizels   (23.07.2008 в 14:04)
 

А теперь смотрите список ошибок
error
1 - Размер файла превышает лимит, указанный в конфигe PHP

   
 
 автор: Dizels   (23.07.2008 в 14:10)   письмо автору
 
   для: Trianon   (23.07.2008 в 14:07)
 

Trianon, большое спасибо, очень помогли! В жизни бы не доперло, что просто слишком большие фотки гружу.

   
Rambler's Top100
вверх

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