Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удалённый файл 
V
    Опции темы
gta4kv
Дата 14.10.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



сабж,

как скопировать файл с удаленного хоста, к себе?

smile 
PM MAIL   Вверх
flashaa
Дата 14.10.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Если удаленный хост доступен через сокеты, то 

Код

$content = file_get_contents('http://yandex.ru');


теперь полученный контент пиши в файл

Код

$f = fopen('filename.ext', 'w');

fwrite($f, $content);


PM MAIL   Вверх
gta4kv
Дата 14.10.2007, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(flashaa @ 14.10.2007,  15:20)
Если удаленный хост доступен через сокеты, то 

Код

$content = file_get_contents('http://yandex.ru');


теперь полученный контент пиши в файл

Код

$f = fopen('filename.ext', 'w');

fwrite($f, $content);

 smile  smile 

спс smile


пс. 
Код

function upload_url($url) {
     $file = file_get_contents($url);
     $filen = explode('/',$url);
     $fp = fopen('tmp/'.$filen[sizeof($filen)-1],'w');
     fwrite($fp,$file);
     fclose($fp);
}


Может кому пригодитсо. smile
PM MAIL   Вверх
gta4kv
Дата 14.10.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Не хочу создавать новую тему, 

хочу спросить, как посчитать вес удаленного файла, не скачивая его себе.
PM MAIL   Вверх
Всемогущий
Дата 14.10.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



и ещё не маловажный вопрос
а ели файл весит более 8 метров то 

Цитата(flashaa @  14.10.2007,  17:20 Найти цитируемый пост)
Код

$content = file_get_contents('http://yandex.ru');

захлебнётся.




--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
gta4kv
Дата 14.10.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(Всемогущий @ 14.10.2007,  16:17)
и ещё не маловажный вопрос
а ели файл весит более 8 метров то 

Цитата(flashaa @  14.10.2007,  17:20 Найти цитируемый пост)
Код

$content = file_get_contents('http://yandex.ru');

захлебнётся.

Блин, поэтому мне и надо взвесить файл, у меня по плану вообще не больше двух метров.
PM MAIL   Вверх
vasac
Дата 14.10.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



gta4kv, в общем случае никак.
PM WWW   Вверх
gta4kv
Дата 14.10.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(vasac @ 14.10.2007,  16:44)
gta4kv, в общем случае никак.

Супер.. 

Проблема в том что URL на файл вводить - юзер.
Проверять на хосте - глупо, а вдруг там 100 мб?


Если, как сказал Всемогущий, он захлебнется если больше 8-и мб, то конечно норм, но это надо еще будет дождаться пока он будет get'aть эти 8мб..

Это сообщение отредактировал(а) gta4kv - 14.10.2007, 16:51
PM MAIL   Вверх
flashaa
Дата 14.10.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



Тогда можно не весь файл запрашивать, а фрагмент.. и тут же писать в файл.
Проверку более 2 мб можно поставить....
8 мб можно будет и поменять в php.ini http://ru2.php.net/manual/ru/ini.core.php#ini.memory-limit

Код

$fsource = fopen('http://yandex.ru', 'r');
$fdest  = fopen('file.ext', 'w');

while (!feof($fsource)) {

$buf = fread($fsource, 1024);
fwrite($fdest, $fbuf);

}




Это сообщение отредактировал(а) flashaa - 14.10.2007, 17:31
PM MAIL   Вверх
gta4kv
Дата 14.10.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(flashaa @ 14.10.2007,  17:26)
Тогда можно не весь файл запрашивать, а фрагмент.. и тут же писать в файл.
Проверку более 2 мб можно поставить....
8 мб можно будет и поменять в php.ini http://ru2.php.net/manual/ru/ini.core.php#ini.memory-limit

Код

$fsource = fopen('http://yandex.ru', 'r');
$fdest  = fopen('file.ext', 'w');

while (!feof($fsource)) {

$buf = fread($fsource, 1024);
fwrite($fdest, $fbuf);

}


Ну а смысл читать только два метра?

Будет просто не полный файл, его же не проверишь полный ли он или нет, что бы выдать юзеру результат
PM MAIL   Вверх
SelenIT
Дата 14.10.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(gta4kv @  14.10.2007,  16:12 Найти цитируемый пост)
как посчитать вес удаленного файла, не скачивая его себе

Если сервер честный, то он обязан сам это сказать в заголовке Content-length. А чтоб получить заголовки, не скачивая самого файла, нужно через сокет сделать запрос HEAD. Например, так (по мотивам этого):
Код

function simplestRemoteFileSize($url) {
   $url_parts = parse_url($url);
   $fp = fsockopen($url_parts['host'], 80, &$errno, &$errstr, 5);
   if (!$fp) return false;
   fputs($fp,"HEAD ".$url_parts['path']." HTTP/1.0\r\nHost: ".$url_parts['host']."\r\n\r\n");
   $response = '';
   while(!feof($fp)) $response .= fgets($fp,128);
   fclose($fp);
   if (preg_match("/content-length: (\d+)/i", $response, $match)) return $match[1];
   else return false;
}

$fsize = simplestRemoteFileSize('http://forum.vingrad.ru/style_images/2/menu/menu_forum.gif');

echo $fsize ? "Размер файла: $fsize байт" : "Не определятся";

Более сложные, но и более надежные примеры есть, например, в комментах к ф-ции filesize в мане...

Цитата(gta4kv @  14.10.2007,  17:53 Найти цитируемый пост)
Ну а смысл читать только два метра?

Пример flashaa как раз читает весь файл - небольшими кусками, не переполняя память;).

Только надо учитывать, что оба варианта - и через file_get_contents, и через fopen - будут работать, только если это разрешено в настройках.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
gta4kv
Дата 14.10.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(SelenIT @ 14.10.2007,  18:24)
Цитата(gta4kv @  14.10.2007,  16:12 Найти цитируемый пост)
как посчитать вес удаленного файла, не скачивая его себе

Если сервер честный, то он обязан сам это сказать в заголовке Content-length. А чтоб получить заголовки, не скачивая самого файла, нужно через сокет сделать запрос HEAD. Например, так (по мотивам этого):
Код

function simplestRemoteFileSize($url) {
   $url_parts = parse_url($url);
   $fp = fsockopen($url_parts['host'], 80, &$errno, &$errstr, 5);
   if (!$fp) return false;
   fputs($fp,"HEAD ".$url_parts['path']." HTTP/1.0\r\nHost: ".$url_parts['host']."\r\n\r\n");
   $response = '';
   while(!feof($fp)) $response .= fgets($fp,128);
   fclose($fp);
   if (preg_match("/content-length: (\d+)/i", $response, $match)) return $match[1];
   else return false;
}

$fsize = simplestRemoteFileSize('http://forum.vingrad.ru/style_images/2/menu/menu_forum.gif');

echo $fsize ? "Размер файла: $fsize байт" : "Не определятся";

Более сложные, но и более надежные примеры есть, например, в комментах к ф-ции filesize в мане...

Цитата(gta4kv @  14.10.2007,  17:53 Найти цитируемый пост)
Ну а смысл читать только два метра?

Пример flashaa как раз читает весь файл - небольшими кусками, не переполняя память;).

Только надо учитывать, что оба варианта - и через file_get_contents, и через fopen - будут работать, только если это разрешено в настройках.

супер, спасибо smile
PM MAIL   Вверх
vasac
Дата 14.10.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



На скачиваемый файл Content-Length даст. На тот же "http://yandex.ru" не даст.
Главное помнить, что вы не файлы скачиваете, а запрашиваете документы. Если документ создается динамически, то никакого заранее известного размера у него быть не может. Запросив с помощью HEAD вы можете получить размер одного документа, а когда начнете его скачивать, совершенного другой.
PM WWW   Вверх
SelenIT
Дата 14.10.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(vasac @  14.10.2007,  18:47 Найти цитируемый пост)
Главное помнить, что вы не файлы скачиваете, а запрашиваете документы.

Это безусловно. Как некогда любили говорить на PHPclub'е, в HTTP файлов нет...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
gta4kv
Дата 14.10.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



При совсем большом файле - умирает просто.. :(

Цитата

На скачиваемый файл Content-Length даст. На тот же "http://yandex.ru" не даст.
Главное помнить, что вы не файлы скачиваете, а запрашиваете документы. Если документ создается динамически, то никакого заранее известного размера у него быть не может. Запросив с помощью HEAD вы можете получить размер одного документа, а когда начнете его скачивать, совершенного другой.


У меня url строчка, если он не находить расширение файла - то посылает.. 

Это сообщение отредактировал(а) gta4kv - 14.10.2007, 19:08
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0688 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.