require Auth.phpの動作について教えてください

このQ&Aのポイント
  • require Auth.phpという記述は、Auth.phpの内容を取り込むことを意味します
  • また、requireは指定したファイルを必須として取り込むため、Auth.phpが存在しない場合はエラーが発生します
  • したがって、a.phpにrequire 'Auth/Auth.php';と記述することで、Auth.phpの内容をa.phpで使用することができます
回答を見る
  • ベストアンサー

require Auth.php

require 'Auth/Auth.php'; の動作について教えてください。 サンプルソース a.php に、 「require 'Auth/Auth.php';」と冒頭に記述してありました。 PEARだと思うのですが、結局この記述は、 a.phpに、 (1)Auth.phpの内容を取り込む? (2)Auth.phpの内容を継承する? どちらの解釈の方が正しいのでしょうか? 今までrequire だと、指定したphpの内容を取り込む((1)番だと)だと認識していました。 以下ソースのように動作してると思っています。Auth.phpも同じ動作と思っていいものなのでしょうか。 ・test.php <?php echo "start!!\n"; include("include.php"); echo "end!!\n"; ?> ・include.php <?php echo "include start!!\n" ?> ●実行結果 start!! include start!! end!!

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.2

継承ではありませんので(1)です。requireで読み込んで「Auth.phpを使用できる準備をしている」だけです。 >Auth.phpも同じ動作と思っていいものなのでしょうか。 同じです。サンプルのinclude.phpが <?php function myfunc(){ echo "~"; } ?> だとすると分かりやすいかも。includeしただけでは何も起こりませんが、必要な時に myfunc(); を実行できるようになりますよね。それと同じです。 ただ、ライブラリ系はスクリプトのあちこちでrequireするのではなく、見通しをよくするため、スクリプトの上部にまとめて書かれることが多いです。 ちなみに継承とは、例えば「 Auth.phpを使用したいけど、機能が足りないので自分で追加したい」といった場合に class Auth2 extends Auth{~} のように書きますが、この時「 Auth2クラスは、Authクラスを継承している」と言います。

ShiftTail
質問者

お礼

なるほど。 function myfunc(){ echo "~"; } で実験しました。 myfunc()だけで呼び出せますね。 この関数で呼べるということは、 「同じソースにあるから、newしなくても呼び出せる」 ということですね。 かなり理解できました。ありがとうございます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

この手の汎用性のあるライブラリはincludeやrequireしても なにも挙動しません。 newなどでオブジェクトを生成して初めて実行性があるものになります。

ShiftTail
質問者

お礼

ありがとうございます。 newして、やはり初めて実行性があるもになるのですね。 助かりました。

関連するQ&A

  • PHP Auth認証ができない

    今日は。 PEARのAuthを使って認証ページを作ろうとしているのですが、下記エラーがでてきて困ってます。環境はウインドウズXPです Fatal error: Class 'Auth' not found in C:\Program Files\Apache Group\Apache2\htdocs\samples\practice\myauth.php on line 15 15行目のソースは $auth=new Auth("DB",$params,"loginFunction",TRUE);です Authが無いのかなと思い require_once("Auth/Auth.php"); でエラーがでているか調べたのですが、エラーはでてないようです。 また、Authフォルダがあるかどうかも調べたのですが、C:\php\PEARにありました Fatal error: Class 'Auth' not foundをグーグルで調べてもよくわからないので困っています。 何かアドバイスがあればよろしくお願いします。

    • ベストアンサー
    • PHP
  • PEAR::AUTHにて情報の引き継ぎ

    初心者のため、幼稚な質問で大変申し訳ないです。 PEAR::Authにて認証ページを作っています。 login.php <?php require_once "Auth/Auth.php"; $params=array( "dsn" => "DB情報", "table" => "user", "usernamecol" => "username", "passwordcol" => "password", 'cryptType'=>"md5", 'db_Fields'=>"*" ); $objAuth = new Auth("DB", $params); $objAuth->start(); if($objAuth->getAuth()) { echo $objAuth->username . "としてログインしています。<br>"; echo "<a href=\"authtest.php\">テストページ</a><br>"; } ?> といった情報で、正常にログイン認証出来ています。また、$objAuth->usernameこの情報も正常に取れています。 次のテストページ(authtest.php)に飛んだ時に、 authtest.php <?php require_once "Auth/Auth.php"; $params=array( "dsn" => "DB情報", "table" => "user", "usernamecol" => "username", "passwordcol" => "password", 'cryptType'=>"md5", 'db_Fields'=>"*" ); $objAuth = new Auth("DB", $params); $objAuth->start(); if($objAuth->getAuth()) { echo $objAuth->username . "としてログインしています。<br>"; } ?> となっており、ログイン状態は続いていますが、$objAuth->usernameこれが取得出来ていません。 「としてログインしています。」 そもそもページが遷移してしまうと、このようなパラメータは取得出来ないのでしょうか? それとも記述に間違いがあるのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 【php】PEAR Auth::setLoginCllback()の使

    【php】PEAR Auth::setLoginCllback()の使い方 http://pear.php.net/manual/ja/package.authentication.auth.auth.setlogincallback.php の説明に載っていた Auth::setLoginCllback() の使い方がイマイチよくわかりません。 あらかじめ関数を作っておいて・・・・ // ログイン成功 function LoginCallback( ){    echo "ログインに成功しました"; } ログインが完了した時に実行させたい場所に setLoginCallbackを置けばいい $authobj->setLoginCallback("LoginCallback"); と思っていたんですが、うまく動きません。 この、setLoginCallbackはどのように使うのが正しいのでしょうか?

    • ベストアンサー
    • PHP
  • PEAR auth で認証ができません

    PHP初心者で、PEAR Authによるsqliteを使用して認証のテストを行っています。 コード: <?php require_once "Auth.php"; function loginFunction() { echo "<form method=\"post\" action=\"test_auth.php\">"; echo "<input type=\"text\" name=\"username\">"; echo "<input type=\"password\" name=\"password\">"; echo "<input type=\"submit\">"; echo "</form>"; } $dsn = array( 'phptype' => 'sqlite', 'database' => 'test.sqlite', 'mode'=>'0644' ); $options = array( 'dsn' => $dsn, 'table'=>"schedule_usr", 'usernamecol'=>"username", 'passwordcol'=>"password" ); $a = new Auth("DB", $options, "loginFunction"); $a->start(); if ($a->checkAuth()) { print("認証しました。"); }else{ print("認証していません。")); } ?> エラーなどは表示されませんが、「認証しました」が表示されません。 test.sqliteではschedule_usrテーブルに username=test password=1111を 入力してあります。パスワードはmd5()で変換したものを入れてありますが、 「認証していません」が表示されてしまいます。 コード自体に問題があるのでしょうか? ご教示願います。

    • ベストアンサー
    • PHP
  • 「PEAR::Auth認証」の結果による判別について

    現在、PEAR::Authを利用して認証処理を作成しております。 質問させていただきたい内容は、 AuthクラスのgetAuthメソッドについてです。 まず、Authクラスのインスタンスを生成し、 start()メソッドを実行して認証を行い、 その認証の結果をgetAuthメソッドによって 取得しております。 次に、getAuthメソッドにより得た結果を IF文で判別して、結果がTRUEの場合は処理を続行し、 結果がFALSEの場合はログイン画面に戻るように 制御しようとしたところ、 FALSEの場合の制御が思うように動作しませんでした。 以下に、ソースを記述いたします。 login_check.php ************************************************* <?php require_once("Auth/Auth.php"); $params = array( "dsn" => "pgsql://postgres:postgres@win/db", "table" => "test_table", "usernamecol" => "test_user", "passwordcol" => "test_passwd", "cryptType" => "none", ); // インスタンス生成 $auth = new Auth("DB", $params , "LoginFuntion"); // 認証開始 $auth->start(); // 結果を判別 if (!$auth->getAuth()) { // 結果がFALSEだったらログイン画面に戻る header("Location: ./login.php"); exit; } else { // 結果がTRUEであれば処理を続行 ・ ・ ・ } ?> $auth->getAuth()の使い方が違うのかも知れませんが、 Authのソースを見ても分かりませんでした。 どなたか、「PEAR::Auth認証」の結果による判別に ついてお教え下さい。。。 ※今回は、ログイン画面とチェックPHPを分けております。 ログイン画面はHTMLで、チェックPHPにAuthを利用しております。 この利用の仕方が既に間違っているのでしょうか? 併せてお教えいただければと思います。

    • 締切済み
    • PHP
  • pear のAUTHでsetAuthDataで登録できません 教えてください

    サンプルで ログインできたときに ポイント入れようとしてるのですが setAuthdata でできるのではと思ったのですが 1:<?php 2:require_once "Auth/Auth.php"; 3:function drawLogin($username, $status, $objAuth) { 4: if (isset($_SERVER)) { 5: $server = $_SERVER; 6: } 7: else { 8: $server = $GLOBALS['HTTP_SERVER_VARS']; 9: } 10: echo '<form method="post" action="' . $server['PHP_SELF'] . '">' . "\n"; echo '<label for="username">ユーザー名:</label>'; echo '<input type="text" name="username">' . "\n"; echo '<label for="password">パスワード:</label>'; echo '<input type="password" name="password">' . "\n"; echo '<input type="submit" value="ログイン">' . "\n"; echo '</form>' . "\n"; } $params = array( 'dsn'=>"mysql://sample:password@localhost/test", 'table'=>"pear", 'usernamecol'=>"username", 'passwordcol'=>"password", 'cryptType'=>"md5", 'db_filds'=>"*" ); $objAuth = new Auth("DB", $params,"drawLogin"); $objAuth->start(); if($objAuth->getAuth()) { echo "ようこそ!" . $objAuth->username . "さん<br>"; // メールアドレスを取得。// $objAuth->setAuthData("point",10); } ?> こんな感じでいいのかと思いつくりました データーベースに書き込みされません エラーはでないのですが 教えてください お願いします

    • ベストアンサー
    • PHP
  • XAMPPでPEARのAuthが動作しない

    XAMPPでPEARのAuthが動作しません。 XAMPPのバージョンは1.7.4です。 使ったサンプルは、Pearのサイトに載っている以下のサンプルです。 (認証の選択的な使用を試してみました。) http://pear.php.net/manual/ja/package.authentication.auth.intro.php プログラムを置いた場所は C:\xampp\htdocs\hoge です。 ●考えられる原因 1.XAMPPでPEARのインストールが出来ていない 2.SQLからデータを取得するときに何らかのエラーが起きている 1.の根拠として、go-pear.batを動かした時にエラーが出てインストールできなかったので phpのコードには require_once 'C:\xampp\php\PEAR\Auth.php'; のように絶対パスで指定している。 ※ただしphpを動かした時にエラーが出ません。(notisは消してます) インストールがうまくいかない解決方法として以下 を試してみましたが結局、うまくいきませんでした。 http://ameblo.jp/phpwalker/entry-10422457243.html 2.の根拠として、SQLのテーブルにログイン用の値が見つからない たぶんこれだと思うのですが、webauthというテーブルがありました。 しかし中には1行目にnameとpassというセルと 2行目にはxamppとwamppとうセルがありました。 入力したパスワードなどがありませんでした。 SQLは初心者なのでデータをテーブル構造で保存するものという認識しかありません。 正しい検証方法も出来たら教えてください。 PEARのAuthが動作しない原因はなんでしょうか? ご教授、お願いします。

    • 締切済み
    • PHP
  • 他のサーバにあるphpをrequireしたい

    他のサーバにある変数を引っ張ってくる方法が分からず困っております。 (php.iniのallow_url_includeをonにすれば実行出来たのですが、  offのままで同じ結果になる方法をお教え頂きたく思います。) allow_url_includeをonにした場合には出来た方法↓ 【Aサーバ】にある「a.txt」(a.phpにすると実行出来ませんでした……) <?php $hogeA = 'テキストA'; ?> 【Bサーバ】にある「b.html」 <?php require_once ('http://www.A/a.txt'); echo $hogeA ; ?> b.htmlに「テキストA」を表させたいと考えています。 allow_url_includeを変更せずに出来る代替方法をお教え下さい。 a.phpだと実行出来なかった理由も分からないため、 よろしければこちらもお教え下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • (require / require_once) (include / include_once)について

    毎度、お世話になります。 今回は、requireとrequire_once(includeとinclude_once)の使い分けについて 教えて下さい。 取りあえず、改造しているPHPでは、include()だけを使って正常に動作しています。 include()させている箇所がいくつもあります。 ただ、やっぱりわからないのは、 requireとrequire_once(includeとinclude_once)に関して、 PHPマニュアルなどを見ても、処理方法の違いだけで、それならば最初から全部、 require_once() 又は、include_once() だけの方が良いように思えるのですが、 例えば、この処理に関しては、絶対、include()。これならば、require()。 また、これなら、include_once()、あるいは、require_onceと言う風に、 明確なものはあるのでしょうか? かなり迷路に迷い込んでます。(時間が止まってます) どうかよろしくお願いします。

    • 締切済み
    • PHP
  • PEAR AUTH 認証エラーClass 'PEAR_Error' not found

    Fatal error: Class 'PEAR_Error' not found in E:\Program Files\xampp\php\PEAR\DB.php on line 946 アクセスすると上記のエラーが出ます。 以前まで認証できていたのですが何をいじったのか ログインフォームがでなくなりました。 環境は以下の通りです。 ApacheFriends XAMPP (Basispaket) version 1.6.8 Apache 2.2.9 MySQL 5.0.67 (Community Server) PHP 5.2.6 + PHP 4.4.9 + PEAR あまり理解していないので質問を質問で返す可能性がありますが よろしくお願いします。 *********************************************** <?php require_once("../../php/PEAR/Auth/Auth.php"); require_once("loginform.php"); $params = array( "dsn" => "mysqli://hoge:hoge@localhost/hoge", "table" => "test", "usernamecol" => "user", "passwordcol" => "pass", "cryptType"=>"md5", 'db_fields'=>"*" ); $authobj = new Auth("DB", $params, "loginFunction"); $authobj->start(); ?> ***************************************************

    • ベストアンサー
    • PHP