Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скачать файл без помощи браузера
 
 автор: evgen   (08.02.2011 в 15:04)   письмо автору
 
 

Подскажите плз алгоритм!
На моем сервере лежит скрипт, запускаю его, ввожу адрес файла для скачки, файл скачивается на мой сервер. Всё просто! Казалось бы... но мысли, как это реализовать, пока не приходят =\

Скачка html страниц с отправкой заголовка, чтение, запись в файл и тп - работает без проблем. Но какая процедура с другими форматами и возможно большими размерами ..? Непонятно...

   
 
 автор: cheops   (08.02.2011 в 15:07)   письмо автору
 
   для: evgen   (08.02.2011 в 15:04)
 

Что-то не очень понятно, имеется в виду, чтобы файл не отображался браузером, а предоставлялось окно для его сохранения на машине пользователя? Или имеется в виду что-то другое?

   
 
 автор: Evgen   (08.02.2011 в 15:11)   письмо автору
 
   для: cheops   (08.02.2011 в 15:07)
 

Сохраняем не на локальной машине, а на сервере. Запускаю скрипт с сервера, показываю где взять файл, а он его берет и у себя (на сервере) сохраняет.

PS. Удивлен и признателен за мгновенный ответ =)

PPS. Форматы файлов - zip, rar, exe и тп

   
 
 автор: Trianon   (08.02.2011 в 15:29)   письмо автору
 
   для: Evgen   (08.02.2011 в 15:11)
 

В самом примитивном варианте это проделывается вызовом функции copy().
И от формата файла не зависит.

   
 
 автор: Evgen   (08.02.2011 в 15:37)   письмо автору
 
   для: Trianon   (08.02.2011 в 15:29)
 

copy( ) для файла на удаленной машине? Как это?


evgen (08.02.2011 в 15:04) ...ввожу адрес файла для скачки, файл скачивается на мой сервер...

   
 
 автор: cheops   (08.02.2011 в 15:55)   письмо автору
 
   для: Evgen   (08.02.2011 в 15:37)
 

Примерно так
<?php
  copy
("http://site.dev/image.gif""image.gif");
?>

Первый параметр - сетевой адрес файла, а второй - локальный путь, куда этот файл должен быть сохранён.

   
 
 автор: Evgen   (08.02.2011 в 16:06)   письмо автору
 
   для: cheops   (08.02.2011 в 15:55)
 

ОК! Спасибо, бум пробовать!

   
 
 автор: Evgen   (09.02.2011 в 04:13)   письмо автору
 
   для: cheops   (08.02.2011 в 15:55)
 


<?
function get_content ($host_name$path)
         {
         global 
$text;

         
$text "";
         
$fp fsockopen ($host_name80$errno$errstr30);
         if (!
$fp)
         {
         exit(
"$errno ($errstr)");
         }
         else
         {
         
$headers "GET $path HTTP/1.1\r\n";
         
$headers .= "Host: $host_name\r\n";
         
$headers .= "Accept: *\r\n";
         
$headers .= "Accept-Charset: *\r\n";
         
$headers .= "Accept-Encoding: deflate\r\n";
         
$headers .= "Accept-Language: ru\r\n";
         
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
         
$headers .= "Connection: Close\r\n\r\n";

         
fwrite ($fp$headers);
               while (!
feof($fp))
               {
               
//$text .= fgets ($fp, 1024);
               
$text .= fread ($fp1024);
               }
         
fclose ($fp);
         }
         return;
       }
?>


Файл (*.jpg) скачивается, сохраняется, размер сохраненного файла соответствует источнику, но файл не открывается ("Unknown Format").
Подозреваю, что функции fgets (fread) либо неуместны, либо неправильно применены...

PS. Вариант COPY ( ) работает, если запускаю его на своей машине (т.е. заголовок в сеть шлет мой браузер), а как к нему привязать header, если скрипт лежит на сервере - не понятно ... уже голову сломал....

   
 
 автор: Trianon   (09.02.2011 в 10:43)   письмо автору
 
   для: Evgen   (09.02.2011 в 04:13)
 

функция fread применена правильно.
Неправильно применеы поля заголовка. Списаны откуда-то совершенно бездумно.

Неоднократно говорил всем, не трогайте fsockopen() не разобравшись в протоколе.
Протокол http сложный, а не простой, как многие пытаются показать.
Тем более, что в php клиентская его часть реализована в обертках(wrappers) файловых функций и в инструменте curl,
а значит можно воспользоваться уже написанным.


Что значит "а как к нему привязать header, если скрипт лежит на сервере"?
Что за header? Почему его требуется к чему-то вязать?

   
 
 автор: Evgen   (10.02.2011 в 10:39)   письмо автору
 
   для: Trianon   (09.02.2011 в 10:43)
 

To cheops & Trianon
Всё заработало! Большое спасибо за помощь!
Подействовала критика - "не трогайте fsockopen() не разобравшись в протоколе...", - принял как руководство к действию =)
Поэтому пришлось разобраться с функцией copy( ), всё отлично работает на сервере!

PS. "Неправильно применеы поля заголовка. Списаны откуда-то совершенно бездумно..." - "РНР5 на примерах", М. Кузнецов, И. Симдянов, С. Голышев, 2006, стр.335

   
 
 автор: Trianon   (10.02.2011 в 13:14)   письмо автору
 
   для: Evgen   (10.02.2011 в 10:39)
 

>>PS. "Неправильно применеы поля заголовка. Списаны откуда-то совершенно бездумно..."
> "РНР5 на примерах", М. Кузнецов, И. Симдянов, С. Голышев, 2006, стр.335

Ну и что с того? Разве это повод списывать код без того, чтобы вникать в него?

Из аннотации книги "PHP5 на примерах".
...используемые в книге примеры взяты из реальтной практики Web-программирования и в большинстве своем являются ответами на многочисленные вопросы посетителей форума PHP на сайте www.softtime.ru? созданного и поддерживаемого авторами, а также на вопросы читателей их предыдущих книг.

Так что все вполне закономерно - идея требовать с авторов книги ответ за работоспособность кода в откликах на форуме, которые давались его посетителями - на мой взгляд, крайне сомнительная идея.

   
 
 автор: Evgen   (11.02.2011 в 20:23)   письмо автору
 
   для: Trianon   (10.02.2011 в 13:14)
 

Да я, собственно, ничего и не требовал от Вас =)
Ответил только на "откуда списано". Использую этот "списанный" код (после обдумывания) для граббера html-страниц. Работает всё отменно!
Вопрос возник, когда не знал, как скачивать файлы из инета на сервер. Думал, что должно быть нечто подобное вышеприведенному фрагменту кода.
Поэтому: повторное, искреннее спасибо!
Респект авторам (и книги и форума).

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования