程序员qiao

"Hello word" 即是起点,也是终点。

php 通过图片或视频链接 获取文件二进制流

  /**
     * @param URL转换本地绝对路径
     * @param string $url 目标地址
     * @param addtime 2021年9月1日
     */
    public function getlocalURL($val)
    {
        $pathinfos = pathinfo($val);
        $tzm       = $pathinfos['extension'];
        $save_dir  = "./temps/"; // 服务资源目录
        $filename  = date('Ymd') . time() . '.' . $tzm; // 自定义名称
        # 检测文件大小
        $Size  = $this->getFileSize($val);
        $file1 = '';
        // 超过10M不保存
        $result = $this->getFile($val, $save_dir, $filename, 1);
        //   if ($Size < 10) {}else{
        //     echo '下载失败';
        // }
        if ($result['code'] == 200) {
            $file1 = '/home/www/wwwroot/jzt_admin_tp/public/temps/' . $result["fild_name"];
        }
        return $file1;
    }

    /**
     * @param URL获取本地FILE
     * @param string $url 目标地址
     * @param addtime 2021年9月1日
     */
    public function getFiles($url)
    {

        //获取文件dir
        $file_dir = $url;
        //使用file_exists判断文件是否存
        ob_end_clean();
        ob_start();
        //打开文件
        $handler   = fopen($file_dir, 'r+b');
        $file_size = filesize($file_dir);
        //声明头信息
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Accept-Length: " . $file_size);
        Header("Content-Disposition: attachment; filename=" . basename($file_dir));
        // 输出文件内容
        return fread($handler, $file_size);
        fclose($handler);
        ob_end_flush();

    }

  /**
     * @param string $target_url 上传目标地址
     * @param string $filename 上传文件路径
     * @param string $form_name 表单名称
     */
    public function curlUploadFile($target_url, $filename, $form_name)
    {

        $uploadFileMimeType = mime_content_type($filename);
        $post_data['file']  = curl_file_create($filename, $uploadFileMimeType, $form_name);
        $ch                 = curl_init();
        curl_setopt($ch, CURLOPT_URL, $target_url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }

    /**
     * 下载文件到服务器
     * addtime 2021年8月30日 09:38:43
     */
    public function getFile($url, $save_dir = '', $filename = '', $type = 0)
    {
        if (trim($url) == '') {
            return false;
        }
        if (trim($save_dir) == '') {
            $save_dir = './';
        }
        if (0 !== strrpos($save_dir, '/')) {
            $save_dir .= '/';
        }
        //创建保存目录
        if (!file_exists($save_dir) && !mkdir($save_dir, 0777, true)) {
            return false;
        }
        //获取远程文件所采用的方法
        if ($type) {
            $ch      = curl_init();
            $timeout = 5;
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $content = curl_exec($ch);
            curl_close($ch);
        } else {
            ob_start();
            readfile($url);
            $content = ob_get_contents();
            ob_end_clean();
        }
        $size = strlen($content);
        //文件大小
        $fp2 = @fopen($save_dir . $filename, 'a');
        fwrite($fp2, $content);
        fclose($fp2);
        unset($content, $url);
        $res['code']      = 200;
        $res['fild_name'] = $filename;
        return $res;
    }

    /**
     * 检测文件大小
     * addtime 2021年9月1日
     */
    public function getFileSize($url)
    {
        $res      = get_headers($url, true);
        $filesize = round($res['Content-Length'] / 1024 / 1024, 2); //四舍五入获取文件大小,单位M
        return $filesize;
    }

 

声明 本人博客的所有东西,部分源于网络书籍和视频,其他的是个人的理解感悟,经过自己整理撰写成博客。 本人博客均只用于个人学习、复习,不作为商业用途,如有侵权,请联系我修改或删除。 联系邮箱:15121014713@163.com

posted on 2021-12-16 16:27  程序员qiao  阅读(685)  评论(1编辑  收藏  举报

导航