<?php
$filename = "xx.gif";
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));
// $data is file data
$pvars = array('image' => base64_encode($data), 'key' => IMGUR_API_KEY);
$timeout = 30;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.xml');
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars);
$xml = curl_exec($curl);
curl_close ($curl);
var_dump($xml);
?>
Я играю с API Imgur, но, похоже, он не работает. PHP.net говорит, что curl_init()
находится в PHP5, но мой хост говорит, что это не так. Как я могу сделать эту работу?
curl - это расширение, которое необходимо установить, оно не имеет ничего общего с версией PHP.
В старых версиях Debian и Ubuntu вы решили это, установив расширение Curl для PHP и перезапустив веб-сервер. Предполагая, что веб-сервер Apache 2:
sudo apt-get install php5-curl
sudo service apache2 restart
В новых версиях имя пакета изменилось:
sudo apt install php-curl
Возможно, вам нужно будет установить больше:
sudo apt-get install curl libcurl3 libcurl3-dev;
У вас недостаточно репутации для комментариев. Использование Ubuntu и простой:
sudo apt-get install php5-curl
sudo /etc/init.d/apache2 restart
НЕ работал у меня.
По какой-то причине curl.so
был установлен в месте, которое не было выбрано по умолчанию. Я проверил extension_dir
в моем php.ini и скопировал текст curl.so
на мой extension_dir
cp /usr/lib/php5/20090626/curl.so /usr/local/lib/php/extensions/no-debug-non-zts-20090626
Надеюсь, что это поможет кому-то, соответственно отрегулируйте места своего пути.
Для Ubuntu
Установите расширение Curl для PHP и перезапустите сервер Apache.
sudo apt-get install php5-curl
sudo service apache2 restart
Для Windows
Проблема возникает из-за того, что lib_curl.dll не содержит PHP. также загрузите следующий расширение, если не работает,
extension=php_bz2.dll
extension=php_curl.dll
extension=php_dba.dll
Теперь перезапустите сервер Apache. Если вы получили сообщение об ошибке "Не удалось загрузить php_curl.dll", скопируйте библиотеки SSLEAY32.PHP, libEAY32.dll(OpenSSL) в папку System32.
Существует решение со всеми необходимыми деталями для Windows 7 x64:
http://www.youtube.com/watch?v=7qNTi1sEfE8
Это по-французски, но вы можете все понять! Я решил ту же проблему, даже не говорю по-французски.: -)
Многие ответы забывают упомянуть, что вам нужно добавить новую версию файла php_curl.dll из этого места: http://www.anindya.com/php-5-4-3-and-php-5-3-13-x64-64-bit-for-windows/
Я добавил новую версию php_curl.dll из архива php_curl-5.4.3-VC9-x64.zip в папки: C:\wamp\bin\php\php5.4.3\ext и C:\Windows\System32 и все было хорошо!
сделайте это
sudo apt-get install php-curl
и перезапустить сервер
sudo service apache2 restart
После установки PHP.
Перейдите в папку Windows\system32: libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll
Переместить в папку Apache24\bin libssh2.dll
Затем раскомментируйте расширение = php_curl.dll в php.ini
$ch = curl_init('http://api.imgur.com/2/upload.xml'); //initialising our url
curl_setopt($ch, CURLOPT_MUTE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //used for https headers
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //used for https headers
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode($pvars));
//the value we post
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //waiting for reponse, default value in php is zero ie, curls normally do not wait for a response
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
$output = curl_exec($ch); //the real execution
curl_close($ch);
echo $output;
Попробуйте этот код. Я не уверен в этом. Но я использовал его для отправки xml-данных на удаленный URL-адрес.