Статьи,обзоры,справочники по PHP

       

Программа для скачивания бинарных файлов по HTTP


Надеюсь, все уже изучили пример отправки сообщения на ICQ, которая демонстрирует 2 вещи: работа с сокетами (послали команду, считали ответ - точно также, как читать из файла) и отправка POST запросов (генерация параметров, кодирование, вставка переменных в POST запрос).

Здесь тоже самое: открываем сокет, шлем GET форму, читаем ответ. Ответ состоит из 2х вещей: заголовок и тело документа. Т.к. название данной статьи - получение файла, то очевидно, нас наиболее волнует именно тело документа (т.е. файл), а не все, что выдаст сервер. Тело от заголовка отделено строкой "\r\n".

Чтобы применить программу, замените строку "php.spb.ru" на имя вебсервера в 2х местах. Затем замените "/files/notepad.exe" на путь к файлу... В конце программы вместо "download.tmp" укажите, куда поместить скаченный файл (и надо ли его вообще в файл записывать).



Не забываем читать бинарные данные из сокета функций fread, а заголовок - текстовой функцией fgets. Можно все читать fread, но fgets нас избавит от не простого поиска пустой строки, отделяющей заголовок от тела.

Для записи файла открываем его в режиме "wb+": если файла не было - создать ("плюс"), если был - урезать до 0 байт ("w"), открыть в режиме бинарной записи ("b").

Смотрите также:

  • загрузка бинарных файлов в базу данных
  • UPLOAD файлов



    u="u217.97.spylog.com";d=document;nv=navigator;na=nv.appName;t="";p=1; sz=" width=88 height=31 "; hl=history.length;d.cookie="b=b";c=0; bv=Math.round(parseFloat(nv.appVersion)*100); if (d.cookie) c=1;n=(na.substring(0,2)=="Mi")?0:1; if((n==0)||(bv >= 300)){rn=Math.random();t=(new Date()).getTimezoneOffset();} else {rn=0;} z="p="+p+"&rn="+rn+"&t="+t+"&c="+c+"&hl="+hl; if (self != top) { fr=1;} else { fr=0;} r=escape(d.referrer);r1=""; sl="1.0";h=0; pl="";sl="1.1"; if((n==1) && (bv >= 300)) { for(var i = 0; i < nv.plugins.length; i++) pl += nv.plugins[i].name+":"; } j = (navigator.javaEnabled() ? "Y" : "N"); sl="1.2";s=screen;wh=s.width+'x'+s.height; px=(n==0)?screen.colorDepth:screen.pixelDepth;z+="&wh="+wh+"&px="+px; sl="1.3" y=""; y+=""; y+="

    "; y+=""; d.write(y);

    hotlog_js=0; function HotLOG() {}

    hotlog_js=1

    hotlog_js=2

    hotlog_js=3

    HotLOG(4535,hotlog_js)



  • Содержание раздела