Использование API @filename для загрузки файлов устарело. Вместо этого используйте класс CURLFile.

Я новичок в php, и я тренировался с помощью HP IDOL OnDemand API для извлечения текстов из любого файла изображения.

Мне пришлось установить соединение curl и выполнить запрос API, но когда я пытаюсь опубликовать файл с помощью метода @, в php 5.5 он устарел и рекомендует мне использовать CURLFile.

Я также копался в руководствах по php и придумал что-то вроде этого https://wiki.php.net/rfc/curl-file-upload

Код выглядит следующим образом:

$url = 'https://api.idolondemand.com/1/api/sync/ocrdocument/v1';

$output_dir = 'uploads/';
if(isset($_FILES["file"])){

$filename = md5(date('Y-m-d H:i:s:u')).$_FILES["file"]["name"];

move_uploaded_file($_FILES["file"]["tmp_name"],$output_dir.$filename);

$filePath = realpath($output_dir.$filename);
$post = array(
    'apikey' => 'apikey-goes-here',
    'mode' => 'document_photo',
    'file' => '@'.$filePath
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

unlink($filePath);

Если кто-нибудь перепишет код и покажет мне, как использовать Curlfile, я был бы признателен.

Спасибо,


person fatihkoc    schedule 16.01.2015    source источник
comment
Эй, вы можете прекратить использовать ключ API, который вы разместили в этом вопросе, поскольку теперь он фактически является общедоступной собственностью... :/ Я удалил его для вас, но теперь он навсегда в истории редактирования. (Примечание: я работаю в HP)   -  person Brian Beckett    schedule 25.03.2015


Ответы (2)


Я считаю, что это так же просто, как изменить '@'.$filePath на использование CurlFile.

$post = array('apikey' => 'key', 'mode' => 'document_photo', 'file' => new CurlFile($filePath));

Вышеупомянутое сработало для меня.

Примечание. Я работаю в HP.

person lemoogle    schedule 01.04.2015

Из-за нехватки времени я нашел быстрый обходной путь, когда интегрировал сторонний API. Вы можете найти код ниже.

$url: Домен и страница для публикации; например, http://www.snyggamallar.se/en/ $params: array[key] = формат значения, как и в $post.

ПРЕДУПРЕЖДЕНИЕ. Любое значение, начинающееся с @, будет рассматриваться как файл, что, конечно же, является ограничением. В моем случае это не вызывает никаких проблем, но, пожалуйста, учтите это в своем коде.

static function httpPost($url, $params){
    foreach($params as $k=>$p){
        if (substr($p, 0, 1) == "@") { // Ugly
            $ps[$k] = getCurlFile($p);
        } else {
            $ps[$k] = utf8_decode($p);
        }
    }

    $ch = curl_init($url);
    curl_setopt ($ch, CURLOPT_POST, true);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $ps);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

    $res = curl_exec($ch);
    return $res;
}

static function getCurlFile($filename)
{
    if (class_exists('CURLFile')) {
        return new CURLFile(substr($filename, 1));
    }
    return $filename;
}
person Peter Kindberg    schedule 23.01.2015