#1  
Old 05-23-2012, 12:17 PM
dimarchy1981's Avatar
dimarchy1981 dimarchy1981 is offline
 
Join Date: Mar 2012
Posts: 8
Question Curl

Доброго Вам дня!

Есть проблема с SEO каталогом. Для его работы требуется библиотека Curl. Нашим сервером она не поддерживается (версия Ubundu старая) поддержка для ее уже не осуществляется. Обновить сервер нам нельзя. Соответственно функция curl_init в ecwid_product_api.php не работает. Есть ли альтернатива? Можно как то заменить функцию internal_fetch_url_libcurl, как было сделано для JSON?
Reply With Quote
  #2  
Old 05-25-2012, 05:23 AM
dimarchy1981's Avatar
dimarchy1981 dimarchy1981 is offline
 
Join Date: Mar 2012
Posts: 8
Default

Идей нет?
Reply With Quote
  #3  
Old 05-28-2012, 05:32 AM
dimarchy1981's Avatar
dimarchy1981 dimarchy1981 is offline
 
Join Date: Mar 2012
Posts: 8
Default

up
Reply With Quote
  #4  
Old 05-28-2012, 08:23 AM
Eugene Rimmer's Avatar
Eugene Rimmer Eugene Rimmer is online now
Ecwid Team
 
Join Date: Jan 2011
Location: Ecwid headquarters
Posts: 7,517
Default

Quote:
Originally Posted by dimarchy1981 View Post
Доброго Вам дня!

Есть проблема с 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
_________________________
Shipping methods are not showing up? Here is how to set it up properly!
Have a question? Look up the answer at our help portal!

⬇ Click Thanks, please, if this reply helped you.

Last edited by Eugene Rimmer; 05-28-2012 at 10:50 AM.
Reply With Quote
  #5  
Old 05-28-2012, 10:22 AM
dimarchy1981's Avatar
dimarchy1981 dimarchy1981 is offline
 
Join Date: Mar 2012
Posts: 8
Default

Если бы я знал на что переписывать я бы не обратился за помощью. Просто специалиста у нас сейчас нету, кто разбирается в серверах линуксовых. Можете сообщить какие аналоги должны стоять? Или как поставить libcurl отдельно? Стандартно через apt-get не получается.
Reply With Quote
  #6  
Old 05-28-2012, 11:18 AM
Eugene Rimmer's Avatar
Eugene Rimmer Eugene Rimmer is online now
Ecwid Team
 
Join Date: Jan 2011
Location: Ecwid headquarters
Posts: 7,517
Default

Quote:
Originally Posted by dimarchy1981 View Post
Если бы я знал на что переписывать я бы не обратился за помощью. Просто специалиста у нас сейчас нету, кто разбирается в серверах линуксовых. Можете сообщить какие аналоги должны стоять? Или как поставить 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
_________________________
Shipping methods are not showing up? Here is how to set it up properly!
Have a question? Look up the answer at our help portal!

⬇ Click Thanks, please, if this reply helped you.
Reply With Quote
  #7  
Old 05-28-2012, 11:34 AM
dimarchy1981's Avatar
dimarchy1981 dimarchy1981 is offline
 
Join Date: Mar 2012
Posts: 8
Default

Спасибо за информацию, пойду изучать ситуацию дальше.
Reply With Quote
  #8  
Old 05-28-2012, 12:58 PM
dimarchy1981's Avatar
dimarchy1981 dimarchy1981 is offline
 
Join Date: Mar 2012
Posts: 8
Default

У меня получилось!!! Проанализировал какие параметры передаются и как их реализовывали с помощью 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 ($chCURLOPT_URL$url);
        
curl_setopt ($chCURLOPT_HEADER0);
        
curl_setopt ($chCURLOPT_HTTPHEADER$headers);
        
curl_setopt ($chCURLOPT_HTTPGET1);
        
curl_setopt ($chCURLOPT_RETURNTRANSFER1);
        
$body curl_exec ($ch);
        
$errno curl_errno ($ch);
        
$error curl_error($ch);
        
$httpcode curl_getinfo($chCURLINFO_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;
        }
    } 
На идеальность не претендую, но для моего случая работает прекрасно.
Reply With Quote
The Following User Says Thank You to dimarchy1981 For This Useful Post:
Makfruit (05-28-2012)
Reply

Tags
curl

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 04:16 PM.
Powered by vBulletin® Version 3.8.6. Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.