2014-02-26 129 views
0

我在MySQL 5.5.36上運行Windows Server 2008 R2上的PHP 5.5.7 64位nts上的Moodle。PHP(5.5.7)警告連接到Windows Server 2008 R2中的MySQLi

直到兩天前,沒有問題。爲了處理Xdebugger這樣一個內存管理器,一個額外的CPU和更多的內存被分配給虛擬機。 Windows許可證也被激活。整個虛擬機已重新啓動。 (在此之前,我已經重新啓動了機器,沒有問題)。

我現在收到以下警告,當我訪問該網站的任何頁面:

PHP Warning: mysqli::mysqli(): (HY000/2002): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 
    in C:\inetpub\wwwroot\moodle\lib\dml\mysqli_native_moodle_database.php on line 375 

我創建了一個測試PHP頁面,簡單地包括以下:

$mysqli = new mysqli("127.0.0.1", "moodleuser", 'xxxx', "moodle", 3306); 
    if ($result = $mysqli->query("SELECT * from mdl_user limit 10")) { 
     echo "Select returned $result->num_rows"; 
    } else { 
     echo "Error"; 
    } 
    $mysqli->close(); 

我收到以下輸出:

PHP Warning: mysqli::mysqli(): (HY000/2002): A connection attempt failed because   the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.in C:\inetpub\wwwroot\moodle\info.php on line 17 
    PHP Warning: mysqli::query(): Couldn't fetch mysqli in C:\inetpub\wwwroot\moodle\info.php on line 18 
    PHP Warning: mysqli::close(): Couldn't fetch mysqli in C:\inetpub\wwwroot\moodle\info.php on line 24 

我檢查了「127.0.0.1 localhost」存在於我的主機上s文件,並且IPv6「:: 1」行已被註釋掉。 我也試圖使用「本地主機」,但同樣的問題。

奇怪的是,如果我刷新頁面,偶爾和完全隨機,警告不會發生,並給出正確的輸出。

我試圖禁用警告,但php似乎無視我。另外,禁用警告並不完全理想。

任何想法?

編輯:

這麼多的痛苦跑馬圈地回來的Forth PHP和MySQL和IIS之間後,它看起來像(再次)這是php.ini的罪魁禍首。老實說,我甚至不能告訴你哪個設置是問題 - 但我把php.ini中的所有可能的超時相關設置更改爲大數(10000或-1取決於設置),以及mysql中的connection_timeout在my.ini中。

我還沒弄清楚哪一個導致了這個問題,但是如果我曾經這樣做過,我會編輯這篇文章。

回答

0

因此,在PHP和MySQL和IIS之間來回拖動之後,看起來(再一次)它是php.ini的責任。老實說,我甚至不能告訴你哪個設置是問題 - 但我把php.ini中的所有可能的超時相關設置更改爲大數(10000或-1取決於設置),以及mysql中的connection_timeout在my.ini中。

我還沒弄清楚哪一個導致了這個問題,但是如果我曾經這樣做過,我會編輯這篇文章。