FileMonitor监控报错

0

问题:想把gatewaywork封装下,启动文件index.php首先是加载了vendor的core.php文件(文件内容附件),可以正常运行;
代码:


foreach(glob(APP_PATH.'_/start_.php') as $start_file)
{
require_once $start_file;
}
// 标记是全局启动
Worker::runAll();

但是如果引入一个对象启动类比如Applicaiton::run();把上面的代码放入运行,此时启动后文件监控在终端报错!(报错信息说文件夹为空)
结论:经过测试发现只要将代码:


foreach(glob(APP_PATH.'_/start_.php') as $start_file)
{
require_once $start_file;
}

//这个代码放入到core.php中,然后Worker::runAll();放入到封装的Applicaiton::run();
下,可以正常运行。
疑问:难道我不能把引入的那段代码放入到封装的Applicaiton::run();下,保证core.php一个清爽的代码:只有一行
Applicaiton::run();运行伟大的框架?
谢谢群主指导!

aa.png bb.png
已邀请:

walkor

赞同来自:

最后面截图调用栈里很明显 check_files_change($monitor_dir) 里$monitor_dir传了null导致的。


https://github.com/walkor/workerman-filemonitor/blob/master/Applications/FileMonitor/start.php#L6
$monitor_dir在这里是一个全局变量,你看看你是不是把它,放入到函数里变成临时变量了,导致读不到$monitor_dir。

收破烂的才子 - 喜欢折腾的人

赞同来自:

@walkor 真的很感谢您,但是我排查了下,还是不能发现问题!我再提问的时候首先已经看了手册,同时也看论坛相关回答,但是仍然有问题。。。。。
问题如附件图片
新的发现:如果我把路径写死,可以运行,但是mysql会启动好多次(图片5,图片6)
谢谢!

damao - phper

赞同来自:

我看懂群主的意思了。


function a() 
{
// 这个声明是在一个函数内部,是一个局部变量,不是全局变量
$monitor_dir = xxxx;
$worker = new Worker(..);
$worker->onWorkerStart = function(){
global $monitor_dir; // 因为没有全局变量$monitor_dir,所以这里$monitor_dir是null
....
}
}

damao - phper

赞同来自:

其实可以定义常量, define('MONITOR_DIR', 'xxxxxxx');
这样肯定哪里都能访问到了

damao - phper

赞同来自:

最后提示意思是GatewayWorker/Lib/DbConnection类不在使用了,让用Workerman/Mysql类

要回复问题请先登录注册