【问题标题】:PHP mysql_connect cannot resolve Host name when sessions are enabled启用会话时,PHP mysql_connect 无法解析主机名
【发布时间】:2011-07-06 21:28:36
【问题描述】:

疯了吧?示例代码:

<?php
session_start();
$hostname="samplehost";
$username="sampleuser";
$password="samplepass";
$dbname="sampledb";

$link = mysql_connect($hostname, $username, $password) or die(mysql_error());
mysql_select_db($dbname, $link);
?>

将抛出Unknown MySQL server host 'samplehost' (2)。如果我们删除session_start() 或在mysql_connect() 之前执行session_destroy(),它可以正常工作。基本上,如果我们有一个会话打开,它就像 mysql_connect 不会解析主机名。我们用于服务器的主机名已正确添加到 /etc/hosts。

这是一个运行 PHP 5.3.2-1ubuntu4.7 的生产服务器 - 今天才刚刚开始。有人遇到这个吗?

edit:应该提到,无论有没有会话,我们都可以指定数据库服务器的IP,它可以正常工作。

【问题讨论】:

  • 这是您用来测试它的完整脚本(当然是负值)吗?
  • 所有 DNS/主机操作都会受到影响吗? gethostbyname() 呢?
  • 除了 /etc/hosts 中的条目之外,您是否尝试过解析其他主机?
  • @Richard - 这是我已经逐字测试过的脚本 - 用于限制所有其他来源。 @Capsule - 奇怪的是,我们已经尝试过了,并不是所有的 DNS 都受到影响,我们可以使用 gethostbyname() 确实返回正确的 IP。 @Payson - 是的,不管我们为主机添加什么,它都无法解决。
  • 看来你不是第一个遇到这个问题的人。我没有看到任何说它已修复:bugs.php.net/bug.php?id=51147

标签: php mysql session


【解决方案1】:

如果有人遇到这种情况 - 事实证明这是我们在 Apache 中拥有的虚拟主机数量的问题。当您开始达到文件描述符的限制时出现,您会出现一些奇怪的症状 - 当我们开始在 PHP 中收到“打开的文件过多”错误时,最终被诊断出来。

这是我们如何为新域自动生成虚拟主机的传统设置。更好地管理这个过程,减少虚拟主机的数量,问题就消失了。

【讨论】:

    【解决方案2】:

    为什么不先连接,然后开始会话?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多