PHP5: вызов внешних функций и регистрация ошибок - PullRequest
2 голосов
/ 10 ноября 2008

Я мучительно плохо знаком с PHP и пытался настроить phpBB на моем локальном сайте. У меня есть стоковая версия Debian apache2 и php5. Программа установки phpBB работала нормально, подключилась к базе данных и без проблем создала все ее таблицы. Но когда я попытался открыть страницу входа, я получил 0-байтовый ответ.

Небольшое копание показало, что он никогда не справлялся с вызовом mysql_pconnect (). Двоичный файл php просто выходит без ошибки или сообщения. Вообще ничего Я попытался запустить следующий код:

<?php
$id = @mysql_pconnect('localhost','myusername', 'mypassword', true);
print "id=".$id."\n";
?>

и строка "id =" никогда не печатается. Это просто ничего не делает. Я не знаю, где искать, чтобы увидеть, какая ошибка произошла или что вообще происходит. Все, что я установил, это "mysql", использующий грушу ... возможно, я что-то упускаю?

Это должно быть проблемой пути где-то. Расширение mysql построено красиво на

/usr/lib/php5/20060613+lfs/mysql.so

Ответ:

jishi: сообщил мне, что оператор "@" подавляет вывод, включая сообщения об ошибках (@echo off, кто-нибудь?)

tomhaigh: расширения должны быть явно включены в файле php.ini. После добавления строки "extension = mysql.so" в php.ini следующий код работает нормально:

% cat d.php 
<?php
ini_set('display_errors', true);
error_reporting(E_ALL | E_NOTICE);
$id = mysql_pconnect('localhost','myusername', 'mypassword', true);
print "id=".$id."\n";
?>
% php -c /etc/php5/apache2/php.ini  d.php
id=Resource id #4

РАДОСТЬ!

Ответы [ 5 ]

6 голосов
/ 10 ноября 2008

Только что заметил, что вы используете @ перед mysql_pconnect (). Это подавляет все ошибки, что в данном случае является довольно плохой идеей. Удалите это, и вы, вероятно, увидите результат.

В противном случае:

Проверьте ваш php.ini, он должен быть в /etc/php5/apache2/php.ini для Debian.

Проверьте строку с именем display_errors, установите для нее значение true, если вы хотите выводить ошибки в браузере (не рекомендуется для производственной системы, но полезно при отладке и разработке).

Укажите log_errors для apache, чтобы записывать ваши ошибки в файл журнала ошибок apache, который по умолчанию в debian будет (если для phpBB-сайта не указан другой файл ошибок):

/ вар / Журнал / apache2 / error.log

1 голос
/ 10 ноября 2008

попробуйте сделать это:

<?php
ini_set('display_errors', true);
error_reporting(E_ALL | E_NOTICE);
$id = mysql_pconnect('localhost','myusername', 'mypassword', true);
print "id=".$id."\n";
?>

и посмотрите, что ответит

редактировать

Из вашего комментария похоже, что модуль mysql не установлен или не включен. Вы можете заглянуть в файл php.ini и посмотреть, есть ли такая строка, как

extension=mysql.so

Если он комментируется точкой с запятой, попробуйте удалить его и перезапустить apache

1 голос
/ 10 ноября 2008

Удалите «@», приглушающее сообщения об ошибках, которые выдает mysql_pconnect.

Документация

0 голосов
/ 10 ноября 2008

Я думаю, у вас не установлены расширения mysql для вашего PHP. Начиная с PHP5, я думаю, что это расширение PECL. Если вы работаете с Windows, в вашей директории php должен быть файл pecl.bat или что-то подобное. Просто зайдите туда через консоль и введите

pecl download mysql

Тогда все должно работать как положено.

0 голосов
/ 10 ноября 2008

У меня иногда PHP проходит «черную дыру», когда находит функцию, которую не может найти.

Можете ли вы проверить, правильно ли установлено расширение mysql?

Вы можете сделать это, создав php-страницу следующим образом:

<?php
phpinfo();
?>

Сохранение в вашем webroot, а затем доступ к нему. Он должен содержать всю информацию о том, что ваш сервер в настоящее время работает в терминах модулей PHP.

...