PHPの質問です バグが潰せなくて時間だけが過ぎていきます。


以下の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とパスワードを入力するだけです。(ご回答のコメントの時にでも書きます)

すみませんが、よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2006/08/06 01:14:00
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:bonlife No.1

回答回数421ベストアンサー獲得回数75

ポイント60pt

エラーの内容を簡単に説明すると、login()という関数はTestAuth.phpの4行目で宣言されているので6行目で再度宣言することは出来ませんよ、といったものです。

require_once()で取り込んでいるファイル(Auth/Auth.php、あるいはloginForm.php)内でlogin()という関数を定義していませんか。

以下、マニュアルからの抜粋です。

PHP では、関数やクラスはすべてグローバルスコープにあります - 関数の内部で定義したものであっても関数の外部からコールできますし、 その逆も可能です。

require_once()したファイル内で同名の関数を定義していたため、エラーになっているのではないでしょうか。

[参考URL]


また、もう1点気になったことがあります。

セッションの開始位置は適切でしょうか。

注意: クッキーに基づくセッションを使用している場合、ブラウザに何か出力 を行う前にsession_start()をコールする必要があ ります。

[参考URL]

一度確認してみてください。

参考になれば幸いです。

id:zero4

おぉ! ありがとうございます。家に帰ってから早速確認します。追記します。

session_start()のことは、あまり理解できないで使っていました。参考URLを見ます。

ありがとうございます。

[追記]

解決しました! ひどいアホな理由でした。

TestAuth.phpはコントローラ?として、

あるディレクトリ以下のファイルにアクセスする時は、

必ず呼ばれるようにしているのですが(.htaccessを使用して)

私はそのファイルを直接URL指定しておりました。

誤)http://test.com/TestAuth.php

正)http://test.com/index.html

正)のURL指定をすれば、エラーは出ません。バカでした。

ちなみに、require_once()と同一関数が、Auth.phpに使われていたので直しました。

セッションの件も、マニュアルたいへん参考になりました(まだ私には難しいですが、少しずつ理解します)。ありがとうございます。

2006/07/30 22:48:51

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません