Как загружать файлы с других сайтов?

fanofaria

Новичок
Подскажите пожалуйста, есть ли возможность UPLOAD'ить на сайт файлы с других сайтов, а не с компа т.е. чтобы пользователь вводил URL файла? Как это можно сделать?
 

kolobok

fPanel Billing Coder
fanofaria
Подскажите пожалуйста, есть ли возможность UPLOAD'ить на сайт файлы с других сайтов, а не с компа т.е. чтобы пользователь вводил URL файла? Как это можно сделать?
можно.
считываешь файл. записываешь его у себя.
 

fanofaria

Новичок
я не силен в php, может кто знает где есть исходники похожего скрипта или кто-нибудь подскажет его код? заранее благодарен! :)
 

zaartix

Новичок
Самый простой способ:
$s=fopen($url,'r');
$soderzhimoe_faila = fread($s,99999); // 99999 количество байт, которое нужно считать.
fclose($s);

Если файлы большие, мне кажется лучше fsockopen использовать.
 

kost

Новичок
Простите за ламерский вопрос, но чем copy() не устраивает?
 

zaartix

Новичок
kost
ну это зависит от того, зачем ему содержимое файла и куда он его хочет деть.
 

kost

Новичок
zaartix
> Если файлы большие, мне кажется лучше fsockopen использовать.
А это почему?
 

fanofaria

Новичок
народ, может кто знает где есть похожий скрипт? потому что я что-т вобще ничего понять не могу (я с php не дружу ;) )
 

twistfire

Новичок
http://netgen.com.ua/articles/article.php?id=27 тут простой скрипт, хотя тоже советую - fsockopen
 

zaartix

Новичок
kost
а потому как через fread надо указывать размер, который тебе не известен. А через fsockopen читаешь все, что идет после заголовков.

Можно вообще изгольнуться :)
$soderzhimoe_faila = implode("\n",file($url));
правда сомневаюсь, что получится binary safe
 

fanofaria

Новичок
twistfire тебе огромное спасиба! работает!
ВОТ СКРИПТ ЕСЛИ КОМУ ПОНАДОБИТСЯ:
<?php
if(isset($HTTP_GET_VARS['name']))
{
$fn = $HTTP_GET_VARS['name'];
$handle = fopen ($fn, 'rb');
$contents = "";
if(!$handle)
echo 'Error open source file';
else
{
while(!feof($handle))
{
$data = fread($handle, 8192);
$contents .= $data;
}
fclose ($handle);
// './download/' можно заменить, например, на $HTTP_GET_VARS['path']
$handle = fopen ('./download/' . basename($fn), 'wb');
if(!$handle)
echo 'Error create local file';
else
{
fwrite($handle, $contents);
fclose($handle);
echo 'Transfer complete';
}
}
}
?>

вот только осталось форму сделать для передачи.
может кто шарит?
нужно поле для ввода ссылки и кнопка "upload"
при нажатии "upload" форма должна передавать в name ссылку из поля для URL. А вот как это зделать? ;)

-~{}~ 25.01.06 11:26:

а вот и код формы (наз-ся догадался сам как сворганить :) ):
<FORM action="URL файла с php кодом" method="get">
<INPUT type="text" id="name" name="name">

<INPUT type="submit" value="Отправить">
</P>
</FORM>

-~{}~ 25.01.06 12:11:

хм, вот блин. дома работает а закачиваешь на сервак и при закачке выдает:
Warning: fopen(http://schwarzenegger.by.ru/Wallpapers/208.jpg): failed to open stream: Permission denied in /home/тра тата WWW/images/1/up3.php on line 18
Error open source file
 

kabachok

Новичок
вероятно нету прав :)
я щас как раз пишу скрипт в котором необходимо по ссылкам загрузать картинки, использую fopen() но у меня картинки маленького размера, не больше 5 кил
 

phprus

Moderator
Команда форума
zaartix
Можно вообще изгольнуться
$soderzhimoe_faila = implode("\n",file($url));
правда сомневаюсь, что получится binary safe
Ты немножко не прав. Функция file не удаляет символы перевода строки из строк (подробнее http://ru2.php.net/file) так что нужно использовать вместо разделителя в функции implode пустую строку:
$soderzhimoe_faila = implode("",file($url));
тогда и бинарные файлы будут нормально скачиваться.
 

fanofaria

Новичок
с помощью fopen ничего не выходит.
можно попробовать с помощью такого:

$fp = fsockopen ("www.сервер откуда качаем.ru", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
а дальше нужно прочитать файл (путь к файлу содержится например в $fname= '/имя файла.txt'; )
поидее это делается с помощью:
while (!feof ($адресфайла)) {
$buffer = fgets($адресфайла, 4096);
echo $buffer;
}
fclose ($fp);
}
а вот как теперь это связать? т.е. как правельно задать $адресфайла ? может кто знает? подскажите пожалуйста :)
 

Solid

Drosera anglica
Самое лучшее это cURL();
Однозначно!

-~{}~ 25.01.06 19:06:

PHP:
function download_pretending($url) {
   $ch = curl_init();
   curl_setopt ($ch, CURLOPT_URL, $url);
   curl_setopt ($ch, CURLOPT_HEADER, 0);
   curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
   $result = curl_exec ($ch);
   curl_close ($ch);
   return $result;
}
Использовать:
PHP:
echo download_pretending('http://phpclub.ru/talk/');
 

Myst

Новичок
white phoenix уже написал оптимальное решение по етому вопросу , вот один из примеров:

PHP:
<?
$get = file_get_contents("http://***********.php"); // урл скачиваемого файла
$fp=fopen("c:/www/file.php","w"); // сохраняем файл на диск
fwrite($fp,$get);

print $get; // Выводим содержимое скачаного файла
fclose($fp);
?>
 
Сверху