2017-12-06 4 views
0

Curl 코드를 PHP 안에 실행하고 싶습니다.PHP 내부의 컬 실행

curl -X POST 'https://api.sightengine.com/1.0/check.json' \ 
    -F 'api_user=1********5' \ 
    -F 'api_secret=q**************Q' \ 
    -F '[email protected]/full/path/to/image.jpg' \ 
    -F 'models=nudity' 

위의 코드에는 api에 전달할 매개 변수가 4 개 있습니다.

function image() 
{ 
    $body_data = http_build_query(array('api_user' => 1********5, 
         'api_secret' => 'q**************Q', 
         'media' => $_FILES['image']['name'], 
         'models' => 'nudity')); 

    // Configure cURL 
    $image_curl = curl_init(); 
    curl_setopt($image_curl, CURLOPT_URL, "https://api.sightengine.com/1.0/check.json"); 
    curl_setopt($image_curl, CURLOPT_POST, true); // Use POST 
    curl_setopt($image_curl, CURLOPT_POSTFIELDS, $body_data); // Setup post body 
    curl_setopt($image_curl, CURLOPT_RETURNTRANSFER, true); // Receive server response 

    // Execute request and read responce 
    $session_response = curl_exec($image_curl); 
    $response = json_decode($session_response); 

    print_r($response); 
} 

응답 :

stdClass 개체 ([상태] => 실패 [신청] => stdClass 개체 ([ID] => req_2365jHPuLcC6Bydh7WNd7 [타임 스탬프 PHP 코드 아래 I는 실행하려고 => 1512542730.57 [동작] => 0) [에러 => stdClass 개체 ([형태] => argument_error [코드] => 4 메시지] => 미디어 없음 지정된)) 지금

문제 이 (가) media 및입니다.매개 변수

  1. media 매개 변수의 파일 경로에 어떤 문제가 있는지 잘 모르겠습니다. 그리고 나는 경로의 앞쪽에 @을 추가하고 싶습니다.

  2. $body_data 배열의 모든 매개 변수를 정의한 다음 CURLOPT_URL에 올바르게 전달했습니다.

이 문제를 해결하는 데 도움을주십시오. 내가 이것을 POSTMAN에서 시도하면 잘 동작합니다. 미리 감사드립니다.

+0

본 적이 있습니까? https://github.com/Sightengine/client-php - Guzzle without 79 lines of code .. –

+0

업로드 이미지로 사용할 수 있습니까? 서버에 업로드되기 전에 의미. – Shihas

+0

내 client-php 만 설치하면됩니까? 나는 실제로 그것을 얻지 않고있다. 이 일을 도와주세요. 그리고 저는 제 프로젝트에 codeigniter 프레임 워크를 사용합니다. – Shihas

답변

1

http_build_query을 사용할 필요가 없습니다.

PHP 5.5, 5.6 등은 @ 기호를 전달할 수 있지만 PHP 7에서는 지원되지 않습니다. 이제 https://secure.php.net/manual/en/class.curlfile.php을 사용할 수 있습니다.

$body_data = array(
    'api_user' => '3454', 
    'api_secret' => 'q**************Q', 
    'models' => 'nudity' 
); 

$body_data['media'] = new CurlFile(realpath('file.jpg')); 

// Configure cURL 
$image_curl = curl_init(); 
curl_setopt($image_curl, CURLOPT_URL, "https://api.sightengine.com/1.0/check.json"); 
curl_setopt($image_curl, CURLOPT_POST, true); // Use POST 
curl_setopt($image_curl, CURLOPT_POSTFIELDS, $body_data); // Setup post body 
curl_setopt($image_curl, CURLOPT_RETURNTRANSFER, true); // Receive server response 

// Execute request and read responce 
$session_response = curl_exec($image_curl); 
$response = json_decode($session_response); 
+0

위의'image()'함수에 이상이 있습니까? 컬 (curl) 실행은 다른 api 호출에서 잘 작동합니다. 그러나 업로드 이미지 경로를 줄 때 실패합니다. – Shihas

+0

당신은 파일의 이름 인'$ _FILES [ 'image'] [ 'name']'을 사용하고 있습니다. $ _FILES [ 'image'] [ 'tmp_name'] 인 파일이있는 위치를 사용해야합니다. 경로 앞에'@'을 추가해야하므로' 'media'=> @처럼됩니다. $ _FILES [ 'image'] [ 'tmp_name']'. 희망이 도움이됩니다. –

+0

"media = '=>'@/'와 같이 시도했지만 $ _ FILES ['image '] ['tmp_name ']'여전히 동일한 오류가 발생합니다. – Shihas