За последние 24 часа нас посетили 62939 программистов и 1743 робота. Сейчас ищут 859 программистов ...

Partial аплоад. Большие файлы.

Тема в разделе "PHP для новичков", создана пользователем heapKiller, 26 сен 2008.

  1. heapKiller

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

    С нами с:
    27 авг 2008
    Сообщения:
    95
    Симпатии:
    0
    Надо организовать аплоад больших файлов. Можно ли реализовать это так, чтобы была возможность возобновления докачки?
     
  2. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    смамоу интересно, но думаю, что вряд ли, хотя... кто знает.
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  4. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Luge, там вроде download
     
  5. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    на счёт аплоадинга, думаю средствами пхп никак
    флеш - может быть...
     
  6. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Флешь - клиентская технология.
    Я не представляю, как это сделать на PHP. Собственно такие проблемы решаюся с помощью CGI-сценариев, написаных на разных языках, например на C++, или Perl...
     
  7. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    есть же аплоадеры на флеше + php
     
  8. Anonymous

    Anonymous Guest

    К сожалению, не думаю, что это можно сделать по HTTP не модифицируя клиент(браузер)
     
  9. Anonymous

    Anonymous Guest

    Да, вроде есть флеш|Java которыми можно.
     
  10. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    В том и суть: он на стороне клиента получит размер оригинала, от сервера (PHP) получит размер уже залитого, обрежит и пошлёт кусок на сервер, а там PHP склеит два файла - залитое ранее и в данный момент.

    Тока интересно, у флэша от таких стараний пупок не развяжится? :) Флэш сам по себе процессор жрёт, а обрезание файла, посыл серверу силами ActionScript...
     
  11. heapKiller

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

    С нами с:
    27 авг 2008
    Сообщения:
    95
    Симпатии:
    0
    пупок у флэша не развяжется ). Надеялся, что можно обойтись без него правда. Только тогда не ясно чего ловить на сервере. Я еще в пхп нуб, и, насколько я представляю, если, например, связь оборвется то из скрипта никакого доступа к выгруженному не предвидится. Т. е. надо заранее нарезать на куски на стороне клиента. Я правильно понял?
     
  12. mmaavv

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

    С нами с:
    25 мар 2007
    Сообщения:
    59
    Симпатии:
    0
    а если создать временный фтп аккаунт?
    как я понимаю большие файлы будут закачиваться на свой сервер.
     
  13. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А эта задача очень сложная, можно на этом форуме по пальцам пересчитать тех, кто за это может взяться. Тем более, что однии PHP здесь не обойтись.

    Хотя нет, можно и однии PHP обойтись. Если на компьютере клиента будет работать PHP-скрипт, который через сокет будет передавать файл скрипту на сервере :) Но для этого на компе клиента тоже должен быть установлен веб-сервер. Проще сделать специальную софтину-аплоадер.
     
  14. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    0o
    Нет, ну а я про что?, флеш+php
     
  15. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Ловить на сервере то, что серверу флэш пошлёт.

    Ты делаешь загрузчик upload.php (вот тут с примером), в нём указываешь:
    PHP:
    1. <?php
    2. // пишем в начале скрипта загрузки
    3. set_time_limit(0); // снимаем ограничение на время работы скрипта
    4. ignore_user_abort(true); // если связь оборвётся или юзер отменит, то сами отрулим отключение загрузки
    5.  
    6. if (is_file($_FILES['name'].'.part1')){
    7.     // если это продолжение закачки, то
    8. }
    9.  
    10. // тут код загрузки ...
    11.  
    12.     // коннект разорван, надо сворачивать загрузку
    13.     // мы берём то, что успели загрузить и сохраняем как $_FILES['name'] с расширением part1
    14. }
    15.  
    16. // и тут последнее, мы берём все куски partN, где N это номер куска
    17. // и склеиваем их в целый файл, а затем удаляем все partN
    18.  
    19. //скрипт вырубается
    Так же флэш должен отсылать скрипту название файла. Пусть он шлёт размер на returnsize.php, а тот в свою очередь вернёт:
    PHP:
    1. <?php
    2. // конечно, нужно поставить проверку на существование
    3. echo filesize($_GET['name'].'part1');
    Флэш получает размер уже загруженого куска, отберает загружаемый от этого размера и отсылает отрезаный кусок на upload.php.

    Не очень-то понятно я мысли выразил, но, надеюсь, передал идею. :)

    Mr.M.I.T., я и не тебе писал, а [vs], чтобы он понял твою идею. ;)
     
  16. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А что, если просто флеш порежет файл на мелкие кусочки, и, в пределах одной сессии (php), будет их отправлять скрипту? При этом кусочки для понятност обзывать как partN.file, а последний кусочке обозвать как end.file. После полчуения пследнего файла, PHP просто склеит все кусочки в один.
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Upd!
    Это гарантирует узнаваемость пользователя после обрыва соеденения. А полученые части сохранять во временной папке, с именем = id сессии.
     
  18. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    [vs], изнчально по-тихому (без информирования об этом пользователя) резать на куски и в таком виде заливать тоже вариант, но, имхо, тема доливки интереснее. :)
     
  19. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    ИМХО, есть более простой выход - пусть человек сделает разбитый по частям архив и загрузит :) Это может оказаться проще чем реализация частичной загрузки :)
     
  20. alligator77

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

    С нами с:
    5 авг 2008
    Сообщения:
    3
    Симпатии:
    0
    флеш и пхп реализовать можно.. темболее сейчас возможности его удивляют.
    сам реализовал недавно себе модуль массаплоада файлов при помощи флеша.. по размерам файлы только непропускает пхп.. соответственно поправить в настройках..
    есть конечно минусы.. флеш вызывает на каждый загруженный файл скрипт обработки.. но это нестрашно ибо загружаются поочереди :)
    но есть плюсы: массовая загрузка + прогресбар :) ну и еще поправить размеры загружаемых файлов в пхпини
    делал для заливки фоток в альбом..

    насчет докачки и тп.. пока еще не заморачивался.. но думаю сделать можно :)