@filename API 用于文件上传的用法已弃用。请改用 CURLFile class
The usage of the @filename API for file uploading is deprecated. Please use the CURLFile class instead
我是 php 的初学者,我正在使用 HP 的 IDOL OnDemand api 从任何图像文件中提取文本。
我必须设置一个 curl 连接并执行 api 请求,但是当我尝试使用 @ 方法 post 文件时,在 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,我将不胜感激。
谢谢,
由于时间紧迫,我在集成第三方时做了一个快速的解决方法API。您可以在下面找到代码。
$url:域和页面到post;例如 http://www.snyggamallar.se/en/
$params: array[key] = value 格式,就像你在 $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;
}
我相信这就像将 '@'.$filePath
改为使用 CurlFile 一样简单。
$post = array('apikey' => 'key',
'mode' => 'document_photo',
'file' => new CurlFile($filePath));
以上对我有用。
注意:我在 HP 工作。
我是 php 的初学者,我正在使用 HP 的 IDOL OnDemand api 从任何图像文件中提取文本。
我必须设置一个 curl 连接并执行 api 请求,但是当我尝试使用 @ 方法 post 文件时,在 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,我将不胜感激。
谢谢,
由于时间紧迫,我在集成第三方时做了一个快速的解决方法API。您可以在下面找到代码。
$url:域和页面到post;例如 http://www.snyggamallar.se/en/ $params: array[key] = value 格式,就像你在 $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;
}
我相信这就像将 '@'.$filePath
改为使用 CurlFile 一样简单。
$post = array('apikey' => 'key',
'mode' => 'document_photo',
'file' => new CurlFile($filePath));
以上对我有用。
注意:我在 HP 工作。