Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Facebook Graph API将照片上载到相册_Php_Facebook - Fatal编程技术网

Php 如何使用Facebook Graph API将照片上载到相册

Php 如何使用Facebook Graph API将照片上载到相册,php,facebook,Php,Facebook,代码如下: $file= 'bbbb.jpg'; $data = array( basename($file) => "@".realpath($file), "caption" => "Uploaded using graph api", "aid" => '13595', "access_token" => $accessToken, 'method

代码如下:

$file= 'bbbb.jpg';
$data = array(
            basename($file) => "@".realpath($file),
            "caption" => "Uploaded using graph api",
            "aid" => '13595',
            "access_token" => $accessToken,
            'method' => 'photos.upload'
);
$sds =$facebook->api($data);
这就是错误所在

未捕获的CurlException:26:创建formpost数据失败


怎么办?

您的$data数组应该有“message”而不是“caption”, 另外,删除“帮助”、“方法”和“访问令牌”
您的$data必须包含文件数据和“message”,即它

$sds =$facebook->api('/me/13595/photos', 'POST', $data);
其中,不使用13595,只需将变量与相册辅助一起使用即可

此外,如果需要,访问令牌最好附加到api uri,如下所示:

$sds =$facebook->api('/me/13595/photos?access_token='.$access_token, 'POST', $data);

另外,如果PHPSDK不适合您,那么如果您的php安装支持,我已经成功地使用了cURL。在这种情况下,请参见位于

的cURL示例,这里有一些使用Graph API上传照片的各种方法。这些示例假设您已实例化$facebook对象,并且具有当前用户的有效会话

1-当前用户的默认应用程序相册 此示例将照片上载到当前用户的默认应用程序相册。如果相册尚不存在,则将创建它

$args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);

$data = $facebook->api('/me/photos', 'post', $args);
print_r($data);
2-目标专辑 此示例将照片上载到特定相册

$args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);

$data = $facebook->api('/'. $ALBUM_ID . '/photos', 'post', $args);
print_r($data);
3-具有访问令牌的目标相册 此示例将照片上载到需要访问令牌的特定相册

 $args = array('message' => 'Photo Caption');
$args['image'] = '@' . realpath($FILE_PATH);

$data = $facebook->api('/'. $ALBUM_ID . '/photos?access_token='. $ACCESS_TOKEN, 'post', $args);
print_r($data);

如果没有以下代码更新,最新版本的Facebook PHP SDK将无法使用上述示例

class Facebook {
...
*Line #539*
protected function makeRequest($url, $params, $ch=null) {
if (!$ch) {
  $ch = curl_init();
}

if( isset($params['doMultiPart']) ) {
    $doMultiPart= true;
    unset($params['doMultiPart']);
} else {
    $doMultiPart= false;
}

$opts = self::$CURL_OPTS;
$opts[CURLOPT_POSTFIELDS] = $doMultiPart ? $params : http_build_query($params, null, '&');
...
基本上,问题在于PHP SDK使用“curl_setopt_array”,如果您将url编码字符串作为选项值传递给它,那么当您真正想要的是多部分/表单数据时,它将以应用程序/x-www-form-urlencoded的形式传递数据;为此,如果params数组中有一个doMultiPart的参数,我们只需切换到传入选项数组


这是一个快速的破解我把它放在一起让它工作起来,可能需要检查代码以确保它不会破坏你正在做的任何事情。否则请欣赏。

此错误似乎与您尝试上载的文件的权限有关,您确定运行PHP脚本的用户具有该文件的权限吗?