20150624

casperjs referrer fake


var fakeReferrer = "http://a.com";
var targetUrl = "http://b.com";

var casper = require('casper').create();

casper.start(fakeReferrer, function () {
    this.echo(this.getCurrentUrl());
});

casper.then(function () {
var targetUrl  = targetUrl;
this.evaluate(function () {
    var link = document.createElement('a'); // make a element
    link.setAttribute('href', targetUrl );  // required
    link.setAttribute('id', "myTargetUrl"); // add id in element
    document.body.appendChild(link);        // add a element in document
});
});

casper.then(function () {
    this.click('a#myTargetUrl');
});


casper.run(function () {
    this.echo(this.getCurrentUrl());
});


//To put in a nutshell....

var casper = require('casper').create();
casper.start().then(function () {
    this.page.customHeaders = {
        "Referer": fakeReferrer
    };
});
casper.thenOpen(targetUrl).run();


'PHP 7'에 대해 반드시 알아야 할 것 5가지

어제 Zend사의 뉴스레터로 재미있는 것이 왔습니다. 바로 PHP의 다음 버전인 'PHP 7'에 대한 것입니다. "'PHP 7'에 대해 반드시 알아야 할 것 5가지"라는 거창한(?) 제목의 메일인데 본문에는 'PHP 7'에 대한 인포그래픽 페이지로의 링크를 가지고 있었습니다. 그 인포그래픽 페이지에 있는 내용을 정리해보겠습니다. 참고로 현재 PHP의 최신 버전이 5.6인데 차기 버전 넘버가 7이 된 것은 개발이 취소된 'PHP 6'와의 구별을 위한 것이라고 합니다.

1. 'PHP 7'은 2015년 10월 릴리즈 예정

2015년 6월 중순에 RC 버전이 나오고 10월 중순에 릴리즈가 목표라고 합니다.


2. 복합연산자 도입

루비 등에 있는 <=> 복합연산자가 도입됩니다. strcmp()와 비슷한 동작을 하는 함수인데 문자 타입에 대한 비교를 하는 strcmp()와는 달리 <=> 복합연산자는 배열이나 객체에도 사용할 수 있는 것이 다릅니다. usort() 함수의 콜백 함수와 같이 정렬 기능을 만들때 효율적이라고 합니다.


3. 함수 리턴 타입 선언 및 스칼라 타입 힌트 추가

이제 PHP도 Java와 같은 언어처럼 함수의 리턴 타입을 선언할 수 있습니다. 거기에 기존 'PHP 5'에서는 데이터 타입 힌트를 배열과 객체에만 사용할 수 있었는데 일반 스칼라 타입에도 타입 힌트를 사용할 수 있게 되었습니다.


4,5. 빠른 속도

4번과 5번 항목은 속도에 대한 이야기입니다. '빠르다. 그리고, 점점 더 빨라지고 있다' (ㅡ.ㅡ;) Zend쪽에서는 페이스북이 만든 HHVM보다 빠르다라고 이야기하는 것 같습니다. 현재 기준으로 'PHP 7'이 PHP 5.6보다 25%에서 최대 70% 정도까지 성능향상이 있다고 합니다.



http://www.just4fun.kr/2015/03/php-7-5.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+just4fun%2FIZeD+%28just+for+fun%29

HHVM下fastcgi_finish_request的替代方案

最近在研究与迁移HHVM,在过程中遇到不少坑,比如遇到了fastcgi_finish_request这个函数问题。

fastcgi_finish_request是由FPM特供的一个函数,主要实现了在结束http请求之后,php-cgi仍然继续执行fastcgi_finish_request后面的代码,可以实现的一个简单的异步操作,具体使用可以参考之前的文章:《使用fastcgi_finish_request()提高请求响应速度》

在不断摸索之后,终于找到了HHVM下fastcgi_finish_request的替代方案,

HHVM 也提供了一个类似的函数:register_postsend_function


以上是HHVM官方的idl,对此函数的描述,它实现了类似fastcgi_finish_request的功能,由于官方wiki非常少,
在尝试之后,此函数的使用方式如下:
register_postsend_function是注册一个回调函数用于http请求结束时触发,参数类似call_user_func,

用法如下:



中第一个参数为回调函数,可以是一个匿名函数,也可以是预定义的函数,也可以是类的公共函数或静态函数,
后续的参数对应于传入回调函数的形参。

如:


或者:



以上两个例子中的$a对应于传入的形参$bar
在类中使用如下


使用注意:

因为register_postsend_function是注册回调函数,并且是在http结束之后才会触发,

并不像fastcgi_finish_request是直接在上下文中,
所以它并没有保持发起此函数时的上下文,回调函数里面的现场需要显式的还原,可以通过函数参数来还原现场。

使用fastcgi_finish_request()提高请求响应速度

当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法.
听起来可能有些茫然,我们通过几个例子来说明一下:


通过浏览器访问此脚本, 结果发现并没有输出相应的字符串,但却生成了相应的文件.由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行!
合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子:



代码里用sleep模拟一些耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志.
末了给您提个醒,Yahoo在Best Practices for Speeding Up Your Web Site中提到了Flush the Buffer Early,也就是利用PHP中的flush方法把内容尽快发到客户端去,它和本文介绍的fastcgi_finish_request有些许的类似.
转载附言: 我看了下这个方法, 在调用的时候, 会发送响应, 关闭连接. 但是不会结束PHP的运行. 相比调用flush, 或者我之前介绍的加速你的Echo来说, 这个方法能更加干脆一些.
另外, 从代码的可移植性讲的话, 可以在代码中附上如下代码:


http://www.laruence.com/2011/04/13/1991.html

Articles