【问题标题】:PHP Warning: session_ start(): php_network_getaddresses: getaddrinfo failedPHP 警告:session_start():php_network_getaddresses:getaddrinfo 失败
【发布时间】:2014-07-24 14:43:57
【问题描述】:

我们有一台 Amazon linux 服务器在过去 3-4 个月内从未使用过,当我们开始使用它时,用 PHP 编写的登录模块已完全损坏。当我检查标准 httpd 日志 /var/log/httpd/error_log 时,它说:

PHP 警告:session_start(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/sites/siteAdmin/authenticate.php on line 1

我被提到了很多关于这个的问题(关于 stackoverflow)、文章和博客,但没有一个对我有用。请帮忙。

验证.php

session_start();
global $dbname,$dbserver,$dbusername,$dbpasswd,$_SERVER;
include_once($_SERVER['DOCUMENT_ROOT']."/includes/_db_config.php");
$db = mysql_connect($dbserver,$dbusername,$dbpasswd);
mysql_select_db($dbname,$db);
$msg = "";
$userName=$_REQUEST["userName"];
$password=$_REQUEST["password"];
$sql_result2 = mysql_query("select * from TBL where user = '$userName' and pass = '$password'", $db);
$rs2 = mysql_fetch_array($sql_result2);
if(count($rs2)>0){
 $adminId=$rs2[0];
 $_SESSION["adminId"] = $adminId;
 $_SESSION["loggedInFlag"] = 1;
 header("Location:main.php");
 exit();
}
else{
 header("Location:URL");
 exit();
}

session.* 来自 phpinfo()

Directive                          Local Value  Master Value
session.auto_start                 Off          Off
session.bug_compat_42              Off          Off
session.bug_compat_warn            On           On
session.cache_expire               180          180
session.cache_limiter              nocache      nocache
session.cookie_domain              .URL         .URL
session.cookie_httponly            Off          Off
session.cookie_lifetime            0            0
session.cookie_path                /            /
session.cookie_secure              Off          Off
session.entropy_file               no value     no value
session.entropy_length             0            0
session.gc_divisor                 1000         1000
session.gc_maxlifetime             28800        28800
session.gc_probability             1            1
session.hash_bits_per_character    5            5
session.hash_function              0            0
session.name                       PHPSESSID    PHPSESSID
session.referer_check              no value     no value
session.save_handler               Memcache     Memcache
session.save_path                  tcp://URL:11111?persistent=1&weight=1&timeout=1&retry_interval=15
session.serialize_handler          php          php
session.use_cookies                On           On
session.use_only_cookies           On           On
session.use_trans_sid              0            0

【问题讨论】:

  • 我只是试着写了几行代码 {session_start(); echo session_id();},但它不起作用。它没有显示任何内容
  • 我的意思是:I have been referred to so many questions(on stackoverflow), articles and blogs regarding this, none of them worked for me,了解您尝试解决问题的方法以及为什么它不起作用可能会很有用。 :)
  • 一下子发现DNS可能有问题,于是刷了DNS。然后我尝试重置我的 session_path。然后我把 PHP 从 5.3.1 升级到了 5.3.6,但是也没用。
  • 在尝试会话内容之前,您是否将 ini_set('display_errors', true); 放在脚本的顶部?
  • 顺便说一句,您的代码非常不安全,并且显示了 SQL 注入的完美路径。

标签: php apache session


【解决方案1】:

该错误消息表明 PHP 无法解析您的内存缓存服务器的主机名来启动会话。

您可以在session.save_path 设置中看到内存缓存服务器的 URL。

你能从运行 PHP 的 linux 机器的命令行 ping memcache 服务器主机吗?

可能主机名不正确,或者该实例不再运行。

如果它正在运行并且您知道 IP,请尝试在 /etc/hosts 中为其添加一个条目,然后重新启动 Apache。

【讨论】:

    【解决方案2】:

    您的会话保存路径错误,您已将其配置为tcp://URL:,而这显然应该是真实的 URL 或 IP 地址。

    如果您不使用 memcache,那么我建议您简单地注释掉或删除 session.save_handlersession.save_path 设置,以便 PHP 使用其标准默认值进行会话存储,这样就可以正常工作了。

    【讨论】:

    • 它在我的情况下不起作用。我只是确保 URL 有效并且有效。
    【解决方案3】:

    当您收到php_network_getaddresses 时,这意味着 PHP 无法解析主机名,当您通过名称连接到外部(甚至本地)服务时,它可能会被触发。

    首先,您的服务器将查看您的 /etc/hosts 文件以将主机名转换为 IP 地址,如果失败,它将尝试在 DNS 上解析它(仅当名称为“公共”时才有效)。

    要绕过此问题,请在您的 /etc/hosts 文件中添加一个新条目,如下所示

    127.0.0.1    URL
    

    URL 在你的session.save_path 中,我假设它指向同一个服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-11
      • 2016-06-07
      • 1970-01-01
      • 2010-10-14
      • 2012-10-19
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      相关资源
      最近更新 更多