热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yaf中Action再次Dispatch导致PHP段错误Segmentationfault

朋友会发现在使用Yaf中Action再次Dispatch导致PHP段错误Segmentationfault提示了,碰到这种错误我们要如何来解决呢,下面php入门小编为各位介绍一下

朋友会发现在使用Yaf中Action再次Dispatch导致PHP段错误Segmentation fault提示了,碰到这种错误我们要如何来解决呢,下面php入门小编为各位介绍一下解决方法。

首先,这个问题是在Yaf群偶然看到的,这些小伙儿不折腾不畅快,今天闲来,扫了一下代码,得出结论。
其次,另外一个观点是,工具在运用时一定要清楚其原理,不然就是自己跳坑了没有人救的。
先简单明了看一下,在基于Yaf的PHP代码示例:

dispatch($request);
        $this->_view->assign('displayWelcome', 1);
        $this->_view->assign('hello', 'hello world!');
    }
    public function simpleAction()
    {
        echo 'xudianyang';
    }
}

在默认的indexAction中,我创建了一个Yaf\Request\Simple的请求对象$request,参数的意思是请求Index模块和Index控制器的Simple动作,这里需要注意的是,如果你将请求设置为和当前action的路由参数相同,那么你将进入死循环,都不用大拇指想就知道。然后调用派遣器Dispatcher的dispatch方法,进行路由分发。

Yaf中Action再次Dispatch导致PHP段错误Segmentation fault
从图中可以看出,在“新一轮分发”的过程中,任何一个环节出现问题,或者exit,return都不会产生程序崩溃。比如,simpleAction方法这样写:

public function simpleAction()
{
    echo  'xudianyang';
    exit;
}

再比如:simple方法对应的模板文件views/index/simple.phtml不存在,也不会生产Segmentation fault。
产生段错误的原因在图中说得也很明显,指针引用不再可用,因为新一轮分发是调用了Dispatcher::getInstance()->dispatch($request);此方法会重置Yaf\Dispatcher单实例的$_request属性。
通过gdb调试core文件也可以得出:

(gdb) bt
#0 0x083d58d4 in zend_std_read_property (object=0xb777c020, member=0xb73f8938, type=3, key=0x0)
at /home/vagrant/php-5.4.31/Zend/zend_object_handlers.c:431
#1 0x083b4508 in zend_read_property (scope=0xa392cb8, object=0xb777c020, name=0xcb64c6 "module", name_length=6, silent=1 '\001')
at /home/vagrant/php-5.4.31/Zend/zend_API.c:3859
#2 0x00c96c85 in yaf_dispatcher_fix_default (dispatcher=0xb778143c) at /home/vagrant/yaf-2.3.2/yaf_dispatcher.c:236
#3 yaf_dispatcher_dispatch (dispatcher=0xb778143c) at /home/vagrant/yaf-2.3.2/yaf_dispatcher.c:927
#4 0x00c91bd6 in zim_yaf_application_run (ht=0, return_value=0xb7799fcc, return_value_ptr=0x0, this_ptr=0xb777a140,
return_value_used=0) at /home/vagrant/yaf-2.3.2/yaf_application.c:468
#5 0x0841f5d4 in zend_do_fcall_common_helper_SPEC (execute_data=)
at /home/vagrant/php-5.4.31/Zend/zend_vm_execute.h:643
#6 0x084137a6 in execute (op_array=0xb777a408) at /home/vagrant/php-5.4.31/Zend/zend_vm_execute.h:410
#7 0x083b1c6e in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /home/vagrant/php-5.4.31/Zend/zend.c:1315
#8 0x08357706 in php_execute_script (primary_file=0xbfb72338) at /home/vagrant/php-5.4.31/main/main.c:2502
#9 0x0845c1cb in main (argc=6, argv=0xbfb72494) at /home/vagrant/php-5.4.31/sapi/fpm/fpm/fpm_main.c:1933

最后,其实分析这个只是熟悉一下Yaf的分发策略及其源码。另外,想要在一个action中执行另外一个action,其实鸟哥已经考虑了,通过Yaf_Controller_Abstract::forward就可以了。我们在实际应用中,不要异想天开,乱来!


推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Kong插件开发向导
    Kong插件开发向导转载李亚飞大佬的文章:https:www.lyafei.com简介前面洋洋洒洒写了那么多文章,Kong搭建、Konga搭建、Kong插件开发工具包、Lua算法实 ... [详细]
  • 【知识】12月10日每日安全知识热点 ... [详细]
  • Java框架springAOP(简单了解与常见小错误)
    AOP的全称是“AspectOrientedProgramming”,即面向切面编程,它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效 ... [详细]
  • css3怎么实现页面滚动动画特效?
    web前端|css教程css3实现页面滚动动画web前端-css教程本篇文章主要介绍css3实现页面滚动动画特效。那么我们首页要认识一下,什么是AOS?AOS是一个用于在页面滚动的 ... [详细]
  • LoadRunner性能测试入门教程
    javaweb性能测试那些事一:什么是javaweb性能测试:二:javaweb性能测试基本流程三:javaweb性能测试常 ... [详细]
author-avatar
手机用户2502920725
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有