我正在寻找一种每晚运行维护脚本的方法,该脚本仅需要“阻止”我网站的某些用户。我的网站有两组用户:内容添加者和内容使用者。当内容添加器导航到我网站中的特定页面集时,我想在网页中显示“维护”消息,并阻止该用户在后台维护脚本完成之前使用页面上的功能。
通常,我会在服务器上锁定文件,但是我在StackOverflow上看到过讨论,说该方法在php中不可靠。我可以更新数据库表中一行的列,但是没有办法创建站点的所有用户都可以访问的“超级会话”变量吗?这样,服务器的chron可以调用站点php代码中一部分的管理功能,并且可以对其进行设置,完成工作,然后再清除常见的“ super-session”变量。
如果有帮助,我正在使用Symfony 2。
我知道在这里有很多有关同步用户的信息,但是我要寻找的这个问题是,如果可能的话,如何在访问我网站的所有用户会话中全局共享变量。
谢谢。
答案 0 :(得分:0)
我在http://php.net/manual/en/book.sem.php找到了“信号量,共享内存和IPC”
我还没有计算出我将要使用的实际代码,但是我认为尝试使用“ sem_acquire”创建一个信号量,其中的nowait参数为true,如果该信号量已经存在,则返回false。被另一个进程“锁定”。
通过这种方式,我的管理员操作在进行维护时会使用错误的nowait参数来获取信号量,因此网站的用户将尝试使用真实的nowait参数来获取相同的信号量,并得到false并“知道”该信号量。网站处于维护模式。
管理操作完成后,将释放信号灯。这样,当用户尝试获取信号量时,他们会变成真实,然后将其释放并知道网站未处于维护模式。
当用户成功获取信号时,管理员操作将暂时阻止该信号,但是当用户立即释放该信号时,将继续进行操作。