以下のTestAuth.phpを開いて、正しいユーザIDとパスワードでログインすると、
下のエラーが表示されます。このエラーの原因と解決策を探しております。
表示結果
--------------
ログインしました。
Fatal error: Cannot redeclare login() (previously declared in /opt/apache/htdocs/test/TestAuth.php:4) in
/opt/apache/htdocs/test/TestAuth.php on line 6
TestAuth.php
--------------
<?php
require_once("Auth/Auth.php");
function Login($usr,$status){
require_once("loginForm.php");
}
session_start();
$params=array(
"dsn" => "mysqli://test:test@localhost/test",
"table" => "usr",
"usernamecol" => "uid",
"passwordcol" => "passwd",
"db_fields"=>"*");
$auth=new Auth("DB",$params,"Login",TRUE);
$auth->start();
if($auth->getAuth()===TRUE){
print "ログインしました。";
}else{
exit(1);
}
?>
--------------
loginForm.phpは文字数制限の書けませんでしたが、
ログインIDとパスワードを入力するだけです。(ご回答のコメントの時にでも書きます)
すみませんが、よろしくお願いします。
エラーの内容を簡単に説明すると、login()という関数はTestAuth.phpの4行目で宣言されているので6行目で再度宣言することは出来ませんよ、といったものです。
require_once()で取り込んでいるファイル(Auth/Auth.php、あるいはloginForm.php)内でlogin()という関数を定義していませんか。
以下、マニュアルからの抜粋です。
PHP では、関数やクラスはすべてグローバルスコープにあります - 関数の内部で定義したものであっても関数の外部からコールできますし、 その逆も可能です。
require_once()したファイル内で同名の関数を定義していたため、エラーになっているのではないでしょうか。
[参考URL]
また、もう1点気になったことがあります。
セッションの開始位置は適切でしょうか。
注意: クッキーに基づくセッションを使用している場合、ブラウザに何か出力 を行う前にsession_start()をコールする必要があ ります。
[参考URL]
一度確認してみてください。
参考になれば幸いです。
おぉ! ありがとうございます。家に帰ってから早速確認します。追記します。
session_start()のことは、あまり理解できないで使っていました。参考URLを見ます。
ありがとうございます。
[追記]
解決しました! ひどいアホな理由でした。
TestAuth.phpはコントローラ?として、
あるディレクトリ以下のファイルにアクセスする時は、
必ず呼ばれるようにしているのですが(.htaccessを使用して)
私はそのファイルを直接URL指定しておりました。
誤)http://test.com/TestAuth.php
正)http://test.com/index.html
正)のURL指定をすれば、エラーは出ません。バカでした。
ちなみに、require_once()と同一関数が、Auth.phpに使われていたので直しました。
セッションの件も、マニュアルたいへん参考になりました(まだ私には難しいですが、少しずつ理解します)。ありがとうございます。