• 技术文章 >PHP >PHP教程

    php http文件上传的实现方法

    小妮浅浅小妮浅浅2021-09-14 16:22:21原创97

    1、初始化cURL会话。

    2、获取CURLFile实例。

    3、执行给定的cURL会话。

    4、根据文件路径获取一个CURLFile类实例。

    5、设置保存的文件夹即可。

    实例

    // 上传端   
     
        /**
     
         * 向目标地址推送xls文件
     
         * @Date 2019/4/29
     
         */
     
        public function putXls()
     
        {
     
            // 目标接口
     
            $url = "http://xxx";
     
     
     
            // 初始化 cURL 会话, 如果提供url,CURLOPT_URL 选项将会被设置成这个值
     
            $ch = curl_init($url);
     
     
     
            // 获取CURLFile实例
     
            $xlsCurlFile = $this->makeCurlFile(base_path()."/public/tby.xls");
     
     
     
            $data = array('xls' => $xlsCurlFile);
     
     
     
            // TRUE 时会发送 POST 请求,类型为:application/x-www-form-urlencoded,是 HTML 表单提交时最常见的一种。
     
            curl_setopt($ch, CURLOPT_POST, 1);
     
     
     
            // 从 PHP 5.5.0 开始, @ 前缀已被废弃,文件可通过 CURLFile 发送。 设置 CURLOPT_SAFE_UPLOAD 为 TRUE 可禁用 @ 前缀发送文件,以增加安全性。
     
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
     
     
     
            // 执行给定的 cURL 会话
     
            // 成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 设置了 CURLOPT_RETURNTRANSFER 选项,函数执行成功时会返回执行的结果,失败时返回 FALSE 。
     
            $result = curl_exec($ch);
     
     
     
            if (curl_errno($ch)) {// 返回错误代码或在没有错误发生时返回 0 (零)。
     
                // 返回错误信息,或者如果没有任何错误发生就返回 '' (空字符串)。
     
                $result = curl_error($ch);
     
            }
     
     
     
            // 关闭 cURL 会话
     
            curl_close($ch);
     
        }
     
         
     
        /**
     
         * 根据文件路径获取一个CURLFile类实例
     
         * @param string $file 文件路径
     
         * @return CURLFile
     
         * @Date 2019/4/29
     
         */
     
        private function makeCurlFile(string $file)
     
        {
     
            /**
     
             * .xls mime为 application/vnd.ms-excel
     
             * .xlsx mime为 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
     
             * 可参考 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
     
             *
     
             *  注意:也可以使用 finfo类动态获取,但需要装fileinfo扩展
     
             *  demo:
     
                $result = new finfo();
     
                if (is_resource($result) === true) {
     
                    return $result->file($filename, FILEINFO_MIME_TYPE);
     
                }
     
                return false;
     
             */
     
            $mime = "application/vnd.ms-excel";
     
            $info = pathinfo($file);
     
            $name = $info['basename'];
     
            $output = new CURLFile($file, $mime, $name);
     
            return $output;
     
        }
     
    // 接收端
     
    public function getFile(){   
     
    // 保存的文件夹,需要注意所在用户组是否有写入权限   
     
    $uploads_dir = base_path()."/public/test";   
     
    $xlsFiles = $_FILES["xls"] ?? null;   
     
    if($xlsFiles){       
     
    if ($xlsFiles["error"] == UPLOAD_ERR_OK) {           
     
    $tmp_name = $xlsFiles["tmp_name"];           
     
    $name = $xlsFiles["name"];           
     
    move_uploaded_file($tmp_name, "$uploads_dir/$name");        }       
     
    // todo success   
     
    }else{       
     
    // todo fail    }}

    以上就是php http文件上传的实现方法,希望对大家有所帮助。更多php学习指路:php教程

    本文转载于php中文网,如有侵犯联系作者修改。

    专题推荐:php http
    品易云
    上一篇:php返回错误代码的方法 下一篇:php头编码的设置方法

    相关文章推荐

    • php判断数组元素不为空格的方法• php安装pgsql扩展的方法• php剔除html标签的方法• php去除数组中的键名• php去除小数点后多余0的方法• php显示和实际时间不同的解决• php.ini中屏蔽所有错误的方法• php数组获取值的方法• php删除数组后2项元素的方法• php中intval()的使用• php隐藏中间字符的方法• php将字符串转换bool类型的方法• php返回错误代码的方法

    全部评论我要评论

  • 取消发布评论
  • 

    Python学习网