Golang称php7详细的解决方案和实例

执行PHP文件




功能test_exec(T *测试。T){
初始化()
引擎=上下文{
输出:Stdout操作系统,
}
错误:= engine.requeststartup(CTX)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.requestshutdown(CTX)
操作系统()
如果错误!= { { {
Println(ERR)的性能。
}
}



内容 / /的index.php是TMP


< PHP
回音();



eval函数,返回值




功能test_eval(T *测试。T){
初始化()
=引擎。上下文{ }
错误:= engine.requeststartup(CTX)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.requestshutdown(CTX)
瓦尔,错误:= CTX。eval(return'hello;)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.destroyvalue(Val)
如果engine.tostring(Val)!=hello{
T.FailNow()
}
}



返回值的生命周期的所有权是朗的程序,所以我们负责destroyvalue

设置全局变量以传递引用




功能test_argument(T *测试。T){
初始化()
=引擎。上下文{ }
错误:= engine.requeststartup(CTX)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.requestshutdown(CTX)
绑定(问候)
如果错误!= { { {
Println(ERR)的性能。
}
瓦尔,错误:= eval(CTX。返回的问候;)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.destroyvalue(Val)
如果engine.tostring(Val)!=hello{
T.FailNow()
}
}



传入的参数的生命周期由PHP控制,内存将在请求关闭时释放。

php回调郎




型greetingprovider struct {
问候字符串
}

Func(供应商greetingprovider)getgreeting字符串(){
返回provider.greeting
}

功能newgreetingprovider(args { } { } { }接口界面){
返回greetingprovider {
问候:args { 0 }。(字符串),
}
}

功能test_callback(T *测试。T){
初始化()
=引擎。上下文{ }
错误:= engine.requeststartup(CTX)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.requestshutdown(CTX)
错误=引擎。定义(greetingprovider
如果错误!= { { {
Println(ERR)的性能。
}
瓦尔,错误:= eval(` CTX。
greetingprovider美元=新GreetingProvider(你好);
Return $greetingProvider->GetGreeting ();
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.destroyvalue(Val)
如果engine.tostring(Val)!=hello{
T.FailNow()
}
}




PHP错误日志




功能test_log(T *测试。T){
engine.php_ini_path_override = / / tmp PHP INI
初始化()
引擎=上下文{
日志:Stderr操作系统,
}
错误:= engine.requeststartup(CTX)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.requestshutdown(CTX)
_,呃= CTX,eval(error_log(你好,4);trigger_error('sent从郎,e_user_error);)
如果错误!= { { {
Println(ERR)的性能。
}
}



/ /甲氧苄啶的含量


error_reporting = e_all
error_log = / / PHP错误日志差。



错误将出口 / / tmp PHP错误。日志,error_log直接调用将输出复制到stderr同时

HTTP输入和输出




功能test_http(T *测试。T){
初始化()
录音:= httptest.newrecorder()
引擎=上下文{
要求:httptest.newrequest(
responsewriter:录音机,
}
错误:= engine.requeststartup(CTX)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.requestshutdown(CTX)
_,呃= CTX。eval(回波($ _server { 'request_uri});)
如果错误!= { { {
Println(ERR)的性能。
}
体,错误:= ioutil.readall(recorder.result()。体)
如果错误!= { { {
Println(ERR)的性能。
}
如果字符串(体)!{{
T.FailNow()
}
}



所有PHP超级全局变量都初始化为传入的请求值,包括


_server美元
_get美元
_post美元
_file美元
_cookie美元
_env美元



回声的内容,HTTP代码和HTTP标头将写回输入responsewriter

fastcgi_finish_request



一、PHP-FPM最常用的功能是fastcgi_finish_request,用来在PHP做异步的。这种特殊的全局函数必须支持


功能test_fastcgi_finish_reqeust(T *测试。T){
初始化()
缓冲区:=字节。缓冲区{ }
引擎=上下文{
输出:缓冲区,
}
错误:= engine.requeststartup(CTX)
如果错误!= { { {
Println(ERR)的性能。
}
推迟engine.requestshutdown(CTX)
CTX。eval(ob_start();echo(你好');)
如果缓冲区字符串()!= {
T.FailNow()
}
CTX。eval(fastcgi_finish_request();)
如果缓冲区字符串()!=hello{
T.FailNow()
}
}



实际效果是将输出提前resposnewriter并让对方知道结果。在当前进程的执行没有影响,但它只影响输出。

谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持。