За последние 24 часа нас посетили 17576 программистов и 1732 робота. Сейчас ищут 965 программистов ...

Не могу загрузить файл php-скриптом. Выдает ошибку.

Тема в разделе "PHP для новичков", создана пользователем rar, 22 мар 2009.

  1. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Заливаю несколько файлов:

    for ($i = 0; $i < sizeof($_FILES['images']['name']); $i++) {
    if ($_FILES['images']['name'][$i]) {
    if (copy($_FILES['images']['tmp_name'][$i], '/images/bu/' . $_FILES['images']['name'][$i]))
    print "true<br />";
    }
    }


    Выдает ошибку:
    Warning: copy(/images/bu/x_3ba432d1.jpg) [function.copy]: failed to open stream: No such file or directory in C:\ROOT\Apache2\htdocs\veles\www\admin\create_bu.php on line 23

    Каталог существует! Делаю все на локале. Не могу понять, почему так происходит. Что же я делаю неправильно?
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    rar
    Из директории temp нужно копировать функцией move_uploaded_file. Она создана специально для этого и у нее есть доступ к temp-директории всегда, в отличие от других функций.
     
  3. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Поменял код:
    for ($i = 0; $i < sizeof($_FILES['images']['name']); $i++) {
    if ($_FILES['images']['name'][$i]) {
    if (move_uploaded_file($_FILES['images']['tmp_name'][$i], '/images/bu/' . $_FILES['images']['name'][$i]))
    {
    ...
    }
    }
    }


    Тоже самое:
    Warning: move_uploaded_file(/images/bu/3.png) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\ROOT\Apache2\htdocs\veles\www\admin\create_bu.php on line 23

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\php795C.tmp' to '/images/bu/3.png' in C:\ROOT\Apache2\htdocs\veles\www\admin\create_bu.php on line 23


    Посмотрите, может ошибки что скажут. Я чего-то не допонимаю.
     
  4. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    В php.ini есть такая строчка ;upload_tmp_dir =. Может это из-за нее? Видимо надо раскомментировать и прописать путь, подскажите, как правильно прописать.
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    откуда в венде корневой каталог / ?
     
  6. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    А по-конкретней можно?
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    PHP:
    1. $_SERVER['DOCUMENT_ROOT'].'/admin/images/bu/' . $_FILES['images']['name'][$i]
     
  8. alexey_baranov

    alexey_baranov Активный пользователь

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    вот кусок моего контролера стоража, который отвечает за сохранение файлов. может чем- то поможет.

    Код (Text):
    1.                     foreach ($_FILES[$this->input().'_n']['name'] as $index=> $xxx){
    2.                         $fileA['name']=     $_FILES[$this->input().'_n']['name'][$index];
    3.                         $fileA['tmp_name']= $_FILES[$this->input().'_n']['tmp_name'][$index];
    4.                         $fileA['type']    = $_FILES[$this->input().'_n']['type'][$index];
    5.                         //невыбранные файлы не обрабатываются
    6.                         if (!$fileA['name'])
    7.                             continue;
    8.                         //файл сохраненный с ошибкой обрывают загрузку всех файлов
    9.                         if (!is_uploaded_file($fileA['tmp_name']) || !move_uploaded_file($fileA['tmp_name'], UPLOADPATH.$fileA['name'])){
    10.                             switch($fileA['error']){
    11.                                 case UPLOAD_ERR_INI_SIZE:
    12.                                 case UPLOAD_ERR_FORM_SIZE:
    13.                                 throw new OException("Файл {$fileA['name']}: Превышен допустимый размер закачиваемого файла");
    14.                                     break;
    15.                                 case UPLOAD_ERR_PARTIAL:
    16.                                     throw new OException("Файл {$fileA['name']}: Во время передачи файла произошла ошибка. Повторите операцию еще раз");
    17.                                     break;
    18.                                 case UPLOAD_ERR_NO_FILE:
    19.                                     throw new OException("Файл {$fileA['name']}: Файл не выбран");
    20.                                     break;
    21.                                 default:
    22.                                     throw new OException("Файл {$fileA['name']}: Во время передачи файла произошла ошибка. Повторите операцию еще раз");
    23.                                     break;
    24.                             }
    25.                         }
    26.                         $fileA['tmp_name']= UPLOADPATH.$fileA['name'];
    27.                         //файлы сохраненные правильно, добавляются в стораж
    28.                         $storage->add($fileA['name'],$fileA['tmp_name'], $fileA['type']);
    29.                     }
     
  9. alexey_baranov

    alexey_baranov Активный пользователь

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    а уплоад пас определен вот так
    Код (Text):
    1. define('UPLOADPATH', '../../upload/');
     
  10. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Спасибо. $_SERVER['DOCUMENT_ROOT'] помог.

    Только не пойму почему при загрузки файлов он нужен, а при простом инклудинке или руадеринге он не нужен?
     
  11. silcki

    silcki Активный пользователь

    С нами с:
    16 окт 2007
    Сообщения:
    18
    Симпатии:
    0
    дело в другом, если ты делаешь аплоад файла из под каталога, например www.mysite.com/admin - то тебе надо указывать относительный путь такого вида '../images/bu/'

    если же из корня www.mysite.com - то просто 'images/bu/'

    у меня на всех проектах так стоит и работает нормально без всякого $_SERVER['DOCUMENT_ROOT']
     
  12. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
  13. rar

    rar Активный пользователь

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Спасибо.