2015-01-14 1 views
1

Extjs의 기능을 사용하여 그래픽을 이미지로 변환하려고합니다. 대신 javascript에서 직접 svg.sencha.io를 요청하는 대신 PHP 코드에서 cUrl을 사용하여 호출하려고합니다. 몇 가지 이유로 php에서 호출하는 것이 유일한 방법이며 현재 사용하고있는 cUrl 코드를 사용하면 항상 "잘못된 요청"을 받게됩니다. 그래서, 제 질문은 : 주위에이 상황을 다루는 사람이 있습니까?cvrl과 함께 svg.sencha.io를 요청할 때 잘못된 요청이 발생했습니다.

$url = 'http://svg.sencha.io'; 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $file = curl_exec($ch); 

    curl_close($ch); 

    var_dump($file); 

$_POST이 매개 변수 형, 폭, 높이와 SVG를 포함 : 여기에 내가 함께 작동하도록 노력하고있어 코드입니다. 내 컴퓨터에서 직접 cUrl을 실행했기 때문에 문제가없는 것 같습니다. 그래서 문제는 실제로 cUrl과 PHP입니다. 지문 string(12) "Bad request."

나는 약간의 도움에 정말로 감사 할 것이고, 나는 잠시 여기에 갇혀있다.

답변

0

해결책을 찾았습니다 (적어도 현재는 효과가있는 것 같습니다).

해결책은 cUrl을 사용하지 않고 대신 대체 방법을 사용합니다. 그래서 그 중 일부를 검색해 본 결과이 게시물에 들어 왔습니다 : http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/. 게시물의 함수는 처음에는 나에게 도움이되지 않았지만, 거의 모든 주석을 읽은 후에 조금 변경했고 이것은 svg.sencha.io에 POST 요청을하고 이미지를 올바르게 반환하는 함수입니다.

function _postRequest($url, $data, $optional_headers = null) { 
    $params = array('http' => array(
        'method' => 'POST', 
        'content' => http_build_query($data) 
       )); 
    if ($optional_headers !== null) { 
     $params['http']['header'] = $optional_headers; 
    } 
    $ctx = stream_context_create($params); 
    $fp = @fopen($url, 'rb', false, $ctx); 
    if (!$fp) { 
     throw new Exception("Problem with $url, $php_errormsg"); 
    } 
    $response = @stream_get_contents($fp); 
    if ($response === false) { 
     throw new Exception("Problem reading data from $url, $php_errormsg"); 
    } 
    return $response; 
} 

은 해당 게시물의 코멘트 섹션에 사람에 따르면,이 방법은 컬보다 느립니다 (그 과정은 참 느리다),하지만 분명히 다른 옵션이 없다.

관련 문제