1

重複の可能性:
PHP: 「通知: 未定義の変数」および「通知: 未定義のインデックス」</a>

私は youtube mvc チュートリアルhttp://www.youtube.com/watch?v=Aw28-krO7ZMを行っており、最良の最初のステップで停止しました:

私の index.php ファイル:

<?php
$url = $_GET['url'];
require 'controllers/' . $url . '.php';

私の .htaccess ファイル:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

では、質問は次のとおりです。「index」以外の URL にアクセスすると、問題なく動作します。では、'index' url の何が問題になっているのでしょうか?

Notice: Undefined index: url in /var/www/sadman/index.php on line 2
Warning: require(controllers/.php) [<a href='function.require'>function.require</a>]:
 failed to open stream: No such file or directory in /var/www/sadman/index.php on line 4

ところで、私は LAMP を持っています。私の設定は正しいと思います。

4

1 に答える 1

1

urlキーがに存在しないことを通知します$_GET-おそらくindex.phpが直接呼び出されました(http://yourdomain.com/index.phpのように-この場合、ファイルが存在するため、書き換えは何もしません)。

警告はファイルが存在しないためです。

両方を修正するには、次のようにします。

$url = 'default'; // set default value (you need to have also existing file controllers/default.php)
// check if `url` exists in $_GET
// check if it is string
// check if it match proper pattern (here it has to be built from letters a-z, A-Z and/or _ characters - you can change it to match your requirements)
// check if file exists 
if (isset($_GET['url']) && is_string($_GET['url']) && preg_match('/^[a-z_]+$/i',$_GET['url']) && file_exists('controllers/'.$_GET['url'].'.php')) {
   $url = $_GET['url']; // name in $_GET['url'] is ok, so you can set it
}
require('controllers/'.$url.'.php');
于 2012-12-15T23:20:14.507 に答える