记一次使用thinkphp的小bug的解决方案

这次错误出现在我post数据到某个action里。
报错内容如下:

非法操作:
错误位置 FILE: C:\inetpub\yinjinew\ThinkPHP\Library\Think\Controller.class.php  LINE: 170- 
TRACE
0 C:\inetpub\yinjinew\ThinkPHP\Library\Think\Controller.class.php(170): E('\xE9\x9D\x9E\xE6\xB3\x95\xE6\x93\x8D\xE4\xBD\x9C:\t\t...')
1 [internal function]: Think\Controller->__call('\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...', '')
2 C:\inetpub\yinjinew\ThinkPHP\Library\Think\App.class.php(114): ReflectionMethod->invokeArgs(Object(Admin\Controller\SourceController), Array)
3 C:\inetpub\yinjinew\ThinkPHP\Library\Think\App.class.php(204): Think\App::exec()
4 C:\inetpub\yinjinew\ThinkPHP\Library\Think\Think.class.php(120): Think\App::run()
5 C:\inetpub\yinjinew\ThinkPHP\ThinkPHP.php(97): Think\Think::start()
6 C:\inetpub\yinjinew\index.php(24): require('C:\\inetpub\\yinj...')
7 {main}

这个错误看起来貌似是没写对方法名,不过我的链接直接访问是没有问题的,只有在保存(POST)的时候会出现错误。
逐步排查
1. 用echo输出在控制器里面没有效果
2. 根据错误栈顶到栈底排查,排查到App.class.php(204)时发现ACTION_NAME是空的
3. 我找到了ACTION_NAME的定义位置,在/ThinkPHP/Library/Think/Dispatcher.class.php:Line_240这里

 define('ACTION_NAME',       defined('BIND_ACTION')? BIND_ACTION : self::getAction($varAction,$urlCase));
  1. 查看了getAction方法发现
$action   = !empty($_POST[$var]) ?
            $_POST[$var] :
            (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_ACTION'));
  1. 由此我大概明白错误原因了,这个语句应该是thinkphp给没有url重写的服务器留的适配,这个action参数名字和我POST内容的选项a的name冲突了。
    找到问题了解决就很容易了,去Conf里面把VAR_ACTION改个值不是’a’就行了
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值