Intereting Posts
как я могу построить mysql bind_param () в группе выборок динамически? Kohana_Exception : Требуется действительная соль cookie. Пожалуйста, установите Cookie :: $ salt Использование pecl для установки драйвера Mongodb на OS X El Capitan (v10.11.1) PDO Prepared Вставляет несколько строк в один запрос Извлечение HTML из файла XML с помощью simpleXML .htaccess Параметр PHP 5.3 нарушает параметр Access-Control-Allow-Origin? Объединение результатов двух отдельных запросов MySQL Zend Framework 2: передача переменных («параметры») для формирования с помощью formelementmanager PDFLib, дающий ошибку неперехваченного исключения где я могу найти php.ini для php-cli Могут ли пространства имен PHP содержать переменные? Как вы включаете несколько страниц в один файл с включенным php? Удалить сопоставленное поле доктрины родительского класса в Symfony Что такое ключевое слово `finally` для PHP? Как я могу захватить результат var_dump в строку?

Как base64 кодирует изображение из facebook api

Я пытаюсь преобразовать URL-адрес изображения, предоставленный facebook api, в формат base64 с помощью cURL.

api предоставляет URL-адрес как таковой:

http://img.ruphp.com/php/72099_736078480783_68792122_n.jpg?oh=f3698c5eed12c1f2503b147d221f39d1&oe=54C5BA4E&__gda__=1418090980_c7af12de6b0dd8abe752f801c1d61e0d 

Проблема в том, что URL-адрес работает только с параметрами oh, oe и gda, включенными в строку url, нет прямого URL- адреса img. Удаление параметров отправит вас на страницу с ошибкой на facebook.

С параметризованным url мой curl_exec не получает правильные данные изображения. Есть ли способ получить данные base64 из facebook, или есть ли что-то, что я могу сделать, чтобы получить доступ к URL-адресу чистого изображения, заданному параметризованным URL-адресом?

Вот как выглядит мой сценарий декодирования:

 header('Access-Control-Allow-Origin: *'); $url = $_GET['url']; try { $c = curl_init($url); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 3); $result = curl_exec($c); curl_close ($c); if(false===$result) { echo 'fail'; } else { $base64 = "data:image/jpeg;charset=UTF-8;base64,".base64_encode($result); echo $base64; } } catch ( \ErrorException $e ) { echo 'fail'; } 

Чтобы решить вашу конкретную проблему, ваш скрипт, скорее всего, не работает, потому что требуемые параметры oh , oe , __gda__ становятся разделенными во время запроса GET и поэтому не включаются в $_GET['url'] .

Убедитесь, что вы используете строку с кодировкой URL-адреса, поэтому любые незакодированные символы не обрабатываются как разделители. Затем просто расшифруйте строку, прежде чем передавать ее в cURL.

 ... $url = urldecode($_GET['url']); ... 

Любое любопытство, вы все равно можете загрузить любое изображение Facebook из любого из своих устаревших CDN без необходимости в новых параметрах:

  1. https://scontent-a-iad.xx.fbcdn.net/hphotos-frc3/
  2. https://scontent-b-iad.xx.fbcdn.net/hphotos-frc3/
  3. https://scontent-c-iad.xx.fbcdn.net/hphotos-frc3/

Просто добавьте исходное имя файла изображения в URL et voila .

Отказ от ответственности: я понятия не имею, как долго этот небольшой трюк будет работать, поэтому не используйте его ни на что важное в производстве.

Возможно, это не поможет, но кажется, что исходная картина (заканчивающаяся на _o ) не нуждается в параметрах gda или oe oh

чтобы получить исходное изображение профиля, которое вы можете сделать:

 var username_or_id = "name.lastname" //Example get_url ("http://graph.facebook.com/$username_or_id/picture?width=9999") 

НТН

У меня была схожая проблема. Мое решение:

 $url = urldecode($url); return base64_encode(file_get_contents($url)); 

Где URL-адрес Graph API:

 https://graph.facebook.com/$user_id/picture?width=160 

(Вероятно, вы хотите также проверить, если file_get_contents что-то возвращает)

Вам просто нужно добавить параметр CURLOPT_SSL_VERIFYPEER в значение false, поскольку URL-адрес из facebook равен https, а не http. , или вы можете просто запросить url без ssl, заменив https на http.

Попробуйте код ниже

  $url = 'http://img.ruphp.com/php/72099_736078480783_68792122_n.jpg?oh=f3698c5eed12c1f2503b147d221f39d1&oe=54C5BA4E&__gda__=1418090980_c7af12de6b0dd8abe752f801c1d61e0d'; try { $c = curl_init($url); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 3); /***********************************************/ // you need the curl ssl_opt_verifypeer curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); /***********************************************/ $result = curl_exec($c); curl_close ($c); if(false===$result) { echo 'fail'; } else { $base64 = '<img alt="Embedded Image" src="data:image/jpeg;charset=UTF-8;base64,'.base64_encode($result).'"/>'; echo $base64; } } catch ( \ErrorException $e ) { echo 'fail'; }