Вот код:
$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);
Это ошибка
Uncaught CurlException: 26: не удалось создать данные formpost
Что делать?
Вот несколько способов загрузки фотографий с помощью Graph API. В примерах предполагается, что вы создали экземпляр объекта $ facebook и имеете действующий сеанс для текущего пользователя.
В этом примере вы загрузите фотографию в свой альбом приложений по умолчанию текущего пользователя. Если альбом еще не существует, он будет создан.
$args = array('message' => 'Photo Caption'); $args['image'] = '@' . realpath($FILE_PATH); $data = $facebook->api('/me/photos', 'post', $args); print_r($data);
Этот пример загрузит фотографию в конкретный альбом.
$args = array('message' => 'Photo Caption'); $args['image'] = '@' . realpath($FILE_PATH); $data = $facebook->api('/'. $ALBUM_ID . '/photos', 'post', $args); print_r($data);
В этом примере вы загружаете фотографию в конкретный альбом, для которого требуется токен доступа.
$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);
ваш массив данных должен иметь «сообщение» вместо «подпись», а также удалить «помощь», «метод» и «access_token»,
ваши $ data должны иметь данные файла и «сообщение», то есть.
$sds =$facebook->api('/me/13595/photos', 'POST', $data);
где вместо 13595 просто используйте переменную с помощью альбома
также, если необходимо, access_token лучше всего присоединяется к api uri следующим образом:
$sds =$facebook->api('/me/13595/photos?access_token='.$access_token, 'POST', $data);
Кроме того, если php sdk не работает для вас, я успешно использовал cURL, если ваша установка php поддерживает его. в этом случае см. пример cURL при загрузке фотографий в альбом с помощью API-интерфейсов Facebook
Последняя версия PHP 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, '&'); ...
не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 в качестве значения параметра, она передаст данные как application / x-www-form-urlencoded, когда то, что вы действительно хотите, это multipart / form- данные ; для этого мы просто переключаемся на передачу в массиве параметров, если у нас есть параметр doMultiPart в массиве params.
Это был быстрый хак, который я собрал для того, чтобы что-то работать, возможно, нужно пересмотреть код, чтобы убедиться, что он не сломает ничего, что вы делаете. В противном случае наслаждайтесь.