【问题标题】:I call session_start() the script hangs and nothing happens我调用 session_start() 脚本挂起,没有任何反应
【发布时间】:2010-05-25 06:53:49
【问题描述】:

我正在运行 php5,但是一旦我调用 session_start() 脚本 挂起,没有任何反应。是否有其他人遇到此问题,或 我是不是做错了什么?

我在 index.php 上使用 session_start() 有时出于某种原因 它会失败。没有警告,没有错误,没有通知,甚至在之后 前置 error_reporting(E_ALL) 和 ini_set('display_errors', TRUE) 在 session_start() 之前我看到了什么,它只是简单地死掉了。

【问题讨论】:

  • 它死了还是挂了?我的意思是,页面是否会永远加载?你在设置 PHPSESSID 吗?会话文件是否正在服务器上创建?
  • 我假设你的脚本应该有输出,对吧? (“是的,烤面包机已插上电源。”)你检查过你的日志吗?

标签: php session


【解决方案1】:

有很多原因,这里有几个:

A.会话文件可以以独占方式打开。 当文件锁定由于某种原因没有正确释放时,它会导致 session_start() 在任何未来的脚本执行中无限挂起。 解决方法:使用 session_set_save_handler() 并确保写入函数使用 fopen($file, 'w') 而不是 fopen($file, 'x')

B.永远不要在你的 php.ini 文件中使用以下内容(熵文件到“/dev/random”),这将导致你的 session_start() 挂起:

<?php
ini_set("session.entropy_file", "/dev/random");
ini_set("session.entropy_length", "512");
?>

C. session_start() 需要一个要写入的目录。

您可以在普通用户帐户中运行 Apache 和 PHP。 Apache 当然必须监听 80 以外的其他端口(例如 8080)。

请务必执行以下操作: - 创建一个临时目录 PREFIX/tmp - 将 php.ini 放在 PREFIX/lib 中 - 编辑 php.ini 并将 session.save_path 设置为您刚刚创建的目录

否则,您的脚本将在 session_start() 上“挂起”。

【讨论】:

  • 第一点是长时间运行的 php 进程的更大问题,例如服务器发送的事件处理程序。花了一段时间找出问题所在 - mod_security 和 apparmor 是第一批嫌疑人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多