• 締切済み

PEARのAuthを勉強中です

OS:Fedora7 webサーバ:Apache2 言語:PHP5 +MySQL5、PEARのAuthでユーザー認証の勉強をしているのですが、文法以前の質問になると思います。 データベースに アクセス用のユーザー名・パスワード、認証用のユーザー名・パスワードをそれぞれ設定しました。 下記のコードをブラウザで表示しようとしても、真っ白な画面しか表示されません。 <html> <head> <meta http-equiv="content-type" content="text/html; charset=EUC-JP"> <title>ログインページ</title> </head> <body> <?php require_once("Auth/Auth.php"); function loginFunction($username, $status){ print("<form method=\"post\" action=\"pearauthtest2.php\">"); print("<table>"); print("<tr>"); print("<td>ユーザー名</td>"); print("<td><input type=\"text\" name=\"username\"></td>"); print("</tr>"); print("<tr>"); print("<td>パスワード</td>"); print("<td><input type=\"password\" name=\"password\"></td>"); print("</tr>"); print("<tr>"); print("<td colspan=\"2\"><input type=\"submit\" value=\"クエリ送信\"></td>"); print("</tr>"); print("</table>"); print("</form>"); } $params = array( "dsn" => "mysqli://authuser:authpass@localhost/kagaku", "table" => "auth", "usernamecol" => "username", "passwordcol" => "password" ); $authobj = new Auth("DB", $params, "loginFunction"); $authobj->start(); if ($authobj->getAuth()){ print("認証済みです"); }else{ print("認証されていません"); } ?> </body> </html> 入力フォームが表示されない理由がわかりません。phpinfo()でちゃんとPHPが動いているのは確認できています。 どなたかご教授願います。

みんなの回答

回答No.6

Auth.php の中(ソース)に Auth は、ありますか? PEARを再度、インストールを行ってみてはいかがでしょうか? Auth も再度、ダウンロード後にインストールを行ってみてはいかがでしょうか? また、インストール先のパーミッションとかは大丈夫でしょうか?

brosis
質問者

お礼

報告遅れましてすみません。 PEARを再度インストールしたら、peartest.phpはちゃんとフォーム画面を表示しました! 以前はPEARを$(一般ユーザー)からインストールしていましたが、今回は#(ルート)からインストールしたら、 include_pathが、.:/usr/share/pearに変わりました。 原因はなんとなくですが見えた気がします。 長くお付き合いいただいて、ありがとうございました。

回答No.5

include_path='../home/yasuhara/PEAR'では無いです。include_path='.:/home/yasuhara/PEAR'です。 ご確認ありがとうございます。 > カレントディレクトリ(/var/​www/html​)にAuth.phpをコピーして、実行したら なので、phpのコードは require_once("Auth.php"); となりますよね http://localhost/Auth.php とブラウザに入れてみたら ページが表示できません以外のメッセージが表示されると思いますが あとは、大文字と小文字は区別されます。 Auth.php auth.php 上記は別なものになります。もちろんフォルダ名(パス名)もです

brosis
質問者

お礼

そうです。phpのコードは require_once("Auth.php"); です。そしたら、 Fatal error: Class 'Auth' not found in /var/www/html/peartest.php on line 38 と、出たんです。 私は、一般ユーザー(yasuhara)から $ links -source http://go-pear.org | php を使ってPearをインストールしたんですが、その時 Current include_path .:/usr/share/pear:/usr/share/php Configured directory :/home/yasuhara/PEAR というメッセージが出たんです。 /usr/share/phpには何も入っていませんし、/usr/share/pearというディレクトリはありません。 /usr/share/phpにインストールされるのが普通だそうで、今そのことが気になっています。 大文字・小文字の件は大丈夫です。

回答No.4

include_path='.:/home/yasuhara/PEAR' この設定ですが、 include_path='../home/yasuhara/PEAR' では無いですよね?設定部は判らないもので・・・ あと、Auth.phpはどこにいますか? ブラウザで直接アドレスを確認してみてください。 http://localhost/Auth.php これで表示が出来れば、 require_once("/Auth.php"); http://localhost/hoge/Auth.php これで表示が出来れば、 require_once("/hoge/Auth.php"); ですよね?

brosis
質問者

お礼

度々ありがとうございます。 include_path='../home/yasuhara/PEAR'では無いです。include_path='.:/home/yasuhara/PEAR'です。 http://localhost/Auth.phpでもhttp://localhost/hoge/Auth.phpでも ページを表示できません。です。 include_pathについては、一旦おいといて、カレントディレクトリ(/var/www/html)にAuth.phpをコピーして、実行したら、 Fatal error: Class 'Auth' not found in /var/www/html/peartest.php on line 38 と、出ました。line 38とは、 $authobj = new Auth("DB", $params, "loginFunction"); のことです。 やはり、include_pathの問題を避けて通れないのでしょうか?

回答No.3

先ほどの、 $vRet=loginFunction($username, $status); は削除してください。 エラーメッセージは、インクルードファイルがないようですね? require_once("Auth/Auth.php"); 実行しているPHPがある場所に Authフォルダが無いのではないでしょうか? Auth.php ファイルが同じ階層にあるので有れば、 require_once("Auth.php"); となりますよね? あとは、 Authパッケージがインストールが行われていない場合は下記のいずれかの方法にてインストールを先に行っておいて下さい。 pear install Auth pear install -a Auth pear install -o Auth とありますので上記の設定をサーバーへ行う必要がありますね。 既にインストール済みでしょうか?

参考URL:
http://www.phpbook.jp/pear/pear_auth/index.html
brosis
質問者

お礼

はい。pear install -a Authは済んでいます。 # ls -a /home/user1/PEAR で調べると Authフォルダがあるのです。 NickAomoriさんの仰るとおり、require_once("Auth.php"); もやりましたが、同じエラーが出ました。 ちなみにinclude_path='.:/home/yasuhara/PEAR'ですから、/var/www/html/ にAuth.phpをコピーしなくても良いんですよね?

回答No.2

function でくくられたPHPのコードは関数となります なので実行するには、 require_once("Auth/Auth.php"); の下のあたりで $vRet=loginFunction($username, $status); 上記の行を追加してみてあげてください。

brosis
質問者

お礼

/etc/php.iniで error_reporting = E_ALL としたら、エラー表示がでるようになりました! Fatal error: require_once() [function.require]: Failed opening required 'Auth/Auth.php' (include_path='.:/home/user1/PEAR') in /var/www/html/peartest.php on line 10 PEARの何かをどこかのディレクトリへ移動しなければいけませんか?

brosis
質問者

補足

その通りやらせてもらっても、真っ白なままでした。 私が勉強した限りでは、new Authで認証オブジェクトを作成する際、3番目の引数に"loginFunction"関数を指定してやればログインフォームを表示するとのことなのですが。 参考サイトはhttp://www.phpbook.jp/pear/pear_auth/index4.htmlです。

回答No.1

function loginFunction($username, $status){ となっている部分を、呼び出しているコードがありませんので 真っ白い画面のままではないでしょうか?

brosis
質問者

お礼

早速の回答、ありがとうございます。

brosis
質問者

補足

?呼び出しているコード? とは、たとえばどんなコードでしょうか。よくある例を教えていただけないでしょうか?

関連するQ&A

専門家に質問してみよう