2011-03-01 137 views
4

瘋狂的權利?示例代碼:當啓用會話時,mysql_connect無法解析主機名

<?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的生產服務器 - 今天剛剛開始發生。任何人遇到這個?

編輯:應該提及,有或沒有會話,我們可以指定數據庫服務器的IP,並且它可以正常工作。

+0

這是你正在測試這個完整的腳本(當然不包括值)嗎? – 2011-03-01 23:02:16

+2

是否影響所有DNS /主機操作?什麼gethostbyname()? – Capsule 2011-03-01 23:03:44

+0

您是否嘗試解析除您在/ etc/hosts中輸入的其他主機? – 2011-03-01 23:08:42

回答

2

如果有人遇到這個問題 - 事實證明,這是我們在Apache中擁有的虛擬主機數量的一個問題。當你開始達到文件描述符的限制時出現,你會得到一些奇怪的症狀 - 當我們開始在PHP中出現「太多打開文件」錯誤時,它最終被診斷出來。

這是我們如何爲新域自動生成虛擬主機的遺留設置。更好地管理這個過程,減少虛幻的數量,並且問題消失。

0

爲什麼不先連接,然後開始會話?