热门标签 | 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就可以了。我们在实际应用中,不要异想天开,乱来!


推荐阅读
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • PubMed数据下载
    目标站点分析目标:抓取页面中的机构名称,日期,标题,作者,作者信息 ... [详细]
  • css3怎么实现页面滚动动画特效?
    web前端|css教程css3实现页面滚动动画web前端-css教程本篇文章主要介绍css3实现页面滚动动画特效。那么我们首页要认识一下,什么是AOS?AOS是一个用于在页面滚动的 ... [详细]
  • SAE是新浪云计算战略的核心组成部分,Storage是SAE为开发者提供的分布式文件存储服务,用来存放用户的持久化存储的文件。本文我们来说说SAEStorage外部PHP接口。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 1.准备工作(1)启动mongo进入mongo安装目录的bin目录,.mongod(2)启动mongo客户端.mongo(3)查看所有库showdbs;(4)切换到lvyf库use ... [详细]
  • php扩展之yac安装,php yac
    本文目录一览:1、如何在编译好的PHP环境中安装PHP扩展模块 ... [详细]
  • 安装flume
    解压flume压缩包到指定目录内:tar-zxvfflume-n ... [详细]
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社区 版权所有