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

Форум PHP

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

 

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

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

тема: Как загрузить файл и при этом зразу же поместить его в созданный по ходу загрузки каталог?
 
 автор: x777   (31.10.2008 в 19:35)   письмо автору
 
 

Как загрузить файл и при этом зразу же поместить его в созданный по ходу загрузки каталог? 2 часа уже промучался, а всё таже ошибка: Warning: copy() failed to open stream


<form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="text" name="title"/><br/>
      <input type="file" name="filename"><br> 
      <input type="submit" value="Загрузить"><br>


Файл upload.php

<?php
   
if($_FILES["filename"]["size"] > 1024*3*1024)
   {
     echo (
"Размер файла превышает три мегабайта");
     exit;
   }
   
$file_path "../books/".$_POST['title']."/";
   
               
mkdir($file_path0700);
               if(
is_uploaded_file($_FILES["filename"]["tmp_name"]))
               {
                   echo 
"File is uploaded";
                   if(
copy($_FILES["filename"]["tmp_name"],$file_path))
               {
                   
                   
if(
copy($_FILES["filename"]["tmp_name"],$file_path))
   {
     echo(
"Файл успешно загружен <br>");
     echo(
"Характеристики файла: <br>");
     echo(
"Имя файла: ");
     echo(
$_FILES["filename"]["name"]);
     echo(
"<br>Размер файла: ");
     echo(
$_FILES["filename"]["size"]);
     echo(
"<br>Каталог для загрузки: ");
     echo(
$_FILES["filename"]["tmp_name"]);
     echo(
"<br>Тип файла: ");
     echo(
$_FILES["filename"]["type"]);
   }
               }else{
                   echo(
"Ошибка при копировании файла!");
   }
               }
               
            
   else {
      echo(
"Ошибка загрузки файла");
   }
?>

  Ответить  
 
 автор: Волки   (31.10.2008 в 20:24)   письмо автору
 
   для: x777   (31.10.2008 в 19:35)
 

в пару к is_uploaded_file есть move_uploaded_file

  Ответить  
 
 автор: x777   (31.10.2008 в 21:49)   письмо автору
 
   для: Волки   (31.10.2008 в 20:24)
 

Так тоже не работает. Пробовал. :(

  Ответить  
 
 автор: Zend72   (01.11.2008 в 02:59)   письмо автору
 
   для: x777   (31.10.2008 в 19:35)
 


<html>
<head>
  <title>Загрузка файла</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="text" name="title" /><br/>
      <input type="file" name="filename" /><br>
      <input type="submit" value="Загрузить" /><br>
</form>
</body>
</html>

Вариант раз:

<?php
  
if($_FILES['filename']['size'] > 1024*3*1024)
  {
    echo (
'Размер файла превышает три мегабайта');
    exit;
  }
  
$file_path '../books/'.$_POST['title'].'/';

  
mkdir($file_path0700);
  if(
is_uploaded_file($_FILES['filename']['tmp_name']))
  {
    if(
copy($_FILES['filename']['tmp_name'],$file_path.$_FILES['filename']['name']))
    {
      echo(
'Файл успешно загружен.<br>');
      echo(
'Характеристики файла: <br>');
      echo(
'Имя файла: ');
      echo(
$_FILES['filename']['name']);
      echo(
'<br>Размер файла: ');
      echo(
$_FILES['filename']['size']);
      echo(
'<br>Каталог для загрузки: ');
      echo(
$file_path);
      echo(
'<br>Тип файла: ');
      echo(
$_FILES['filename']['type']);
    }
    else
    {
      echo(
'Ошибка при копировании файла!');
    }
  }
?>

Вариант два:

<?php
  
if($_FILES['filename']['size'] > 1024*3*1024)
  {
    echo (
'Размер файла превышает три мегабайта');
    exit;
  }
  
$file_path '../books/'.$_POST['title'].'/';

  
mkdir($file_path0700);
  if(
is_uploaded_file($_FILES['filename']['tmp_name']))
  {
    if(
move_uploaded_file($_FILES['filename']['tmp_name'],$file_path.$_FILES['filename']['name']))
    {
      echo(
'Файл успешно загружен.<br>');
      echo(
'Характеристики файла: <br>');
      echo(
'Имя файла: ');
      echo(
$_FILES['filename']['name']);
      echo(
'<br>Размер файла: ');
      echo(
$_FILES['filename']['size']);
      echo(
'<br>Каталог для загрузки: ');
      echo(
$file_path);
      echo(
'<br>Тип файла: ');
      echo(
$_FILES['filename']['type']);
    }
    else
    {
      echo(
'Ошибка при копировании файла!');
    }
  }
?>

  Ответить  
 
 автор: sim5   (01.11.2008 в 06:06)   письмо автору
 
   для: Zend72   (01.11.2008 в 02:59)
 

Вариантом 1 лучше не пользоваться.

  Ответить  
 
 автор: x777   (01.11.2008 в 14:08)   письмо автору
 
   для: sim5   (01.11.2008 в 06:06)
 

Не работает не один ни второй вариант! Ошибка таже:
Warning: copy(../books/asdfasfas/) [function.copy]: failed to open stream: No such file or directory in E:\PROJECT\Dreams=e-books\president\upload.php on line 29
Ошибка при копировании файла!


Может это из-за прав доступа? Хотя при прямом копировании, когда папка уже создана, это работает. Но когда она автоматом создаеться, папка создана, а файла там нет. :(

  Ответить  
 
 автор: AcidTrash   (01.11.2008 в 14:10)   письмо автору
 
   для: x777   (01.11.2008 в 14:08)
 

Выставляйте права 777

  Ответить  
 
 автор: Assessor   (01.11.2008 в 14:20)   письмо автору
 
   для: x777   (01.11.2008 в 14:08)
 

unmask("0");
mkdir($file_path, 0777); 

  Ответить  
 
 автор: x777   (01.11.2008 в 14:30)   письмо автору
 
   для: Assessor   (01.11.2008 в 14:20)
 

Права не помогают. Сервер Apache 2.2.8/php 5.2.5 на Windows XP (локальный)
Папка создается без проблем. Уже сотни создалось :) Но файл в эту папку не копируеться.

  Ответить  
 
 автор: Assessor   (01.11.2008 в 14:41)   письмо автору
 
   для: x777   (01.11.2008 в 14:30)
 

попробуйте $file_path присвоить полный путь...

$file_path = $_SERVER['DOCUMENT_ROOT'] . '/books/';

  Ответить  
 
 автор: x777   (01.11.2008 в 14:53)   письмо автору
 
   для: Assessor   (01.11.2008 в 14:41)
 

Zend72, огромное спасибо!!! Твой второй вариант помог! проблема была в:
  
if(copy($_FILES['filename']['tmp_name'],$file_path.$_FILES['filename']['name']))


а у меня было просто
 if(copy($_FILES['filename']['tmp_name'],$file_path))


Всем, спасибо за то что пыталисть помочь! Ваш форум супер!

  Ответить  
 
 автор: sim5   (01.11.2008 в 15:00)   письмо автору
 
   для: x777   (01.11.2008 в 14:53)
 

Это как раз не супер. Не используйте copy() при загрузке файлов на сервер.

  Ответить  
 
 автор: x777   (01.11.2008 в 15:09)   письмо автору
 
   для: sim5   (01.11.2008 в 15:00)
 

Я в курсе! Я у себя использую move_uploaded_file() Спасибо!

  Ответить  
 
 автор: x777   (01.11.2008 в 15:10)   письмо автору
 
   для: x777   (01.11.2008 в 14:53)
 


 if(move_uploaded_file($_FILES['filename']['tmp_name'],$file_path)) - ОШИБКА!
if(move_uploaded_file($_FILES['filename']['tmp_name'],$file_path.$_FILES['filename']['name'])) - РЕШЕНИЕ!

  Ответить  
 
 автор: sim5   (01.11.2008 в 17:53)   письмо автору
 
   для: x777   (01.11.2008 в 15:10)
 

А дубликатов имен не опасаетесь?

  Ответить  
 
 автор: x777   (03.11.2008 в 10:45)   письмо автору
 
   для: sim5   (01.11.2008 в 17:53)
 

Что вы имеете ввиду?

  Ответить  
 
 автор: sim5   (03.11.2008 в 11:23)   письмо автору
 
   для: x777   (03.11.2008 в 10:45)
 

Если это загрузка файлов от пользователя, то где гарантия, что файла с именем, например, "Летом на даче", не будет 2, 3...

  Ответить  
 
 автор: x777   (04.11.2008 в 02:17)   письмо автору
 
   для: sim5   (03.11.2008 в 11:23)
 

Нет, это для админки. Спасибо.

  Ответить  
Rambler's Top100
вверх

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