Facebook PHP从内存上传文件

时间:2015-01-04 10:22:36

标签: php facebook amazon-web-services amazon-s3

我正在从AWS中的S3存储桶中读取图像,并希望将其上传到Facebook。

这是阅读功能:

/**
 * Get a file from the s3 storage
 */
private function uploadPicture() {
    $picture = new FacebookPicture();
    $file = $this->s3Manager->getFile($this->subEndPoint,$this->verb);
    $picture->pictureContent = $file["Body"];
    $facebookAlbum = new FacebookAlbum();
    $facebookAlbum->album = new Album();
    $facebookAlbum->album->facebookAccessToken = "myAccessToken";
    $facebookAlbum->id = "myAlbumId";
    $facebookManager = new FacebookManager();
    $facebookManager->uploadPicture($facebookAlbum,$picture);
}

这是上传到Facebook功能

/**
 * @param $facebookAlbum FacebookAlbum the album to upload the picture to
 * @param $picture FacebookPicture the picture to upload
 */
public function uploadPicture($facebookAlbum,$picture)
{
    $this->facebook->setAccessToken($facebookAlbum->album->facebookAccessToken);
    $this->facebook->setFileUploadSupport(true);
    $args = array();
    $args["message"] = $picture->description;
    $args["source"] = "@" . $picture->pictureContent;
    $data = $this->facebook->api('/'. $facebookAlbum->id . '/photos', 'post', $args);
    var_dump($data);
}

我一直在:

curl_setopt_array(): The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead in <b>acebook-php-sdk-master/src/base_facebook.php</b> on line <b>1005</b><br />

我认为问题在于图像内容会保存在内存中。

如何在我的记忆中使用该变量才能将其发布到Facebook?

1 个答案:

答案 0 :(得分:0)

@filename已在PHP&gt; = 5.5.0中弃用,如CURLOPT_POSTFIELDS描述中所述here所示,这就是您收到错误的原因。

你在这个stack overflow thread得到了答案,讨论了不同的解决方案。此处还有代码RFC的代码段。

  

目前,cURL文件上传完成如下:

 curl_setopt($curl_handle, CURLOPT_POST, 1); 
 $args['file'] = '@/path/to/file';
 curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $args);
     

这个API既不方便又不安全,无法发送   数据以&#39; @&#39;开头到POST,以及正在进行的任何用户数据   通过cURL重新发送需要进行清理,以便数据值不会被清理   从...开始 @。通常,入站信令通常容易受到攻击   各种注射,最好不要这样做。

     

不应使用上述方法,应使用以下内容   使用CURLOPT_POSTFIELDS上传文件

 curl_setopt($curl_handle, CURLOPT_POST, 1); 
 $args['file'] = new
 CurlFile('filename.png', 'image/png'); curl_setopt($curl_handle,
 CURLOPT_POSTFIELDS, $args);