Сохранить на сервер бинарн. файл, полученный через сокет ?
Добавлено: 16 ноя 2004, 19:49
Нужно сохранить на сервере с помощью скрипта файл изображения, находящийся на другом сервере с запрещенным хотлинком.
При таких условиях через fopen() открыть файл не возможно.
Предположил такое решение:
function save_img($image_src, $url){
$fp=fsockopen($url[host],80);
if(!$fp) die("Сервер не доступен!");
$get="GET ".$url[path].$image_src." 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";
fputs($fp,$get);
passthru($fp);
}
На выходе я получаю GET OK; другая HTTP муть, Content-Type: image/jpeg; перевод строки и последовательность байт, как раз и составляющих файл изображения.
Вопрос, как эту прелесть сохранить в виде графического файла на сервер? Функции fgets() и т.д. позволяют получать лишь ответ сервера в виде строковой переменной. Простое сохранение строки в файл с расширение jpeg, очевидно, результата не даст.
Подскажите! Может есть какое другое решение, без сокет соединения?
Для сведения: оба сервера вроде на Unix подобных ОС и вроде как там бинарники от текстовых файлов не отличаются.
При таких условиях через fopen() открыть файл не возможно.
Предположил такое решение:
function save_img($image_src, $url){
$fp=fsockopen($url[host],80);
if(!$fp) die("Сервер не доступен!");
$get="GET ".$url[path].$image_src." 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";
fputs($fp,$get);
passthru($fp);
}
На выходе я получаю GET OK; другая HTTP муть, Content-Type: image/jpeg; перевод строки и последовательность байт, как раз и составляющих файл изображения.
Вопрос, как эту прелесть сохранить в виде графического файла на сервер? Функции fgets() и т.д. позволяют получать лишь ответ сервера в виде строковой переменной. Простое сохранение строки в файл с расширение jpeg, очевидно, результата не даст.
Подскажите! Может есть какое другое решение, без сокет соединения?
Для сведения: оба сервера вроде на Unix подобных ОС и вроде как там бинарники от текстовых файлов не отличаются.