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


Автор: Shadow_1512 16.2.2005, 14:49
Есть кусок кода, который отдает файл:


Код

header("Cache-Control: private");
       header("Content-Disposition: attachment; filename=" . basename($file));
       header("Content-Transfer-Encoding: binary");
       header("Content-Type: application/octet-stream");
       header("Content-Length: ". filesize($file));
       readfile("$file");


Под Мозиллой, Оперой, Нетшкафом все работает, выскакивает окошко, предлагающее сохранить файл и после подтверждения файл сохраняется. Под IE пишет тоже окошко выпрыгивает, но после подтверждения, IE подвисает и через некоторое время выдает, что "узел недоступен или не найден"

В чем трабл? Нутром чувствую, что в настройках сервера....

Автор: Axxent 16.2.2005, 18:33
Код

readfile("$file");


Неблагодарный код. Усиленно фильтруй $file, а то поломают. По поводу твоей проблемы - вроде все в коде верно, имхо осел глючит как всегда smile

Автор: Xena 1.3.2005, 23:57
Здравствуйте!
Мне нужна Ваша помощь в следующем вопросе.
На сайте http://php.spb.ru я нашёл пример загрузки бинарных файлов с сервера через HTTP:
Код

<?
  // открыли соединение
  $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);
?>

Этот пример работает успешно, но хотелось бы узнать, что делать, если используется не НТТР, а HTTPS? Какой должен быть синтаксис у строки?
Код

fputs($so,"GET /files/notepad.exe HTTP/1.0\nHOST: php.spb.ru\n\n");
Я понимаю, что и в fsockopen нужно передавать не 80, а 443 порт, но одного этого не достаточно. Буду очень признателен, если Вы подскажите, где можно найти соответствующую документацию.

Заранее спасибо.
С уважением, Логинов Ф.

Автор: IZ@TOP 2.3.2005, 09:39
Xena, думаю что здесь должно помочь использование библиотеки OpenSSL - http://ru3.php.net/manual/ru/ref.openssl.php .

Автор: Xena 2.3.2005, 20:24
Спасибо за сочувствие, IZ@TOP ,но сильно сомневаюсь, что поможет.
Предложенные там функции – инструмент для работы с сертификатами и ключами SSL, а мне всё это не нужно. Всё что мне требуется, это скачивать файлы с «чужого» веб-сервера, список которых я имею виде набора линков https://..... уже после того как все всех узнали. Приведённый мной выше пример может и работал бы, но он выдаёт ошибку «файл не найден». На сколько я понимаю, это связано с тем, что существует како-то alias, который преобразует путь к файлу вида https://myserver.ru/forall/mydoc/text.doc, к пути понятному серверу, например http://myserver.ru/secure_folder/forall/mydoc/text.doc, Возможно это я гоню, но понять механизм пока не удалось, встречаю в основном описание обмена сертификатами через SSL и прочую «аутоинтефикацию», но где же посмотреть конкретные примеры скриптов?!?!?!
Я могу (и так и делаю) вручную перекачивать файлы используя IE, но очень хочется этот процесс автоматизировать. Я начал с JavaScript, но мне категорично посоветовали ONLY PHP! Вот теперь и не знаю у кого допомоги просить!

Добавлено @ 20:28
ДА! Большое спасибо, что удалили мой аналогичный пост из другой ветки форума, оставив его только в форуме для начинающих! Так у меня в 300 раз больше шанс получить ответ! Ещё раз СПАСИБО!

Автор: IZ@TOP 3.3.2005, 00:21
Xena, немного не допонял смысла, прости. 2 На счет алиасов незнаю. 3 надо было создавать отдельную тему. Что в принципе ни когда не поздно. Но скорее всего многие как и я с данным вопросом не имели дела, и соответственно пропустят тему мимо.

PS тема перемещена.

Автор: Xena 5.3.2005, 23:08
С твоего согласия я создам новую тему smile

Автор: IZ@TOP 5.3.2005, 23:29
Xena, ну в общем-то я незря перенес эту в обычную smile Но если надо, создавай.

Автор: Xena 29.3.2005, 01:06
Слава богу!!!! smile

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

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

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

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