Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Download файла через HTTPS в IE


Автор: Xena 27.3.2005, 16:28
С разрешения IZ@TOP создаю тему заново, постарался максимально просто переформулировать задачу.

Клиент используя IE соединяется с сервером через https. После всевозможных аутонтификаций клиенту предлагается страница со списком url вида:
https://www.server.ru/user_n/file.zip
Как сделать так, чтобы клиент не нажимал все эти 20, 30, 100 ссылок по очереди, а например, указав папку на локальном диске перекачал бы все эти файлы за раз.
Вот такой пример:
Код

<?
  // открыли соединение
  $so = fsockopen("php.spb.ru", 80, &$errno, &$errstr, 30);
  // послали GET форму (простой URL + указание вирт. хоста)
  fputs($so,"GET /files/notepad.exe HTTP/1.0\nHOST: php.spb.ru\n\n");
  // читаем все, пока не наступит "конец заголовка" (т.е. начало документа)
  // если наступит, то со след. байта начнется документ
  while(fgets($so,2048)!="\r\n" && !feof($so));
  unset($buf);
  // читаем документ в переменную
  while(!feof($so)) $buf.=fread($so,2048);
// Готово. В переменной $buf храниться скаченный документ (т.е. файл)
  // Максимум можно читать порциями по 64K-1байт
  // закрываем сокет
  fclose($so);
  echo "Download fine, size ".strlen($buf)." bytes."; flush();
  // используем скаченный файл (в переменной) по назначению...
  $f=fopen("download.tmp","wb+");
  fwrite($f,$buf,strlen($buf));
  fclose($f);
?>

позволяет это сделать через HTTP, мне нужно тоже самое только через HTTPS!
Уже месяц не могу разобраться как это сделать программно - ведь через IE в ручном режиме всё это легко получается, как же сделать всё тоже самое используя РНР??? Может быть нужен другой синтаксис для
Код

 fputs($so,"GET /files/notepad.exe HTTP/1.0\nHOST: php.spb.ru\n\n");
Но какой???
Заранее спасибо!


Автор: Xena 29.3.2005, 01:08
Слава Будде!!!! smile

Дорогой IZ@TOP!
Благодаря твоей косвеной помощи (поиск в мануале implode вывёл меня окольными путями на нужную дорожку), я наконец-то нашёл ответ!
Все темы можно закрывать!

Задача решается так:

Всё дело в cURL!
Либо прикрутить его к PHP, либо использовать из командной строки.
в мануале всё подробно расписано, дистрибутивы здесь: http://curl.haxx.se/
Всем спасибо!!!!

Автор: IZ@TOP 29.3.2005, 07:58
Xena, как на счет примерчика?

Автор: Xena 29.3.2005, 09:50
Прмерчик сделаем.
На самом деле там всё "интуитивно понятно".
Точнее ничего не понятно, так как всю работу делает cURL и нужно лишь правильно его установить и подавать ему нужные параметры.
Значит, как гласит описание cURL нужно делать так:
в коммандной строке задаём (например):
Код


>C:\cURL\curl https://www.myserver.ru/myDocs/myzip.zip > myzip.zip

После выполнения этой комманды если всё настроено правильно CURL скачает файло и выдаст в консоль информацию об этом процессе.
Эту комманду можно выполнять и из под РНР и т.п.

Но есть и другой вариант, если в приведённом мной ранее примере для download через HTTP изменить 3-ю строчку на
Код

 $so = fsockopen("ssl://".$nSrv, 443, $errno, $errstr, 30);

где в переменной $nSrv записанно имя сервера
То, по идее, тоже всё должно работать. В общем эксперементируйте!
Удачи!

Автор: Xena 20.4.2005, 18:26
Если что непонятно, пишите письма.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)