2013-03-13 3 views
1

원격 사이트의 이미지를 저장해야합니다. 내 호스트는 file_get_contents를 허용하지 않으므로 컬을 시도하고 있습니다. 코드로 이미지를 수집하고 있습니다. 도와주세요!PHP의 원격 서버에서 이미지 저장

$destination = realpath("../../app/webroot/img/uploads") . "/" . $facebook_id . "." . "gif"; 

    // Delete previous pic 
    if (file_exists($destination)) { 
     unlink($destination); 
    } 

    // Save new pic 
    $remoteUrl = "https://graph.facebook.com/" . $facebook_id . "/picture"; 

    $ch = curl_init($remoteUrl); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
    $rawdata = curl_exec($ch); 
    curl_close($ch); 
    $fp = fopen($destination, 'w'); 
    fwrite($fp, $rawdata); 
    fclose($fp); 
+0

당신이 손상된 데이터를 보았다? 그것은 부분적인 이미지입니까? 길이가 0 인 파일? '$ rawdata'가 실제로 boolean인지 확인 했습니까? false로 말하면 어떻게 든 실패 했습니까? –

+0

페이스 북으로 일한 경험이 없으십니까? –

+0

@MarcB $ rawdata가 비어 있습니다. – user1871640

답변

1

$fp = fopen($destination, 'wb');

대신, 바이너리 파일로 엽니 다! :)

+0

는 WB와 노력 .gif 참고하기 위해 하드 코딩 확장을 긁어 될 이미지의 브라우저 – user1871640

+0

설정 CURLOPT_READFUNCTION 또는 CURLOPT_WRITEDATA 아마도? –

1

서버가 graph.facebook.com을 어떤 이유로 든 연결하지 않는 IPv6 주소로 확인하는 것으로 보입니다. 당신이 php5.3에있어 + 당신의 IPv4를 사용하여 컬을 강제로 시도 할 수있는 경우 :

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

+0

+1도 OP의 게시 오류를 기반으로 생각하고있었습니다. – thaJeztah

관련 문제