我正在从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?
答案 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);