采集接口目标:不依赖任何框架,接收数据,插入数据,读取远程图片下载到本地服务器空间。之所以这样,是因为运行速度更快,项目兼容性更高。
一:数据传输操作原生代码
alert('添加成功');history.go(-1)";
if($insert){
echo '成功插入数据';
}else{
echo '插入数据失败';
}
}
//下载图片
function download($url, $path = 'images/')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
$filename = pathinfo($url, PATHINFO_BASENAME);
$resource = fopen($path . $filename, 'a');
fwrite($resource, $file);
fclose($resource);
}
那在下载远程图片的时候就可以这样:
foreach ( $images as $url ) {
download($url);
}
二、图片传输原生代码(本地传远程):PHP 二进制流 上传图片(测试成功)
本地代码:
远程接收代码:在以下代码设置远程服务器的图片路径
0)
{
$data['msg']= $_FILES["file"]["error"];
echo json_encode($data);exit;
}
else
{
$data['name']=$_FILES["file"]["name"];
$data['type']= $_FILES["file"]["type"] ;
$data['size']= $_FILES["file"]["size"] / 1024 ;
$data['tmp_name']=$_FILES["file"]["tmp_name"] ;
// 判断当期目录下的 upload 目录是否存在该文件
// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
$data['msg']=$_FILES["file"]["name"] . " 文件已经存在。 ";
echo json_encode($data);exit;
}
else
{
// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
$data['msg']="文件存储在: " . "upload/" . $_FILES["file"]["name"];
echo json_encode($data);exit;
}
echo json_encode($data);exit;
}
三、图片传输原生代码(远程传远程):PHP 二进制流 上传图片(测试成功)
1.获取远程图片
/**
$path保存图片的地址
$url要获取的远程图片地址
**/
function getimg($path,$url){
$aext = explode('.', $url);
$ext = end($aext);
$name = $path.'/'. time() . '.' . $ext;
$source=file_get_contents($url);
file_put_contents($name,$source);
return $name;
}
2.上传图片
/**
$posturl上传图片的地址
$path本地图片所在的地址
**/
function postimg($posturl,$path){
$obj = new CurlFile($path);
$obj->setMimeType("application/octet-stream");//必须指定文件类型,否则会默认为application/octet-stream,二进制流文件
$post['Filedata'] = $obj;
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
//启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_URL, $posturl);//上传类
$info= curl_exec($ch);
curl_close($ch);
return $info;
}
四、集合thinkphp的使用方法
秋码分享 | PHP使用curl上传文件到远程服务器接口
五、原始图片上传代码
PHP 文件上传 | 菜鸟教程
六、非原生利用wordpress的函数获取远程图片并上传
public function save_image($parent_id, $filepath){
//使用函数将远程图片获取到wordpress服务器端
$get = wp_remote_get ( $filepath );
//获取文件格式
$type = wp_remote_retrieve_header ( $get , 'content-type' );
//判断是否图片格式文件
if( is_numeric(strpos( $type,'image'))){
//进行文件重命名,并用MD5进行命名混淆
$file_title = md5 ( date ( 'Ymd' , time () ) . mt_rand ( 1000 , 9999 ) );
//拼接文件地址
$file_name = $file_title . substr ( $filepath , strrpos ( $filepath , "." ) );
//
$file_content = wp_remote_retrieve_body ( $get );
$mirror = wp_upload_bits ( $file_name , null , $file_content );
//写入特色图片需要的数据
$thum[ 'post_author' ] = 1;//发布者ID
$thum[ 'post_title' ] = $file_title;//文章标题
$thum[ 'post_parent' ] = $parent_id;
$thum[ 'guid' ] = $mirror[ 'url' ];
$thum[ 'post_type' ] = 'attachment';
$thum[ 'post_mime_type' ] = $type;
$thum[ 'post_status' ] = 'inherit';//文章状态
//以文章形式写入到数据库
$attachment_id = wp_insert_post ( $thum );
set_post_thumbnail ( $parent_id , $attachment_id );
update_post_meta ( $parent_id , '_thumbnail_id' , $attachment_id );
update_post_meta($attachment_id,'_wp_attached_file', ltrim( wp_upload_dir()['subdir'],'/') .'/'.$file_name );
$attach_data = wp_generate_attachment_metadata( $attachment_id, ltrim( wp_upload_dir()['path'],'/') .'/'.$file_name );
wp_update_attachment_metadata( $attachment_id, $attach_data );
}
}
参考网址:
1、php图片上传api文件流方式传递_php 文件流_PHP隔壁老王邻居的博客-CSDN博客
2、php获取远程图片模拟post,file上传到指定服务器_银月 rey的博客-CSDN博客
3、PHP CURLFile函数模拟实现文件上传展示 - 腾讯云开发者社区-腾讯云
4、[PHP] CURL 的各种骚使用(GET,POST,上传下载图片,带认证,带COOKIE) - 掘金