原关于 php json API接口开发的注意问题
关于 php json接口开发的注意问题
一是注意跨域问题.需要加 Access-Control-Allow-Origin:* http头.(针对于前端浏览器脚本调用接口)
二是如果请求的header里 Content-Type: 是 application/json,则需要用 file_get_contents("php://input");接收.如果用 swoole 框架的话,需要用$request->rawContent()接收.
如果请求header里Contente-Type是 multipart/form-data,或application/x-www-form-urlencoded或application/octet-stream
则需要用 $_POST($_GET)或$_FILES来接收.
Ps :js 代码调用接口示例如下
1.要加contentType: "application/json; charset=utf-8",
2.需要使用JSON.stringify 转换json对象或把对象转为字符形式,如'{"aa":22}'(json两边加单引号)
var submit_sync = function() { $.ajax({ type: "post", url: 'add-post-json.php',…
PHP异步编程简述
概述
异步编程,我们从字面上理解,可以理解为代码非同步执行的。异步编程可以归结为四种模式:回调、事件监听、发布/订阅、promise模式。我们最熟悉的两种模式是回调和事件监听,举两个最简单的javascript例子,一个ajax,一个点击事件的绑定:…
PHP 用websocket实现客户端和服务器消息双向推送
PHP 实现websocket…
php在Nginx环境下进行刷新缓存立即输出,实现常驻进程轮询
以下面这段代码并不会逐个输出,而是当浏览器筹够一定字节数进行统一输出,结果显而易见,10秒后一次性输出所有内容…
php nginx 实时输出
PHP 里开启实时输出方法是ob_implicit_flush()
,
但它大部分情况下都不管用,
因为php.ini
配置里output_buffering
输出缓冲大部分是On
开启的,
还有zlib.output_compression
也经常会被开启,
除了 PHP 这一层,还有 Nginx 的缓冲设置proxy_buffering
,和压缩gzip
也大都是开启的。
为了一两个页面的需求,修改整个服务器的网站配置,恐怕没有人会做这种选择。
这里推荐一下简单的方法:
…原PHP中类静态调用和范围解析操作符的区别
<?php //在子类或类内部用“::”调用本类或父类时,不是静态调用方法,而是范围解析操作符。 class ParentClass { public static $my_static = 'parent var '; public function test() { self::who(); // 输出 'parent' 是范围解析,不是静态调用 $this->who(); // 输出 'child' static::who(); // 输出 'child' 延迟静态绑定 是范围解析,不是静态调用 } public function who() { echo 'parent<br>'; } }…
php发送http put/patch/delete请求Demo
CURL请求对于PHPer是必备技能,使用curl_opt
函数来发送各式各样的http请求动作,不仅限于get和post。
在测试自己的restful api的时候,通过访问这个代理发送http put/patch/delete请求的php页面,完成测试。请参考下面的DEMO。
<?php /** * http.php * 用来向服务器的RESTful API发起各类HTTP请求的工具函数。 * * 使用: http://localhost/http.php?action=xxx * xxx \in {get,post,put,patch,delete} * * Created by PhpStorm. * User: Lenix * Date: 2018/1/6 * Time: 下午20:22 */ class commonFunction{ public function…
鸟哥:PHP Next: JIT
惠新宸(鸟哥)
链家集团 技术副总裁
惠新宸 ,国内最有影响力的PHP技术专家, PHP开发组核心成员 , PECL开发者 , Zend公司外聘顾问,
2017年第三届PHP开发者大会总结(二)鸟哥JIT篇.md
THE NEXT GENERATION OF PHP(惠新宸)
鸟哥本次分享的主要内容是,在php7发布的这两年期间他们的主要工作,包括release的7.1和正在开发中的jit分支。说实话,由于本人水平有限,鸟哥分享的内容只能大概听懂意思,知道他们在做什么,但具体原理细节,鸟哥分享的我还真听不懂。这里就对鸟哥的分享内容做个总结。
php7之后还有什么?JIT
php7于15年正式发布,他的最大卖点是,无感知的100%性能提升,包含了运行速度与内存消耗。那么在此之后php该往哪里发展呢?目前已经在开发的一个大方向就是JIT
JIT是什么?为什么是JIT?
鸟哥并没有做过多的解释。我就谈一些我的肤浅认识,给phper们提供些参考。
首先JIT(just in time)并非是新技术,一大批语言如java早已实现。JIT的思想很简单,即在程序运行时动态对程序进行编译,生成平台相关的机器码,从而加快程序运行速度。
php文件的执行流程大致是首先引擎加载php文件,解释器逐条解释执行代码。引入JIT后,前面一样,重点是JIT编译器会根据Runtime信息对热点代码进行动态编译生成机器码,然后这部分代码以后就可以直接执行了,而不需要解释器逐条解释执行了,运行效率便得到了提升
看到这里不知道大家是否和我有一样的疑问,既然编译为机器码执行的效率那么高,为何不在项目正式部署前全部进行编译,何必在运行时编译?
要知道运行时编译也会增加程序的执行时间的。我在查阅了一些资料和一番思考后,有以下一些浅见
代码发布前先编译,是比JIT更早的通用办法,称为AOT(ahead of time)
,c语言便是这种执行模式。关于这两种模式孰优孰劣,学术界一直争论不休,目前也没有定论。但JIT相比AOT有这样几个优点
- 发布速度快。不用每次都编译,发布速度自然快
- 优化效率更好。因为JIT是基于Runtime信息,比AOT更“了解”代码,优化的效率更好。比如分析Runtime得知某个变量虽然声明是10个字节,但运行过程中一直是1个字节,那么就可以减小程序内存消耗;再比如某段代码始终未被执行,JIT则可以直接将其忽略
- 粒度更精细。JIT可以只针对hotspot(热点)进行编译,热点可能是一个函数或者只是一个代码段
- 对码农透明。JIT无须码农自己对程序根据不同平台进行编译发布,只需要写高级代码即可
基于以上几个优点,再结合php一贯的简单易用原则,我想JIT确实是不错的选择。不过php也是支持AOT的,有兴趣的同学可以查一下。
但JIT技术也绝不是灵丹妙药,即便是编译也是需要时间的,当代码编译的时间消耗大于运行收益时,程序反而会变慢!
会有这种情况吗?有的,比如某个项目中,热点并不明显,JIT编译的代码执行次数都很少,那么编译带来的收益是有可能小于编译本身的消耗的
以下是在标准测试中引入JIT技术后,php运行效率比7.2有100%的性能提升,不过在实际生产环境中效果不会有这么好
php7.1做了什么?类型预测
php要想实现JIT,有一个难题必须解决,那就是变量的类型预测
。试想如果在动态编译时还要进行大量的类型检查,性能将会大打折扣。php7中已经可以对变量类型进行控制,7.1则是更加完善了这个机制,可以说目前php已经是半强类型语言了。但由于php的弱类型历史,仍有大量代码运行前是无法得知变量类型的,所以在7.1中鸟哥进行了大量变量类型预测的工作,为后续JIT打基础
变量预测
近期评论