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 时,它的效果都很好。那么“索引”网址有什么问题?

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

通知告诉您 keyurl不存在$_GET- 可能 index.php 被直接调用(如http://yourdomain.com/index.php - 在这种情况下 rewrite 不执行任何文件存在)。

警告是因为文件不存在。

要修复两者,请执行以下操作:

$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 回答