2

私は痛々しいほど PHP に不慣れで、ローカル サイトに phpBB をセットアップしようとしていました。apache2 と php5 のストック debian インストールがあります。phpBB インストーラーは問題なく実行され、データベースに接続され、すべてのテーブルが問題なく作成されました。しかし、ログイン ページを開こうとすると、0 バイトの応答が返されました。

少し掘り下げてみると、mysql_pconnect() の呼び出しを通過したことがないことがわかりました。php バイナリは、エラーやメッセージなしで終了します。何もありません。次のコードを実行してみました。

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

「id=」文字列は印刷されません。それは何もしません。どのエラーが発生したか、または何が起こっているのかを確認するためにどこを見ればよいかわかりません。私がインストールしたのは、pearを使用した「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

喜び!

4

5 に答える 5

6

mysql_pconnect()の前に@を使用していることに注意してください。これにより、すべてのエラーが抑制されます。この場合、これはかなり悪い考えです。それを削除すると、おそらく出力が表示されます。

さもないと:

php.iniを確認してください。debianの場合は/etc/php5/apache2/php.iniにあります。

display_errorsという行を確認し、ブラウザーでエラー出力が必要な場合はtrueに設定します(実動システムには推奨されませんが、デバッグおよび開発中に役立ちます)。

apacheにlog_errorsonを指定して、エラーをapachesエラーログファイルに記録します。デフォルトでは、debianでは次のようになります(phpBBサイトに他のエラーファイルが指定されていない場合)。

/var/log/apache2/error.log

于 2008-11-10T16:48:24.710 に答える
1

mysql_pconnectがスローしているエラーメッセージをミュートしている「@」を削除します。

ドキュメンテーション

于 2008-11-10T16:50:15.113 に答える
1

これを試してください:

<?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を再起動してみてください

于 2008-11-10T17:27:25.083 に答える
0

見つからない関数を見つけたときに、PHP が「ブラック ホール」に陥ることがあります。

mysql 拡張機能が正しくインストールされていることを確認できますか?

これを行うには、次のような php ページを作成します。

<?php
phpinfo();
?>

ウェブルートに保存してからアクセスします。PHPモジュールに関して、サーバーが現在実行しているものに関するすべての情報が含まれている必要があります。

于 2008-11-10T16:38:47.507 に答える
0

PHPにmysql拡張機能がインストールされていないと思います。PHP5以降はPECL拡張だと思います。Windows で作業している場合は、php ディレクトリに pecl.bat などがあるはずです。コンソールからそこに移動して入力するだけです

pecl download mysql

その後、すべてが期待どおりに機能するはずです。

于 2008-11-10T16:57:50.760 に答える