我是新来的PHP,所以我道歉,如果这是一个简单的问题...
我从一台服务器移动PHP站点到另一个。 新的服务器是IIS 7.0,PHP 5.2.1,短打开标签“开”,我不知道原来的服务器是如何建立(我只是给出的代码)。
以下是代码在页面上的一个非常第一部分:
<?
ob_start();
session_start();
if($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16)
{
include("test/query/test_query.php");
}
?>
当这个页面执行时,总是显示以下错误:
PHP注意:未定义指数:在第6行确认[文件位置] .PHP
此外,用户可以通过从主页(这是一个标准的HTML页面)重定向访问该页面。 当正确导航完整网址如下:
HTTP:// WWW [现场] .COM / test.php的#登录
......我明白为什么引发错误。 我不明白的是如何代码都不能工作,因为它原来的服务器上。 难道我会丢失配置设置?
*这个同样的问题发生在几十个地点遍布站点。 这只是问题的一个具体的发生。
新服务器error_reporting
设置为E_ALL。 你看到的只是一个通知,不是一个错误。 尝试:
error_reporting(E_ALL ^ E_NOTICE)
与错误报告集到E_ALL,访问其中没有设置产生一个错误的阵列的构件。 如果你不希望降低你的错误报告级别,检查$ _GET前[“变种”],改变你的代码:
if(isset($_GET['confirm']) && ($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16)) {
通过将调用isset()函数之前,你实际访问$_GET['confirm']
你将验证你不访问,没有设置一个数组成员。 ( $_GET['confirm']
将仅在URL中结束设置?confirm=...
或?something...&confirm=...
)
我建议优化代码阅读:
if (isset($_GET['confirm']) && ($_GET['confirm'] >= 13 && $_GET['confirm'] <= 16))
我完全与Josh的提议达成一致。
由于没有索引$ _GET [“确认”],PHP抛出你正在寻找一个未定义的索引的通知。 正在显示该通知,因为新服务器具有E_NOTICE
在使用error_reporting地方设置标志,无论是在php.ini中或者在上pageloads运行一些配置文件或引导。
从PHP手册, E_NOTICE
:“运行时间通知表示脚本遇到的东西,可以指出错误,但也可能发生在运行脚本的正常过程。”
您可以尝试关闭的通知,如果你不担心他们,或用它们来追查地方可能会出现问题。
对于您发布的代码,一个简单的办法是改变的条件来
if(isset($_GET['confirm']) && <list of OR conditions>)
这样,PHP捞出评估条件,如果没有“确认”指数。
isset()
是一个有用的功能。 它返回“真”如果变量存在,“假”,如果没有。 通常情况下,人们用它与结合超全局喜欢$_GET
或$_POST
,以确定是否你是从该网站的其他页面发送-这允许你创建基于您的用户是来自不同的动作和哪些数据是沿标记。 它还可以防止在试图使用你还没有定义的变量,如OP越来越错误。 因此,而不是需要写两个不同的PHP文件,并担心发送您的用户错误的,你可以做到这一切在一个页面。
周杰伦,我会小心你的一些电话的使用。 <?php
是更有可能比工作<?
。 我听说在session_start()应设置为浏览器的第一件事或可引起头的问题。 是的,你需要你使用它之前已经声明的变量-如果你不是在键入[file].php?confirm=[some number]
为您的网址,网页会打破,除非你修改它允许休息。
这是因为confirm
查询字符串变量似乎并没有设置,您可以检查它喜欢:
ini_set('display_errors', true);
error_reporting(E_ALL);
var_dump($_GET['confirm']);