2011-12-26 1 views
3

が必要ですアップロードファイル...画像とソースの両方を試しましたが、両方とも同じエラーが発生します。任意の考え、助けて、私は数日間これで苦労してきたような提案をいただければ幸いです、それはこの難しいことではありませんようにそれはそう...がでFB結果に写真を投稿する私は、私が働いに非常に近いと思いますが、私は次のエラーを取得しておく、次のコードを持ってアップロードファイルエラー

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

$app_id = "MY APP ID GOES HERE"; 
$app_secret = "MY APP SECRET GOES HERE"; 
$post_login_url = "MY URL GOES HERE"; 

$album_name = "Test Album"; 
$album_description = "Blah Blah event Photos"; 

$photo_source = realpath("C:\\Users\\Public\\Pictures\\Sample Pictures\\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)){ 
    $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>"); 
} 
else { 
    $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); 
    $access_token = $params['access_token']; 
    echo "access_token ==>" . $access_token . '<br/><br/>'; 

    // Create a new album 

    $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)); 

    // Get the new album ID 
    $album_id = $result->id; //upload photo 
    echo "album_id ==>" . $album_id . '<br/><br/>'; 


    // Upload the photo 


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

    $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_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $args); 
    $data = curl_exec($ch); 
    echo "data ==>" . $data . "<br>"; 


} 
?> 
</body> 
</html> 

答えて

1

あなたは、ファイル名の代わりに、ファイルを使用していますグラフAPI呼び出しでそれ自身。

あなたがdocumentation herehereで説明したように、Facebookのクラスの新しいインスタンスを作成するときtrueに設定VAR fileUploadを設定する必要が@

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

私はちょっと混乱しています。@はエラーメッセージを抑制しているので、問題を修正することはできません。 私は自分のコードを変更します。array( 'メッセージ' => $のphoto_message、 'イメージ' =>ファイル($のphoto_source) ) ' = インライン' $ argsを、今、私のファイルのdoesntが存在することを不平を言っていますサーバー上で私はサーバーファイルがほしくない、私は ローカルファイルをしたいですか?私は何が欠けているのですか? – Jesse57

+0

OK、私はこれに私の答えを見つけたと思う。 fopenがローカルファイルを開くと言うと、スクリプトが実行されている場所にローカルであることを意味します。私の場合は、パパのサーバーです。私はこれがセキュリティ上の理由であると推測していますが、それ以外の理由は考えられません。誰かが私のためにこれを確認できますか?私はそれが正しいならば、別の角度からこれに接近しなければならないと思う。 – Jesse57

+1

@JesseCreamerローカルファイルとサーバーからのファイルを最初にアップロードするよりも必要な場合また、同じサーバー上のファイルを一般的にアップロードすることで可能です(セキュリティ上の理由だけでなく、実際には多くの複雑なフローが発生する可能性があります)。 –

4

でファイル名の前に付ける必要があります。また、photo_uploadパーミッションが必要です;-)

+0

configの場合、Facebookオブジェクトを初期化した後、 "$ facebook-> setFileUploadSupport = true"で設定できます。また、 "File_upload"ではなく "publish_stream"権限が必要です。 –

+0

あなたは私の一日を作った! –

関連する問題