Использование API @filename для загрузки файлов не рекомендуется. Пожалуйста, используйте класс CURLFile вместо
Я новичок в php, и я использовал HP API IDOL OnDemand для извлечения текстов из любого файла изображения.
Мне пришлось установить соединение 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, я был бы признателен.
Спасибо,
2 ответа
Я считаю, что это так же просто, как изменить свой '@'.$filePath
вместо этого использовать CurlFile.
$post = array('apikey' => 'key',
'mode' => 'document_photo',
'file' => new CurlFile($filePath));
Вышесказанное сработало для меня.
Примечание: я работаю на HP.
Из-за нехватки времени я быстро обошел стороной, когда интегрировал сторонний 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;
}