场景:
自已写的框架如:ThinkMan,有一个自定义的加载类Autoloader.php 用来加载ThinkMan的,
站点入口文件index.php 通常是引入ThinkMan的 Autoloader.php来完成功能;
在没有使用Workerman之前,一切正常,
为了体验强大的Workerman,在ThinkMan下通过composer引入workerman,
启动脚本start.php正常启动,端口正常.
问题:
使用WebServer后,所有的站点页面只显示一次,刷新后就变成空白,
测试后发现是加载ThinkMan下的Autoloader.php导致的。
如果不引入Autoloader.php单独使用ThinkMan下的类功能是正常的,页面也能正常显示,刷新不空白
那么请问,我是哪里出了问题呢?
Autoloader.php:
class Autoloader{
protected static $classMap = array();
public static function load($class){
$class_file = str_replace('\\','/',dirname(__DIR__).'/'.$class.'.php');
if(!isset(self::$classMap)){
if(file_exists($class_file)){
require_once $class_file;
self::$classMap = $class;
return true;
}else{
return false;
}
}else{
return true;
}
}
}
spl_autoload_register('\ThinkMan\Autoloader::load');
这个其他人很难定位问题,要自己查了
感谢@walkor ,
花了两三天时间才查出是wm的Worker::runAll() 与自身框架执行顺序的问题
另外请教一个问题:
如何在不使用如memcache来存储传递$_SESSION的情况下彻底销毁$_SESSION?
如在退出登录时:unset($_SESSION)后在当前页面$_SESSION是被清为空了
但在其它页面依然能访问到$_SESSION值。
$_SESSION 是http协议里的,而且必须调用Http::sessionStart() 才能正确使用。
否则$_SESSION在workerman里就只是内存中一个超级全局变量,每个请求都共用,但是每个进程不同步。如果在A进程unset($_SESSION),A进程处理的请求里确实没有$_SESSION变量了,但是B进程处理的请求$_SESSION还是存在
那也就是说没有办法一次性销毁整个超级全局变量$_SESSION咯
unset($_SESSION)就是把当前的$_SESSION一次性销毁了
感谢@walkor
$_SESSION的问题已经想办法解决了
另外碰到一个上传的问题,如同一个form表单下有两个或多个上传控件:
<form method="post" enctype="multipart/form-data" action="...">
<input type="file" name="file1" />
<input type="file" name="file2" />
<button type="submit">上传</button>
</form>
当提交后后台只能拿到最后个input的值
var_export($_FILES)也只能拿到最后一条数据
是表单设计有相应的规则吗还是哪里的问题?
这个问题前两周修复了,更新下版本
谢谢,
但还是出了个小问题
用composer update 显示更新到3.4.4成功,但问题依然存在,
后面从官网下载直接覆盖才解决了
之前composer没更新,
现在更新了,3.3.5版本