За последние 24 часа нас посетил 18061 программист и 1676 роботов. Сейчас ищет 1061 программист ...

Проблема с расширением uploadprogress

Тема в разделе "Прочие вопросы по PHP", создана пользователем avkiev, 25 июн 2009.

  1. avkiev

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

    С нами с:
    6 июн 2009
    Сообщения:
    10
    Симпатии:
    0
    Есть такое расширение PHP: uploadprogress

    При загрузке файлов - столкнулся с проблемой:
    элемент $info['bytes_total'] отдает неверное значение размера загружаемого файла, завышает его на 0-1500 байт.
    Например, при загрузке файла размером 1048576 байт он возвращает 1048921.

    Никто с таким не сталкивался ?
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Не думал, что 1,5 килобайта могут так много значить, когда речь идет о сотнях мегабайт.
     
  3. avkiev

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

    С нами с:
    6 июн 2009
    Сообщения:
    10
    Симпатии:
    0
    Если результат неверен - то он неверен.
    А насколько именно - это уже дело десятое
     
  4. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    crc32 и md5 файла отличный от того, который загружается?
     
  5. avkiev

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

    С нами с:
    6 июн 2009
    Сообщения:
    10
    Симпатии:
    0
    Файл загружается правильный, с правильным размером и хешем.

    Но поле $info['bytes_total'] врет во время загрузки.

    Вот экзампл, взятый из дистрибутива этого расширения: http://avkiev.kiev.ua/php/examples/

    Даже при загрузке файла, размером 1М (1048576 байт) -
    $info['bytes_total'] = 1048921 :(
     
  6. avkiev

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

    С нами с:
    6 июн 2009
    Сообщения:
    10
    Симпатии:
    0
    Вот, что ответил разработчик:
    That data (bytes_total) comes directly from PHP itself and isn't changed by the extension.
    It's also not necessarily the total length of your file, but the total length of your upload, which is reported by your browser at the start of the upload.
    Nothing I can do.

    Вот фрагмент исходника:
    Код (Text):
    1.  
    2. static int uploadprogress_php_rfc1867_file(unsigned int event, void  *event_data, void **data TSRMLS_DC)
    3. {
    4.     zval handler;
    5.     char *callable = NULL;
    6.     uploadprogress_data * progress;
    7.     int read_bytes;
    8.     zend_bool get_contents = INI_BOOL("uploadprogress.get_contents");
    9.  
    10.     progress =  *data;
    11.     if (event == MULTIPART_EVENT_START) {
    12.         multipart_event_start  *e_data;
    13.         e_data = (multipart_event_start*) event_data;
    14.         progress  = emalloc( sizeof(uploadprogress_data) );
    15.         progress->upload_id = NULL;
    16.         progress->fieldname = NULL;
    17.         progress->data_filename = NULL;
    18.         progress->bytes_total    = e_data->content_length;
    19. ...
    То есть, как я понимаю, PHP выдает размер_файла + размер_некоего_служебного_трафика.

    Что, действительно никак нельзя узнать объем служебного трафика и вычесть его от того, что выдает PHP ?