2010-04-14 4 views
0

В настоящее время у меня есть сайт под управлением MySQL и PHP, в котором все это работает. Я попытался установить WAMPServer, чтобы иметь возможность работать на сайте на моем собственном компьютере, но у меня были проблемы с попыткой заставить сайт работать правильно.mysql_connect() приводит к тому, что страница не отображается (WAMP)

Файлы HTML и PHP работают правильно (перейдя на http://localhost/index.php и т. Д.). Но на некоторых страницах отображается «Эта веб-страница недоступна» (в Chrome) или «Internet Explorer не может отображать эту веб-страницу», что заставляет меня думать, что ошибка - это сервер, так как, когда страница не существует, обычно dispays «Ой! Эта ссылка, кажется, сломана» или стандартная страница 404 IE.

Каждая страница моего сайта имеет вызов include() для установки экземпляра класса для обработки всех транзакций базы данных. Этот класс открывает подключение к базе данных в своем конструкторе. Я обнаружил, что комментирование содержимого конструктора позволит загружать страницу, хотя это, по понятным причинам, вызывает ошибки позже на странице.

Это содержимое включаемого файла:

class dbAccess { 
    private $db; 

    function __construct() { 
     $this->db = mysql_connect("localhost","root","") or die ("Connection for database not found."); 

     mysql_select_db("dbName", $this->db) or die ("Database not selected"); 
    } 
    ... 
} 

Как примечание для того, что здесь происходит. Я пытаюсь использовать базу данных на своем сайте, а не локальную машину. Фактические значения dbName, user и password работают, когда я подключаю их к своему программному обеспечению базы данных (Navicat Lite) и правильно работаю над окончательной версией сайта, поэтому я не думаю, что проблема связана с этими значениями, а скорее некоторые настройки с Apache или Wamp.

Это отрывок из моего журнала ошибок Apache для одной попытки входа на сайт:

[Wed Apr 14 15:32:54 2010] [notice] Parent: child process exited with status 255 -- Restarting. 
[Wed Apr 14 15:32:54 2010] [notice] Apache/2.2.11 (Win32) PHP/5.3.0 configured -- resuming normal operations 
[Wed Apr 14 15:32:54 2010] [notice] Server built: Dec 10 2008 00:10:06 
[Wed Apr 14 15:32:54 2010] [notice] Parent: Created child process 1756 
[Wed Apr 14 15:32:55 2010] [notice] Child 1756: Child process is running 
[Wed Apr 14 15:32:55 2010] [notice] Child 1756: Acquired the start mutex. 
[Wed Apr 14 15:32:55 2010] [notice] Child 1756: Starting 64 worker threads. 
[Wed Apr 14 15:32:55 2010] [notice] Child 1756: Starting thread to listen on port 80. 

Я пытался искать решения в Интернете, но не смогли найти ничего, чтобы помочь. Если вам нужна дополнительная информация, чтобы помочь решить эту проблему, не стесняйтесь ее просить.

(Еще одно замечание, я даже не Skype на этом компьютере, так что я не могу видеть, что это является проблемой, так как этот конфликт, как представляется, ответ по умолчанию для любого вопроса WAMP.)

[Редактировать: Удалена запись из журнала ошибок, поскольку она была решена как проблема, связанная с ошибкой] [Изменить: просмотрев документацию моих хостов, я обнаружил, что все порты, кроме 80 и 443 (для HTTP и HTTPS), заблокированы, t позволяют внешние соединения, как то, что я пытался сделать здесь. Я изменил его на локальную базу данных, но по-прежнему получаю ту же ошибку. Проблема все еще открыта.]

+1

Вы проверили, что PHP использует плагин MySQL? Является ли порт MySQL на целевом удаленном компьютере портом по умолчанию, и если да, правильно ли он пересылается через любой брандмауэр, который может присутствовать в удаленной системе? – Dereleased

+0

Спасибо за супер быстрый ответ! Я использую Navicat Lite для доступа к базе данных. Установки для используемого мной соединения используют порт 3306 (я предполагаю, что это значение по умолчанию), и соединение работает. Я предполагаю, что это будет означать, что брандмауэр тоже должен быть хорош здесь? Для расширений PHP я вижу, что включены как php_mysql, так и php_mysqli. (Я проверил это, щелкнув левой кнопкой мыши на Wampserver> PHP> Расширения PHP и проверил, что расширение установлено. Я проверяю настройки брандмауэра, чтобы узнать, нужно ли мне делать исключение для Wamp Server или Apache. – VOIDHand

+1

это «только» среда разработки/тестирования, вы установили 'error_reporting = E_ALL | E_STRICT',' display_errors = On' и 'display_startup_errors = On' в php.ini (и проверили эти значения через' phpinfo() ')? (Опция 'display_' определенно не обязательна, пока вы следите за журналом ошибок) – VolkerK

ответ

0

Давайте обходим apache на мгновение. В каталоге <wamp> /bin/php/php5.3.0 есть php.exe, который реализует cli sapi (версия командной строки).

Поместите файл test.php в этом каталоге с

<?php 
if (!extension_loaded('mysql')) { 
    die('the mysql extension is not present'); 
} 

echo 'phpversion=', phpversion(), "\n"; flush(); 
echo 'client_info=', mysql_get_client_info(), "\n"; flush(); 

$mysql = mysql_connect('localhost', 'root', '') or die(mysql_error()); 
echo "seems to be working\n"; flush(); 

echo 'server_info=', mysql_get_server_info($mysql), "\n"; flush(); 

как содержание.Затем откройте командную оболочку, «перейти» в каталог

c: 
cd c:\wamp\bin\php\php5.3.0 

и запустить

php.exe -f test.php 

Он должен напечатать что-то вроде

phpversion=5.3.2 
client_info=mysqlnd 5.0.7-dev - 091210 - $Revision: 294543 $ 
seems to be working 
server_info=5.1.37 

(хотя версии будут отличаться в вашем случае)

+0

Первые две строки появились с выходом: 'phpversion = 5.3. 0 client_info = mysqlnd 5.0.5-dev - 081106 - $ Редакция: 1.3.2.27 $ ' – VOIDHand

+0

Через некоторое время (около 20 секунд) следующее предупреждение повторяется 5 раз в разных форматах (я смотрю, что ошибка 2002 года.): 'Warning: mysql_connect(): [2002] Ошибка подключения, потому что подключенная сторона не пыталась подключиться через tcp: // localhost: 3306 в C: \ wamp \ bin \ php \ php5.3.0 \ test.php в строке 10 – VOIDHand

+0

Похоже, что сервер MySQL не запущен. – VolkerK

2

Я тоже принял эту проблему. Решение для меня состояло в том, чтобы переместить метод mysql_connect из своего класса и просто вызвать его напрямую.

Смежные вопросы