php数据采集接口

采集接口目标:不依赖任何框架,接收数据,插入数据,读取远程图片下载到本地服务器空间。之所以这样,是因为运行速度更快,项目兼容性更高。

一:数据传输操作原生代码


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
//连接数据库
$conn=mysqli_connect('localhost','root','','ghw','3306'); 
$sql="insert into student values('12','eren','男','21','软件技术')";
mysqli_select_db($conn,'ghw');
mysqli_set_charset($conn,'utf8');
//$insert=mysqli_query($conn,$sql);


if(isset($_POST['submit'])){
		
		$sql = "insert into message(user,title,content,lastdata)".
				"values ('$_POST[user]','$_POST[title]','$_POST[content]',now())";
		
		mysqli_query($conn,$sql);
		
		//echo "<script>alert('添加成功');history.go(-1)</script>";

        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 二进制流 上传图片(测试成功)

本地代码:

<?php
 
$imgurl='D:\phpstudy_pro\WWW\img\11.jpg';   //图片路径 一定要本地绝对路径
$postData['fileMD5'] = md5_file($imgurl);  //文件唯一标识
$postData['file']=new \CURLFile($imgurl);  //文件流
$url="/test6.php";
$request = ImgRequestCurl($postData,$url);
 var_dump($request);exit;
 
//请求方法
function ImgRequestCurl($params,$url){
    set_time_limit(0);
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
 
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
 
    $header = array('Content-Type: multipart/form-data'); //请求头记得变化-不同的上传方式
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 
    $output = curl_exec($ch);
    curl_close($ch);
    var_dump($output);
    $output = json_decode($output,true);
 
    return $output;
}
 
 

远程接收代码:在以下代码设置远程服务器的图片路径

<?php
 
// 允许上传的图片后缀
$file=$_POST['fileMD5'];
if($file=="82eef332f93d684cf93dffa1e5045ae2"){
   //自己看需要判断不
    $data['msg']= " 文件已经存在。 ";
    echo  json_encode($data);exit;
}
 
 
 
$temp = explode(".", $_FILES["file"]["name"]);
 
$extension = end($temp);     // 获取文件后缀名
$data['status']=-1;
 
    if ($_FILES["file"]["error"] > 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,二进制流文件</span>
    $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) - 掘金

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值