2011-12-29 21 views
0

OK、私はここのロープの最後です。私は私のウェブサイトのtmpフォルダに置く限り、jpgファイルを読んでいることを知っている次のコードを持っています。しかし、私はまだ迷惑なエラーを取得しています:FBに写真を投稿する必要がありますアップロードファイルにエラーがあります

{"error":{"message":"(#324) Requires upload file","type":"OAuthException"}} 

私は何が欠けていますか?それは単純なものでなければならないが、私がそれを理解することができれば、私はうんざりするだろう。どんな助けも大歓迎です!!!私はあなたのスクリプトを確認

<html> 
<head> 
<title>Photo Upload</title> 
</head> 
<body> 
<?php 

$app_id = "APP ID HERE"; 
$app_secret = "APP SECRET HERE"; 
$post_login_url = "LOGIN IN URL HERE"; 

$album_name = "My Silly Album"; 
$album_description = "Blah Blah Photos"; 

$photo_source = "tmp/Lighthouse.jpg"; 
$photo_message = 'Here is the lighthouse'; 

$code = $_REQUEST["code"]; 
echo "code ==>" . $code . '<br/><br/>'; 

//Obtain the access_token with publish_stream permission 
if(empty($code)){ 
    login($app_id, $post_login_url); 
} 
else { 
    $access_token = getAccessToken($app_id, $post_login_url, $app_secret, $code); 
    echo "access_token ==>" . $access_token . '<br/><br/>'; 

    $album_id = createAlbum($access_token, $album_name, $album_description); 

    echo "album_id ==>" . $album_id . '<br/><br/>'; 

    uploadPhoto($access_token, $album_id, $photo_source, $photo_message); 


} 

function login($app_id, $post_login_url){ 

    echo '***** login' . '<br/><br/>'; 

    $dialog_url= "http://www.facebook.com/dialog/oauth?" 
     . "client_id=" . $app_id 
     . "&redirect_uri=" . urlencode($post_login_url) 
     . "&scope=publish_stream,user_photos"; 
    echo("<script>top.location.href='" . $dialog_url . 
     "'</script>"); 
} 

function getAccessToken($app_id, $post_login_url, $app_secret, $code){ 

    echo '***** getAccessToken' . '<br/><br/>'; 

    $token_url= "https://graph.facebook.com/oauth/" 
     . "access_token?" 
     . "client_id=" . $app_id 
     . "&redirect_uri=" . urlencode($post_login_url) 
     . "&client_secret=" . $app_secret 
     . "&code=" . $code; 
    $response = file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 
    return($params['access_token']); 

} 

function createAlbum($access_token, $album_name, $album_description){ 
    // Create a new album 

    echo '***** createAlbum' . '<br/><br/>'; 

    $graph_url = "https://graph.facebook.com/me/albums?" 
     . "access_token=". $access_token; 

    $postdata = http_build_query(
     array(
      'name' => $album_name, 
      'message' => $album_description 
     ) 
    ); 

    $opts = array('http' => 
     array(
      'method'=> 'POST', 
      'header'=> 'Content-type: application/x-www-form-urlencoded', 
      'content' => $postdata 
     ) 
    ); 

    $context = stream_context_create($opts); 
    $result = json_decode(file_get_contents($graph_url, false, $context)); 

    // Return the new album ID 
    return($result->id); 
} 

function uploadPhoto($access_token, $album_id, $photo_source, $photo_message){ 
    // Upload the photo 

    echo '***** uploadPhoto' . '<br/><br/>'; 
    echo 'photo_source ==> ' . $photo_source . '<br/>photo_message ==> ' . $photo_message . '<br/>'; 

    $fh = fopen("$photo_source","r") or die("can't open $photo_source: $php_errormsg");; 
    while (!feof ($fh)) 
    { 
     $buffer = fgets($fh, 4096); 
     $file[] = $buffer; 
    } 

    fclose ($fh); 

    $args = array('message' => $photo_message, 
        'source' => $file 
    ); 

    $ch = curl_init(); 
    $url = 'https://graph.facebook.com/'.$album_id.'/photos?access_token='.$access_token; 
    echo "url ==>" . $url . '<br/><br/>'; 
    curl_setopt($ch, CURLOPT_URL, $url); 

    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_VERBOSE, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $args); 
    $data = curl_exec($ch); 
    echo "data ==>" . $data . "<br>"; 

    return($data); 

} 

?> 
</body> 
</html> 
+1

これは(22decからあなたの質問に順番にほぼ同じ)を使用すると、2日前に投稿さあなたの質問の重複しています。どうして? –

+0

私が間違って投稿した場合は申し訳ありませんが、コードが変更され、最初のエラーが異なっていました。だから、はい、それは2番目の問題と同じ問題でしたが、コードが変更されてしまい、新しいコードを再確認する最善の方法が不明でした。 – Jesse57

+0

[FBに写真を投稿するとアップロードファイルエラーが発生する]の複製が可能です(http://stackoverflow.com/questions/8639499/posting-photo-to-fb-results-in-requires-upload-file-error) –

答えて

5

は、ここに私のコードです。これらの変更を行う必要があり、cdeが正しく動作します! 100%それは私のために働いた!

$args = array('message' => $photo_message, 
     'image' => '@'.realpath($photo_source) 
); 

そしてもちろん、私はこのセクションを削除:

$fh = fopen("$photo_source","r") or die("can't open $photo_source: $php_errormsg");; 
    while (!feof ($fh)) 
    { 
     $buffer = fgets($fh, 4096); 
     $file[] = $buffer; 
    } 

fclose ($fh); 
+0

うわー、あなたは私を冗談していますか?私は運がないとこれを試したと思った!私は本当にあなたの助けに感謝し、最終的に私はこれが働いている!!これは実験として始まり、私が近づいていたことを知っていた命の使命として終わりました!ありがとうございました!ありがとうございました!ありがとうございました! – Jesse57

+0

あなたは幸せです! –

+0

画像の実際のパスに「@」を追加することについて、具体的なことを教えていただけますか? – Snehasish

関連する問題