
05-23-2012, 12:17 PM
|
 |
Paid Member
|
|
Join Date: Mar 2012
Posts: 8
|
|
Curl
Доброго Вам дня!
Есть проблема с SEO каталогом. Для его работы требуется библиотека Curl. Нашим сервером она не поддерживается (версия Ubundu старая) поддержка для ее уже не осуществляется. Обновить сервер нам нельзя. Соответственно функция curl_init в ecwid_product_api.php не работает. Есть ли альтернатива? Можно как то заменить функцию internal_fetch_url_libcurl, как было сделано для JSON?
|

05-25-2012, 05:23 AM
|
 |
Paid Member
|
|
Join Date: Mar 2012
Posts: 8
|
|
Идей нет?
|

05-28-2012, 05:32 AM
|
 |
Paid Member
|
|
Join Date: Mar 2012
Posts: 8
|
|
up
|

05-28-2012, 08:23 AM
|
 |
Ecwid Team
|
|
Join Date: Jan 2011
Location: Ecwid headquarters
Posts: 7,517
|
|
Quote:
Originally Posted by dimarchy1981
Доброго Вам дня!
Есть проблема с SEO каталогом. Для его работы требуется библиотека Curl. Нашим сервером она не поддерживается (версия Ubundu старая) поддержка для ее уже не осуществляется. Обновить сервер нам нельзя. Соответственно функция curl_init в ecwid_product_api.php не работает. Есть ли альтернатива? Можно как то заменить функцию internal_fetch_url_libcurl, как было сделано для JSON?
|
Довольно странно и сомнительно, что нельзя поставить это расширение. Его не обязательно устанавливать в виде готовой сборки, - если его нет в репозитарии готовых сборок, его можно собрать из исходников. Системная библиотека libcurl почти наверняка присутсвует в системе или опять-таки может быть собрана.
В принципе, можно переписать ecwid_product_api.php, чтобы не использовать curl - запросы делает только метод internal_fetch_url_libcurl, фактически именно он полагается на эту библиотеку, если его переписать на использование доступного в вашей системе инструментария, чтобы формат вызова и возвращаемого значения остались прежними, всё продолжит работать.
__________________
Eugene Efimochkin,  Team
_________________________
⬇ Click Thanks, please, if this reply helped you.
Last edited by Eugene Rimmer; 05-28-2012 at 10:50 AM.
|

05-28-2012, 10:22 AM
|
 |
Paid Member
|
|
Join Date: Mar 2012
Posts: 8
|
|
Если бы я знал на что переписывать я бы не обратился за помощью. Просто специалиста у нас сейчас нету, кто разбирается в серверах линуксовых. Можете сообщить какие аналоги должны стоять? Или как поставить libcurl отдельно? Стандартно через apt-get не получается.
|

05-28-2012, 11:18 AM
|
 |
Ecwid Team
|
|
Join Date: Jan 2011
Location: Ecwid headquarters
Posts: 7,517
|
|
Quote:
Originally Posted by dimarchy1981
Если бы я знал на что переписывать я бы не обратился за помощью. Просто специалиста у нас сейчас нету, кто разбирается в серверах линуксовых. Можете сообщить какие аналоги должны стоять? Или как поставить libcurl отдельно? Стандартно через apt-get не получается.
|
Если вы отите всё-таки поставить curl extension, нужно обратиться к опытному администратору. Если вы пользуетесь каким-то хостингом как услугой, служба поддержки хостинга почти наверняка сможет вам помочь.
Если вы хотите переписать ecwid_product_api.php так, чтобы не зависеть оn curl, вам нужно обратиться к услугам PHP-програмиста. Вот здесь есть пример кода, который делает нужные запросы без curl: http://wezfurlong.org/blog/2006/nov/... .
Профессионалов, способных выполнить для вас любую из этих 2 задач, в можете обратиться к нашим коллегам из Qualiteam - напишите на sales@qtmsoft.com
__________________
Eugene Efimochkin,  Team
_________________________
⬇ Click Thanks, please, if this reply helped you.
|

05-28-2012, 11:34 AM
|
 |
Paid Member
|
|
Join Date: Mar 2012
Posts: 8
|
|
Спасибо за информацию, пойду изучать ситуацию дальше.
|

05-28-2012, 12:58 PM
|
 |
Paid Member
|
|
Join Date: Mar 2012
Posts: 8
|
|
У меня получилось!!! Проанализировал какие параметры передаются и как их реализовывали с помощью HTTP POST. Может кому еще пригодиться, выкладываю аналог функции internal_fetch_url_libcurl для файла ecwid_product_api.php
PHP Code:
function internal_fetch_url_libcurl($url)
{
$params = array('http' => array(
'method' => 'GET',
'header' => 'Content-Type: application/x-www-form-urlencoded'
));
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
return array("code"=>"0","data"=>"Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
$result = array();
if ($response === false) {
return array("code"=>"0","data"=>"Problem reading data from $url, $php_errormsg");
}
return array("code"=>"200", "data"=>$response);
}
Можно даже сделать универсально вместо:
PHP Code:
if (!function_exists('curl_init'))
return array("code"=>"0","data"=>"libcurl is not installed");
Заменить следующие функции на эти:
PHP Code:
function internal_fetch_url_libcurl($url) {
if (!isset($timeout)) $timeout = 90;
if (intval($timeout) <= 0)
$timeout = 90;
$headers[] = "Content-Type: application/x-www-form-urlencoded";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($ch, CURLOPT_HTTPGET, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$body = curl_exec ($ch);
$errno = curl_errno ($ch);
$error = curl_error($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$result = array();
if( $error ) {
return array("code"=>"0","data"=>"libcurl error($errno): $error");
}
return array("code"=>$httpcode, "data"=>$body);
}
function do_post_request($url)
{
$params = array('http' => array(
'method' => 'GET',
'header' => 'Content-Type: application/x-www-form-urlencoded'
));
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
return array("code"=>"0","data"=>"Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
$result = array();
if ($response === false) {
return array("code"=>"0","data"=>"Problem reading data from $url, $php_errormsg");
}
return array("code"=>"200", "data"=>$response);
}
function process_request($url) {
if (!function_exists('curl_init')) {
$result = $this->do_post_request($url);
} else {
$result = $this->internal_fetch_url_libcurl($url);
}
if ($result['code'] == 200) {
$this->error = '';
$this->error_code = '';
$json = $result['data'];
return $this->internal_parse_json($json);
} else {
$this->error = $result['data'];
$this->error_code = $result['code'];
return false;
}
}
На идеальность не претендую, но для моего случая работает прекрасно.
|
|
The Following User Says Thank You to dimarchy1981 For This Useful Post:
|
|
| Thread Tools |
Search this Thread |
|
|
|
| Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT. The time now is 04:16 PM.
Powered by vBulletin® Version 3.8.6. Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
|