Forum Webscript.Ru

Программирование => PHP => Тема начата: .Sm@sH. от 19 Июня 2002, 23:52:24

Название: Копирование файла с чужого сервака %)
Отправлено: .Sm@sH. от 19 Июня 2002, 23:52:24
Мне нужно сделать такой скрипт, который через простую форму получает ссылку на файло с другого сайта (типа, http://www.somehost.com/img/foto.jpg) и копирует его мне на сервак в заранее определенную папку.

Так конечно-же ничего не получается:

// Скрипт получает переменную $url с URL файла
copy($url, "мой путь");


В след. случае скрипт работает, но данные конечно-же записывает совсем не так как нужно (ведь это не текст уже...):


$url = "http://www.somehost.com/img/foto.jpg";
$f = fopen($url, "r");
$myf = fopen("dir/file.jpg", "w");
fwrite($myf, fread($f, 100000));
fclose($myf);
fclose($f);


Короче, можно ли такое вообще реализовать?:confused:
Название: Копирование файла с чужого сервака %)
Отправлено: Tankist от 20 Июня 2002, 00:41:04
Можно:))
$file=file("http://lreal.km.ru");
Теперь в переменной $file(array по поему должен получиться)
Главная страница lreal.km.ru:)
А далее что угодно делай с это $file...
Название: Копирование файла с чужого сервака %)
Отправлено: Меняздесьдавнонет от 20 Июня 2002, 01:08:56
в примере к функции fsockopen тоже есть решение.
Название: Копирование файла с чужого сервака %)
Отправлено: Tankist от 20 Июня 2002, 02:02:41
Цитировать
в примере к функции fsockopen тоже есть решение.


$fp = fsockopen ("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)
\\n";
} else {
    fputs ($fp, "GET / HTTP/1.0\\r\\nHost: [url]www.example.com\\r\\n\\r\\n[/url]");
    while (!feof($fp)) {
        echo fgets ($fp,128);
    }
    fclose ($fp);
}

Думаю ты об этом говоришь?
Название: Копирование файла с чужого сервака %)
Отправлено: .Sm@sH. от 20 Июня 2002, 10:03:44
Да нет... не в том проблема...
Что ерез file() или через fsockopen() - не пашет... А знаете почему? Мне-же нужно фало прочитать, а потом записать себе на сервак... А fwrite() и fputs() работают только ч текстовыми файлами, а не с двочными (как например ЖэПэГЭ (Jpg))
Название: Копирование файла с чужого сервака %)
Отправлено: Меняздесьдавнонет от 20 Июня 2002, 12:12:39
Гонишь.
Название: Копирование файла с чужого сервака %)
Отправлено: AlieN от 20 Июня 2002, 12:16:19
.Sm@sH.
[OFF]reinstall ruki.sys[/OFF]
Название: Копирование файла с чужого сервака %)
Отправлено: Ardzhan от 20 Июня 2002, 13:23:32
Из оффициального руководства!
fwrite -- Binary-safe file write
fwrite -- бинарная запись в файл
Цитировать
fwrite($myf, fread($f, 100000));

Откуда ты знаешь, что размер файла именно такой?
Хочешь грузить весь файл, лучше используй функцию file() - она загоняет весь файл в массив, а потом записывай массив!
P.S. Может все это не работать, если на хостинге закрыты исходящие коннекты (на многих бесплатных именно так)
Название: Копирование файла с чужого сервака %)
Отправлено: .Sm@sH. от 20 Июня 2002, 13:46:07
Вот мой код:


$url = "http://www.cs-mapping.com.ua/images/screens/de_ska1.jpg";
$file = fopen($url, "r");
$myfile = fopen("copy.jpg", "w");
$all = fread($file, 100000);
echo($all); // Тут рисунок выводится как нужно
fwrite($myfile, $all); // А тут записывается неправильно!!!
fclose($myfile);
fclose($file);
?>
 

Вот оригинал рисунка (точно так-же он и выводится echo() в скрипте:

(http://www.cs-mapping.com.ua/images/screens/de_ska1.jpg)

А вот как он записывается в файл:

(http://www.cs-mapping.com.ua/another/copy.jpg)

Что скажете на это?
Название: Копирование файла с чужого сервака %)
Отправлено: AlieN от 20 Июня 2002, 14:25:05
.Sm@sH.
Цитировать
не пашет... А знаете почему?

Потому что вы не читаете ФАКИ !
RTFM


Цитировать
Note: The mode may contain the letter \'b\'. This is useful only on systems which differentiate between binary and text files (i.e. Windows. It\'s useless on Unix). If not needed, this will be ignored.

Название: Копирование файла с чужого сервака %)
Отправлено: AlieN от 20 Июня 2002, 14:25:31
PS:
(http://perec.km.ru/copy.jpg)

$url = "http://www.cs-mapping.com.ua/images/screens/de_ska1.jpg";
$file = fopen($url, "r");
$myfile = fopen("copy.jpg", "wb");// RTFM
$all = fread($file, 100000);
echo($all); // Тут рисунок выводится как нужно
fwrite($myfile, $all); // И тут записывается правильно!!!
fclose($myfile);
fclose($file);
?>
Название: Копирование файла с чужого сервака %)
Отправлено: .Sm@sH. от 20 Июня 2002, 15:06:26
Да тормознул я - совсем забыл про binary (\'b\')

Кстати, RTFM это знаит (READ THE FUCKING MANUAL) или (READ THE FOLLOWING MANUAL)? :D