为什么在php中的session_start抛出警告说文件大

时间:2017-06-06 03:47:30

标签: php session

当我访问其中一个网页时,我没有改变任何代码,我看到了

  

警告:session_start()[function.session-start]:open(..)失败:文件太大..第2行的index.php。

另一个错误是:

  

警告:session_start()[function.session-start]:无法发送会话缓存限制器 - 已发送的标头`

第1行:<?php

第2行:session_start ();

问题

  1. 告诉File太大的错误原因是什么?什么文件很大?

  2. 为什么突然发生错误而没有进行任何文件修改?

  3. 为什么在session_start之前没有定义任何内容时,它已经发送&#39;标题已经发送过了?

  4. 如何解决此问题?

1 个答案:

答案 0 :(得分:0)

1。错误告诉File太大的原因是什么?什么文件很大?

  • 这似乎是托管服务提供商的问题,因为原始文件从未被修改,并且即使在清除缓存之后也已经从多个浏览器尝试了网页。 当您执行下面提到的session_save_path("../_session1001");时,您可以看到您的会话被写入该路径,因此该文件可能在您的共享内存中变得太大,现在我明确提到了一个物理空间将会话文件写入,此错误已不复存在。

4. 如何解决此问题?

  • 创建一个名为say&#39; _session1001&#39;的目录。并给chmod 755,以便您的网络服务器(app)可以写入它。
  • 在session_start之前添加此行 session_save_path("../_session1001");
  • 确保通过.htaccess文件保护目录。

即: <?php session_save_path("../_session1001"); session_start();

在此处阅读更多内容:http://php.net/session_save_path

注意:

Debian不会将默认垃圾收集器用于会话。相反,它将session.gc_probability设置为零,并运行一个cron作业来清理默认目录中的旧会话数据。

因此,如果您的网站使用session_save_path()设置自定义位置,则还需要为session.gc_probability设置一个值,

e.g:

<?php session_save_path('/home/example.com/sessions'); ini_set('session.gc_probability', 1); ?>

否则,&#39; /home/example.com/sessions'中的旧文件;永远不会被删除!