2014-02-15 3 views
0

Я написал этот код для загрузки изображения из instagram. изображение загружено, но оно имеет некоторые ошибки. это означает, что я могу загрузить изображение, но я не могу открыть егоошибка загрузки изображения с использованием php-скрипта

<?php 
    $linktopage = 'http://instagram.com/p/jTh1cBHG36/'; 

    $sourcecode = file_get_contents($linktopage); 

    $sourcecode = substr($sourcecode , strpos($sourcecode, 'og:image') + 19, strlen($sourcecode)); 
    $sourcecode = substr($sourcecode , 0 , strpos($sourcecode, '"')); 
    $name= substr($sourcecode , strpos($sourcecode, 'com/') + 4, strlen($sourcecode)); 


    $fileToSend = $sourcecode; 

    header('Content-type: image/jpeg'); 
    header('Content-Disposition: attachment; filename='.$name.'"'); 
    header("Content-Length: ". file_size($fileToSend)); 

    readfile($fileToSend); 

?> 
+2

какие именно ошибки вы получаете? –

+0

, когда я открываю программу просмотра фотографий, говорит мне, что этот файл не может быть указан – user3313804

+0

- это '$ sourcecode' на самом деле правильный, абсолютный URL-адрес файла изображения? Если вы измените тип содержимого на «text/plain» и посмотрите, что вы получаете, это фактические двоичные данные или сообщение об ошибке? или - двоичные данные и сообщение об ошибке в конце или в начале? –

ответ

0

Комментарий к Content-Length линии, и он будет работать нормально:

//header("Content-Length: ". file_size($fileToSend)); 

Правильное имя функции filesize (и я не уверен, он будет работать с вашим URL-адресом).

Я также вижу, что вам не хватает цитаты после . Оно должно быть:

header('Content-Disposition: attachment; filename="'.$name.'"'); 

Таким образом, рабочая версия кода будет:

$linktopage = 'http://instagram.com/p/jTh1cBHG36/'; 

    $sourcecode = file_get_contents($linktopage); 

    $sourcecode = substr($sourcecode , strpos($sourcecode, 'og:image') + 19, strlen($sourcecode)); 
    $sourcecode = substr($sourcecode , 0 , strpos($sourcecode, '"')); 
    $name= substr($sourcecode , strpos($sourcecode, 'com/') + 4, strlen($sourcecode)); 


    $fileToSend = $sourcecode; 

    header('Content-type: image/jpeg'); 
    header('Content-Disposition: attachment; filename="'.$name.'"'); 
    //header("Content-Length: ". filesize($fileToSend)); 

    readfile($fileToSend); 
+0

К сожалению, это не сработало:/ – user3313804

+0

COUNTER-Length в любом случае переопределяется apache, поэтому, если вы подаете иск против классического компилятора php + apache, никогда не устанавливайте его. –

+0

так что я должен использовать вместо этого? – user3313804

0

Проблема происходит из-за ошибки опечатка.

опечатка ошибка была в следующей строке:

header('Content-Disposition: attachment; filename='.$name.'"'); 

В связи с неправильным форматом имени «_» получал добавляется расширение файла. более

Одно дополнение в коде для длины контента, который является 2 линия только:

$head = array_change_key_case(get_headers($sourcecode, TRUE)); 
$filesize = $head['content-length']; 

Final Рабочий код с ошибкой опечатка исправлено:

<?php 
    $linktopage = 'http://instagram.com/p/jTh1cBHG36/'; 
    $sourcecode = file_get_contents($linktopage); 
    $sourcecode = substr($sourcecode , strpos($sourcecode, 'og:image') + 19, strlen($sourcecode)); 
    $sourcecode = substr($sourcecode , 0 , strpos($sourcecode, '"')); 
    $name= substr($sourcecode , strpos($sourcecode, 'com/') + 4, strlen($sourcecode)); 
    $fileToSend = $sourcecode; 

    $head = array_change_key_case(get_headers($sourcecode, TRUE)); 
    $filesize = $head['content-length']; 

    header("Content-type: image/jpeg"); 
    header("Content-Disposition: attachment; filename=".$name); 
    header("Content-Length: ". $filesize); 

    readfile($fileToSend); 
?> 
Смежные вопросы