Вызов функции через CURLOPT_WRITEFUNCTION

Pustota

Новичок
Вызов функции через CURLOPT_WRITEFUNCTION

Господа. Есть задача: вытягиваю файл с пом. curl. В нем надо убрать все переводы строк и сохранить в файл.
Так, как удаленный сервер поддерживает сжатие, то использую gzip:

PHP:
<?
function read_body($ch, $string)
{
    $length = strlen($string);
    echo str_replace("\n", "", $string);
    return $length;
}

$tmpfname=tempnam("/tmp", "foo");
$fp = fopen($tmpfname, "w");

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "$myfileurl");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'read_body');
curl_setopt($ch, CURLOPT_FILE, $fp);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
Но скрипт сохраняет в файле как есть, с переводом строк. Почему?
Платформа: Linux, поэтому думаю достаточно убирать \n.
 

Crys

Двинутый новичок
deleted.. ошибся

-~{}~ 06.10.10 19:30:

В общем, как я понял (может и ошибаюсь), CURLOPT_WRITEFUNCTION служит только для проверки длины контента и в связке с CURLOPT_FILE она не работает.

Штатными средствами получай контент и записывай в файл... )
 

Pustota

Новичок
Штатными - это Вы имеете ввиду не CURL'ом?

Просто вот так оно работает, но выводит в браузер, а не в файл.
PHP:
<?
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "$myfileurl");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_ENCODING, "gzip");
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'read_body');

curl_exec($ch);

curl_close($ch);
?>
А при кроне вообще можно направить вывод в файл. Тут проблема в том, что нужно еще и ручками запускать скрипт. А как вывод перенаправить в файл, да еще с обработкой - не знаю. :(
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Pustota
Но скрипт сохраняет в файле как есть, с переводом строк. Почему?
Потому что надо убрать CURLOPT_FILE, а в $fp гадить самостоятельно внутри функции read_body().

Платформа: Linux, поэтому думаю достаточно убирать \n.
Какое отношение клиентская платформа имеет к тому, какие переводы строк отдаст сервер?..
 

Pustota

Новичок
Просто я думал, что это уже на моей стороне делается.
Но за запись внутри функции спасибо. Не очень лаконичный вариант, но попробую. Думал через curl рулить выводом.
 

Crys

Двинутый новичок
Но за запись внутри функции спасибо. Не очень лаконичный вариант, но попробую. Думал через curl рулить выводом.
Так как для записи внутри функции придется использовать глобалсы, можно оформить это дело через классы. Те же яйца, только в профиль. Так локанично? :)
 
Сверху