php 二进制文件上传

时间:2022-01-22 20:56:05

二进制文件上传类demo:

<?php
/**
* 二进制图片上传类
*/
class UpImg{
//文件的目录
protected $updir;
//文件的类型
protected $type;

/**
* 构造方法
*/
public function __construct($updir = '', $type = 'jpg'){
$curdir = getcwd().DIRECTORY_SEPARATOR;
$this->updir = empty($updir) ? $curdir.'uploads'.DIRECTORY_SEPARATOR : $curdir.$updir.DIRECTORY_SEPARATOR ;
$this->type = $type;
}

/**
* 保存图片
*/
public function upimg(){
//判断目录是否存在,不存在则新建目录
if (!is_dir($this->updir)){
mkdir($this->updir);
}
//生成的上传文件名
$upfilename = $this->updir.date('Ymd').time().'.'.$this->type;
//如果文件存在,则删除文件
if (file_exists($upfilename)) {
unlink($upfilename);
}

//开始读取数据流
$img  = file_get_contents('php://input');
if (empty($img)) die('没有数据流');
$len = file_put_contents($upfilename, $img);
if ($len > 0 && file_exists($upfilename)) {
die('图片上传成功');
} else {
die('图片上传失败');
}


}
$up = new UpImg();
$up->upimg();
?>

测试文件:

<?php
//curl 模拟测试图片图片二进制上传
$imgpath = './1.jpg';
$ch = curl_init();
$url = 'http://hk.test.com/upimg.php';
$img = file_get_contents($imgpath);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $img);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$info = curl_exec($ch);
curl_close($ch);
echo $info;
?>