copy() и File name too long in

JIEXA

Новичок
copy() и File name too long in

Запускаю код
PHP:
<?
copy("http%3A%2F%2Fchart.apis.google.com%2Fchart%3Fcht%3Dlc%26chs%3D500x200%26chxt%3Dx%2Cy%0D%26chxr%3D0%2C0%2C29%7C1%2C0%2C31.5%0D%26chd%3Dt%3A9.5%2C15.9%2C12.7%2C9.5%2C19.0%2C12.7%2C3.2%2C6.3%2C12.7%2C50.8%2C15.9%2C22.2%2C28.6%2C22.2%2C22.2%2C12.7%2C22.2%2C3.2%2C38.1%2C9.5%2C9.5%2C9.5%2C6.3%2C19.0%2C19.0%2C19.0%2C19.0%2C79.4%2C95.2%2C60.3%26chxl%3D0%3A%7C%7C%7C18+%D0%BD%D0%BE%D1%8F%7C%7C%7C%7C22+%D0%BD%D0%BE%D1%8F%7C%7C%7C%7C26+%D0%BD%D0%BE%D1%8F%7C%7C%7C%7C30+%D0%BD%D0%BE%D1%8F%7C%7C%7C%7C04+%D0%B4%D0%B5%D0%BA%7C%7C%7C%7C08+%D0%B4%D0%B5%D0%BA%7C%7C%7C%7C12+%D0%B4%D0%B5%D0%BA%7C%7C%7C%7C%26chco%3D7797bf%26chg%3D10%2C20", "newfile.png");
?>

Пипишет ошибку: failed to open stream: File name too long

Пробывал заюзать такую функцию, тоже не получилось:

PHP:
<?
function down_pic($url, $to)
{
	$ch = curl_init($url);

	curl_setopt ($ch, CURLOPT_HEADER, 0);
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);     
	
	file_put_contents($to, curl_exec($ch));
	
	curl_close ($ch);
}
?>
 

SiMM

Новичок
JIEXA, а Вы уверены, что в Вашей файловой системе вообще есть такой странный файл?
 

A1x

Новичок
чума :) а что в первом аргументе? Вы думаете это урл?
 

JIEXA

Новичок
это УРЛ закодированный функции urlencode.. если ее не юзать, то тогда ругаеться на синтаксис
 

tony2001

TeaM PHPClub
JIEXA
попробуй открыть консоль и набрать:
Код:
copy http%3A%2F%2Fchart.apis.google.com%2Fchart%3Fcht%3Dlc%26chs%3D500x200%26chxt%3Dx%2Cy%0D%26chxr%3D0%2C0%2C29%7C1%2C0%2C31.5%0D%26chd%3Dt%3A9.5%2C15.9%2C12.7%2C9.5%2C19.0%2C12.7%2C3.2%2C6.3%2C12.7%2C50.8%2C15.9%2C22.2%2C28.6%2C22.2%2C22.2%2C12.7%2C22.2%2C3.2%2C38.1%2C9.5%2C9.5%2C9.5%2C6.3%2C19.0%2C19.0%2C19.0%2C19.0%2C79.4%2C95.2%2C60.3%26chxl%3D0%3A%7C%7C%7C18+%D0%BD%D0%BE%D1%8F%7C%7C%7C%7C22+%D0%BD%D0%BE%D1%8F%7C%7C%7C%7C26+%D0%BD%D0%BE%D1%8F%7C%7C%7C%7C30+%D0%BD%D0%BE%D1%8F%7C%7C%7C%7C04+%D0%B4%D0%B5%D0%BA%7C%7C%7C%7C08+%D0%B4%D0%B5%D0%BA%7C%7C%7C%7C12+%D0%B4%D0%B5%D0%BA%7C%7C%7C%7C%26chco%3D7797bf%26chg%3D10%2C20 newfile.png
работает?
 

A1x

Новичок
похоже copy() думает что это ей подсунули такое имя файла.
Можно попробовать кодировать только ту часть урла которая после chart.apis.google.com/
 

tony2001

TeaM PHPClub
>похоже copy() думает что это ей подсунули такое имя файла.
еще один..
попробуй сделать то же в консоли.
работает? почему?
 

A1x

Новичок
при чем тут это? Какое отношение имеет консольное copy к пхпшной функции?

-~{}~ 16.12.07 22:14:

tony2001
сравните лучше
<? copy('http://google.com', 'r.html'); ?>
и
<? copy(urlencode('http://google.com'), 'r.html'); ?>
 

tony2001

TeaM PHPClub
я объясню причём:
есть функция copy для работы с файловой системой и есть функции для работы с сокетами и протокол HTTP, который чуть сложнее, чем просто 'GET / HTTP/1.0'.

и даже учитывая тот факт, что copy() таки работает через HTTP-враппер, лучше использовать соотв-щий инструмент, а не забивать и гвозди, и винты, и болты молотком только потому, что и так тоже работает.
 

A1x

Новичок
забивать маленький гвоздь пневмокувалдой тоже вряд ли оправдано хотя можно. Зачем-то же сделали эти врапперы.
Может чтобы просто забрать файл который точно лежит по определенному адресу copy будет вполне достаточно. Не городить же каждый раз огород из curl'а..

В данном случае проблема автора была в том что и в copy и в curl имена парсятся на предмет наличия подстроки схемы типа http://. Здесь copy ее не нашел и решил что ему передали имя файла со всеми вытекающими. curl соответственно тоже впал в непонятку
 

Фанат

oncle terrible
Команда форума
Зачем-то же сделали эти врапперы.
Это очень большой и сложный философский вопрос.
Есть мнение, что их сделали для людей, которые понимают, что делают. Но в результате, ими пользуются в основном люди, которые не отличают файл на диске от урла в вебе.
 
Сверху