人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: zero4
●カテゴリ:インターネット ウェブ制作
✍キーワード:Apache dB DSN EXIT localhost
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ●
●60ポイント ベストアンサー

エラーの内容を簡単に説明すると、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に使われていたので直しました。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ