2016-07-28 2 views
2

Итак, проблема в этой строкеfile_get_contents ложь, когда URL есть пробелы (закодировать все не работает)

$imageString = file_get_contents($image_url); 

с URLs, которые имеют космический характер он не работает. Но если я сделаю

$imageString = file_get_contents(urlencode($image_url)); 

Ничего не работает. Я продолжаю получать ложь в переменной.

ULR имеет вид:

https://s3-eu-central-1.amazonaws.com/images/12/Screenshot from 2016-04-28 18 15:54:20.png 
+0

Никогда не используйте пробелы в именах файлов в первую очередь !!! Только 'Windows' делает это по умолчанию. – JustOnUnderMillions

+0

Так оно работает, когда имена файлов изображений не имеют пробелов? – apokryfos

+0

Да, да. И когда я кодирую, все возвращает false. –

ответ

6

использовать эту функцию

function escapefile_url($url){ 
    $parts = parse_url($url); 
    $path_parts = array_map('rawurldecode', explode('/', $parts['path'])); 

    return 
    $parts['scheme'] . '://' . 
    $parts['host'] . 
    implode('/', array_map('rawurlencode', $path_parts)) 
    ; 
} 


echo escapefile_url("http://example.com/foo/bar bof/some file.jpg") . "\n"; 
echo escapefile_url("http://example.com/foo/bar+bof/some+file.jpg") . "\n"; 
echo escapefile_url("http://example.com/foo/bar%20bof/some%20file.jpg") . "\n"; 
+0

Это прекрасно работает! Спасибо –

+0

он отлично работает, спасибо –

0

Вы получаете ложное, потому что ваш URL ответ с состоянием 301 (перемещено), который перенаправляет вас. В любом случае, если вы все еще хотите что-то получить при доступе к этому URL-адресу, используйте контекст потока, чтобы следить за перенаправлением.

$context = stream_context_create(
    array(
     'http' => array(
      'follow_location' => false 
     ) 
    ) 
); 

$html = file_get_contents('http://www.example.com/', false, $context); 
Смежные вопросы