С нами с 14.07.04
Сообщения: 221
Рейтинг: 59
|
Добавлено: 16/11/04 в 19:30 |
Нужно сохранить на сервере с помощью PHP скрипта файл изображения, находящийся на другом сервере с запрещенным хотлинком.
При таких условиях через fopen() открыть файл не возможно.
Поэтому использую такой код:
function save_img($src, $url){
$fp=fsockopen($url[host],80);
if(!$fp) die("Сервер не доступен!");
while(list($k,$s)=each($src)){
$get="GET ".$url[path].$s." HTTP/1.0\r\n".
"Accept: */*\r\n".
"Connection: Keep-Alive\r\n".
"Referer: ".$url[scheme]."://".$url[host].$url[path]."\r\n".
"Host: ".$url[host]."\r\n".
\r\n".
"\r\n";
fputs($fp,$get);
while(!feof($fp)){ passthru($fp); }
}
}
На выходе я получаю GET OK; другая HTTP муть, Content-Type: image/jpeg; перевод строки и последовательность байт, как раз и составляющих файл изображения.
Вопрос, как эту прелесть сохранить в виде графического файла на сервер? Функции fgets() и т.д. позволяют получать лишь ответ сервера в виде строковой переменной. Простое сохранение строки в файл с расширение jpeg, очевидно, результата не даст.
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 16/11/04 в 22:14 |
Все что после хедера (перевода пустой строки) и сохраняй в файл, это и будет тебе картинка.
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
1
|
|
|
С нами с 14.07.04
Сообщения: 221
Рейтинг: 59
|
Добавлено: 16/11/04 в 22:49 |
Stek, спасибо. Так я и делал, но по ошибке записывал и символ перевода строки, в результате файл не открывался в IE. От этого и родился бестолковый вопрос.
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 17/11/04 в 03:34 |
|
|
|
|
С нами с 03.04.03
Сообщения: 586
Рейтинг: 75
|
Добавлено: 17/11/04 в 12:29 |
я использую давно написанную функцию - работает на ура.
Код: |
function getfile( $server, $url) {
# server w/o http://
$fp = fsockopen( $server, 80, &$errno, &$errdesc);
if (!$fp) {
return(false);
} else {
$request = "GET $url HTTP/1.0\r\n";
$request .= "Host: $server\r\n";
$request .= "Referer: http://www.microsoft.com/index.htm\r\n";
$request .= "User-Agent: Internet Explorer\r\n\r\n";
fputs( $fp, $request);
$txt = fgets( $fp, 1024);
if (strpos($txt, " 200 ")==0) {
echo "getfile code not 200 - not found\n<br>";
if ( $txt = implode( "", file( $url ) ) ) {
echo "file imploded \n<br>";
return( $txt);
} else {
echo "can't get file anyway \n<br>";
return(false);
}
} else {
while (strlen($txt) > 2 ) {
$txt = fgets( $fp, 1024);
}
}
$txt = '';
$aaa = 0;
while (! feof ( $fp) and $aaa++ < 50 ) { $txt .= fread($fp, 9999999);}
fclose($fp);
if ( $aaa >= 50) {
echo "reading limit exceeded\n<br>";
}
return( $txt );
}
}
|
|
|
|
|
С нами с 15.09.03
Сообщения: 484
Рейтинг: 210
|
Добавлено: 17/11/04 в 15:22 |
его уже изобрел Manuel Lemos (phpclasses.org, http_class)
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 17/11/04 в 21:10 |
Disruptor: твой скрипт не будет брать Transfer-Encoding: chunked по моему. Ты никогда не замечал, что в вытянутом твоим скриптом файле иногда появляются "лишние" циферки? Например, нолик в самом конце или другие цифры посреди контента?
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 17/11/04 в 21:11 |
undef писал: | его уже изобрел Manuel Lemos (phpclasses.org, http_class) |
Во всяком случае я его не нашел, когда писал этот.
|
|
|
|
С нами с 03.04.03
Сообщения: 586
Рейтинг: 75
|
Добавлено: 17/11/04 в 21:18 |
не замечал. Вообще все, что с его помощью я до сих пор качал - делалось без проблем. Как будут - буду менять. Или обращусь за помощью сюда :-)
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |