当前位置: 首页 > news >正文

免费百度网站建设做网站用的主机

免费百度网站建设,做网站用的主机,港海(天津)建设股份有限公司网站,宿州网站建设价格本文实例分析了PHP5.0~5.6 各版本兼容性cURL文件上传功能。分享给大家供大家参考#xff0c;具体如下#xff1a;最近做的一个需求#xff0c;要通过PHP调用cURL#xff0c;以multipart/form-data格式上传文件。踩坑若干#xff0c;够一篇文章了。重要警告没事不要读PHP的…本文实例分析了PHP5.0~5.6 各版本兼容性cURL文件上传功能。分享给大家供大家参考具体如下最近做的一个需求要通过PHP调用cURL以multipart/form-data格式上传文件。踩坑若干够一篇文章了。重要警告没事不要读PHP的官方中文文档版本跟不上坑死你不同版本PHP之间cURL的区别PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求。传统上PHP的cURL支持通过在数组数据中使用“文件全路径”的语法附加文件供cURL读取上传。这与命令行直接调用cURL程序的语法是一致的curl_setopt(ch, CURLOPT_POSTFIELDS, array(file .realpath(image.png),));equals$ curl -F file/absolute/path/to/image.png 但PHP从5.5开始引入了新的CURLFile类用来指向文件。CURLFile类也可以详细定义MIME类型、文件名等可能出现在multipart/form-data数据中的附加信息。PHP推荐使用CURLFile替代旧的语法curl_setopt(ch, CURLOPT_POSTFIELDS, [file new CURLFile(realpath(image.png)),]);PHP 5.5另外引入了CURL_SAFE_UPLOAD选项可以强制PHP的cURL模块拒绝旧的语法仅接受CURLFile式的文件。5.5的默认值为false5.6的默认值为true。但是坑的一点在于语法在5.5就已经被打了deprecated在5.6中就直接被删除了(会产生 ErorException: The usage of thefilename API for file uploading is deprecated. Please use the CURLFile class instead)。对于PHP 5.6而言手动设置CURL_SAFE_UPLOAD为false是毫无意义的。根本不是字面意义理解的“设置成false就能开启旧的unsafe的方式”——旧的方式已经作为废弃语法彻底不存在了。PHP 5.6 CURLFile only不要有任何的幻想。我的部署环境是5.4(仅语法)但开发环境是5.6(仅CURLFile)。都没有压在5.5这个两者都支持过渡版本上结果就是必须写出带有环境判断的两套代码。现在问题来了……环境判断小心魔法数字我见过这种环境判断的代码if (version_compare(phpversion(), 5.4.0) 0)我对这种代码的评价只有一个字屎。这个判断掉入了典型的魔法数字陷阱。版本号莫名其妙的出现在代码之中不查半天PHP手册和更新历史很难明白作者被卡在了哪个功能的变更上。代码应该回归本源。我们的实际需求其实是有CURLFile就优先采用没有再退化到传统语法。那么代码就来了if (class_exists(\CURLFile)) {$field array(fieldname new \CURLFile(realpath($filepath)));} else {$field array(fieldname . realpath($filepath));}建议明确指定的退化选项从可靠的角度推荐指定CURL_SAFE_UPLOAD的值明确告知php是容忍还是禁止旧的语法。注意在低版本PHP中CURLOPT_SAFE_UPLOAD常量本身可能不存在需要判断if (class_exists(\CURLFile)) {curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);} else {if (defined(CURLOPT_SAFE_UPLOAD)) {curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);}}cURL选项设置的顺序不管是curl_setopt()单发还是curl_setopt_array()批量cURL的选项总是设置一个生效一个而设置好的选项立刻就会影响cURL在设置后续选项时的行为。例如CURLOPT_SAFE_UPLOAD就和CURLOPT_POSTFIELDS的行为有关。如果先设置CURLOPT_POSTFIELDS再设置CURLOPT_SAFE_UPLOAD那么后者的约束作用就不会生效。因为设置前者时cURL就已经把数据实际的识读处理完毕了cURL有那么几个选项存在这种坑务必小心。还好这种存在“依赖关系”的选项不多机制也不复杂简单处理即可。我的方法是先批量设置所有的选项然后直到curl_exec()的前一刻才用curl_setopt()单发设置CURLOPT_POSTFIELDS。实际上在curl_setopt_array()用的数组中保证CURLOPT_POSTFIELDS的位置在后边也是可靠的。PHP的关联数组是有顺序保障的我们也可以假设curl_setopt_array()内部的执行顺序一定是从头到尾按顺序(好吧我知道assume不是件好事不过有些实在过分浅显的事实就容我下个最低限度的断言吧)所以尽可放心。我的做法只是在代码表现上加个多余的保险突出强调顺序的重要性防以后手贱。命名空间PHP 5.2或以下的版本没有命名空间。代码中用到了空间分隔符\就会引发解析器错误。要照顾PHP 5.2其实容易想放弃命名空间即可。要注意的反倒是有命名空间的PHP 5.3。无论是调用CURLFile还是用class_exists()判断CURLFile的存在性都推荐写成\CURLFile明确指定顶层空间防止代码包裹在命名空间内的时候崩掉。希望本文所述对大家PHP程序设计有所帮助。
http://www.sadfv.cn/news/289132/

相关文章:

  • 怎么优化网站源码关键词在线图片编辑器软件
  • 建设部网站监理工程师查询生活做爰网站
  • 临沂网站建设排名网站打不开怎么办
  • 网站公众号小程序开发公司dede网站根目录标签
  • 软件站自己这么做网站
  • 网站建设方案书设计图北京高端别墅设计公司
  • 国企有没有必要建设网站wordpress本地时间
  • 潍坊网站关键词推广易语言网站做软件下载
  • 小鱼在线网站建设简述网站开发过程
  • 网站的标准高级又小众的公众号
  • 备案用网站建设方案计算机论文
  • 热点新闻网站服务器速度对seo有什么影响?
  • 免费h5旅游网站模板科普网站建设方案书
  • 沈阳百度网站排名泰安集团网站建设
  • 建设一个农家乐网站网站建设单位是什么意思
  • 官方网站建设的目的作网站公司
  • 住房和城乡建设部网站造价师河北网站建设备案价格
  • 太原做网站效果怎么样旅行社网站建设规划书
  • 中国建筑公司网站大全广东中山建设信息网站
  • 电子商务网站模块wordpress迁移500
  • 余姚网站推广公司怎么判断网站是否被k
  • 网站制作 phpwordpress代码片段
  • 知名建筑设计网站米能花型设计师服务平台
  • 用html做网站步骤广州网页设计培训班
  • 做网站 就上宝华建站wordpress更好后台登录logo
  • tp做网站做科学实验的网站
  • 有关网站开发的文献综述网站外链分析
  • 东营网站设计多少钱做网站和做游戏哪个难
  • 一个网站要怎么做做企业免费网站
  • wordpress静态分页泉州百度seo