安全限制PHP会话空间
我似乎在任何地方都找不到这些信息,所以我想我在这里问一下 目前,我已将PHP会话路径(session.save_path)设置为服务器硬盘上的一个文件夹 我创建了一个简单的PHP程序,如下所示:安全限制PHP会话空间,php,performance,session,strace,Php,Performance,Session,Strace,我似乎在任何地方都找不到这些信息,所以我想我在这里问一下 目前,我已将PHP会话路径(session.save_path)设置为服务器硬盘上的一个文件夹 我创建了一个简单的PHP程序,如下所示: <?php echo "TEST"; ?> 然后我用strace执行它,strace日志中耗时最长的进程是shmdt(),当我匹配这些数字时,它引用了session.save\u路径中的一个sem文件 我可以尝试缓解这个问题的一种方法是为php会话文件创建一个ram磁盘,但我希望能够向
<?php echo "TEST"; ?>
然后我用strace执行它,strace日志中耗时最长的进程是shmdt()
,当我匹配这些数字时,它引用了session.save\u路径中的一个sem文件
我可以尝试缓解这个问题的一种方法是为php会话文件创建一个ram磁盘,但我希望能够向php配置文件本身添加一个配置条目,以便php了解在删除旧条目之前,它有很多空间可以使用
我需要什么配置条目来完成此任务
如果可能,我可以使用哪些配置条目来消除shmdt()
调用
我在PHP版本5.5.29中测试了我的脚本。我知道您试图防止会话文件在会话文件夹(session.save_path)中存储过多 如果您有权访问PHP配置文件(PHP.ini),则必须将“session.gc_maxlifest”的值调整为所需的最大持续时间,以便从服务器上删除这些文件 PHP文档: 要为“RAM磁盘”分配空间,需要根用户访问服务器。如果这是您的情况,您必须执行以下操作:
<?php echo "TEST"; ?>
我希望这能有所帮助。所谓“服务器硬盘”,是指运行PHP的服务器吗?或者在nfs文件服务器上?是。一切都是在服务器上测试的,没有任何外部连接。(硬盘包含正在运行的php文件和会话文件夹)您使用的是默认会话处理程序吗?sem文件的名称是什么?您使用的是opcache吗?事实上,如果这是用
shmdt
标记的整个脚本,那么它似乎不太可能与会话相关,因为您实际上没有启动会话(因此会话处理支持不应该启动)。这很奇怪,因为shmdt只在三个地方使用:opcache、shmop和sysvshm扩展。你有没有可能得到调用shmdt的任何东西的堆栈跟踪?我根本没有使用opcache,但是我已经用PHP安装了shmop扩展。这会导致吗?我已经在服务器上安装了ram驱动器,并且处于活动状态。虽然session.gc_maxlife可以最大限度地降低磁盘空间过大的风险,但我觉得有一个比冒险更好的答案(如果磁盘使用量超过x字节,可能会出现某种恐慌/减少文件设置)
vi /etc/fstab
none /var/sessions tmpfs defaults,size=50M 1 2
mount -a