gpt4 book ai didi

PHP - session_id() 给了我 HTTP/1.1 500 内部服务器错误

转载 作者:行者123 更新时间:2023-12-04 05:57:55 24 4
gpt4 key购买 nike

使用 PHP 作为 FastCGI 运行 Apache。

serverinfo.php :

if (isset($_GET['session'])) {
session_id($_GET['session']);
session_start();
die('You got here');
}

我什至不会去 session_start() 因为 session_id() 会挂起“线程”。
这是场景:

页面 [serverinfo.php] 显示服务器信息,您也可以在其中更新信息。
更新信息时,会向 发出 AJAX 调用。 [update.php] ,当一切都更新时 [update.php] 应该返回 中显示的相同数据[serverinfo.php] 只是为了用新数据“刷新”“页面”,这是通过以下方式完成的:

update.php :
if($update) {
$serverinfo = file_get_contents('http://127.0.0.1/serverinfo.php?session=' . session_id() . '&name=' . $_GET['name']);
print $serverinfo;
}

我之所以要重新使用内部 $_SESSION 是因为我需要访问有关特定 session 的客户端的数据,例如用户名和其他重要数据。
否则 serverinfo.php 只会给我:“登录!”它应该做的:)

我可以:
include_once('serverinfo.php');
并以某种方式传递 $_GET 数据,但我不太确定这是否有效或高效:)

来自 Apache 的访问日志 :
127.0.0.1 - - [15/Feb/2012:11:03:15 +0100] "GET update.php?source=serverinfo&name=test HTTP/1.1" 500 544
127.0.0.1 - - [15/Feb/2012:11:03:15 +0100] "GET serverinfo.php?session=<session_id>&name=test HTTP/1.0" 500 544

这只是表明 update.php 实际上完成了它的更新并尝试调用 serverinfo.php 但它因内部服务器错误而失败。

apache 错误日志 :
[Wed Feb 15 11:03:55 2012] [warn] [client 127.0.0.1] mod_fcgid: read timeout from pipe
[Wed Feb 15 11:03:55 2012] [error] [client 127.0.0.1] Premature end of script headers: serverinfo.php

这是全局 错误日志 :
[Wed Feb 15 11:04:04 2012] [warn] mod_fcgid: process 5584 graceful kill fail, sending SIGKILL

最佳答案

好的,从字里行间看,我想我知道这里发生了什么。

与你所确定的相反,我想你会发现它实际上是session_start()即挂起,500错误的原因是时间限制最终到期。

原因session_start()挂了是因为update.php仍然锁定 session 文件。当您打开 session 时,文件被打开它的脚本锁定。您可以通过使用 session_write_close() 关闭 session 数据来释放此锁。 - 但这可能不是你想要在这里做的。

我会说你想做的就是你所建议的,而include 'serverinfo.php';而不是通过 HTTP 调用它。这会更有效率 - include与 HTTP 请求相比,它的工作量要少得多 - 它将解决 session 问题。您不需要“通过”$_GETserverinfo.php有两个原因:

  • $_GETsuperglobal .它在执行给定脚本的每个可能范围内自动可用。
  • 当一个文件被包含时,它继承了它被包含的范围。这意味着即使 $_GET不是超全局的,它仍然可以在包含的文件中使用,因为它在包含文件的范围内可用。

  • 如果您包含该文件,您也无需担心使 session 数据可用, $_SESSION具有与 $_GET 相同的超全局属性.

    您需要做的就是:

    update.php
    if ($update) {
    include 'serverinfo.php';
    }

    serverinfo.php
    die('You got here');
    // $_GET['name'] has the same value here as it does in update.php
    // Similarly, all the $_SESSION data is automatically available here

    关于PHP - session_id() 给了我 HTTP/1.1 500 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9291750/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com