У PHP функции copy($from, $to) возникает ошибка, если в параметре $from
указать URL, в котором содержатся русские буквы, например:
$from = 'https://snipp.ru/demo/906/Ибисы бесплатные фотографии.jpg';
$to = __DIR__ . '/' . basename($from);
copy($url, $to);
Вернет ошибку:
Warning: copy(https://snipp.ru/demo/906/Ибисы бесплатные фотографии.jpg): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
Решение проблемы
URL-кодирование кириллицы с помощью функции rawurlencode():
function urlencode_str($matches)
{
$str = $matches[0];
$str = rawurlencode($str);
return $str;
}
$from = 'https://snipp.ru/demo/906/Ибисы бесплатные фотографии.jpg';
$from = preg_replace_callback('/[а-яА-Яёй\s]+/ui', 'urlencode_str', $from);
$to = __DIR__ . '/' . basename($from);
copy($from, $to);