php提示Notice: Use of undefined constant错误

 更新时间:2016年11月25日 17:37  点击:2283
下面整理了在使用php时出现的Use of undefined constant错误的解决办法,因这关于提示Use of undefined constant错误是配置问题并不是程序错误,下面给大家整理一下解决办法。

进入网站会出现大量类似的提示,但是可以正常显示和运行

像下面这样的一行简单的代码就会产生上述错误:

$str = coderbolg;

虽然有时这样是可以运行的,但在有些情况下就会出现问题。在看到这个错误提示时,可以查找引号中的单词,找到它就可以发现问题,这通常是在应该使用字符串的地方忘记了引号,或是在应该使用变量的时候漏掉了$符号。

php默认的时区不对,尝试在页面的最前页加上

 代码如下 复制代码


date_default_timezone_set(PRC);   /*把时间调到北京时间,php5默认为格林威治标准时间*/

之后发现提示Notice:  Use of undefined constant PRC – assumed 'PRC',原来PHP5.1.0以后date_default_timezone_set被重写,PRC无效了.改成

 代码如下 复制代码

date_default_timezone_set("Asia/Shanghai");

就正常了。

 代码如下 复制代码

<?php
date_default_timezone_set("Asia/Shanghai");   /*把时间调到上海时间,php5默认为格林威治标准时间*/
//date_default_timezone_set("Asia/Beijing");   // 有趣的是,北京时间竟然不支持
echo date('h:i:s A');
?>

这些是 PHP 的提示而非报错,PHP 本身不需要事先声明变量即可直接使用,但是对未声明变量会有提示。一般作为正式的网站会把提示关掉的,甚至连错误信息也被关掉

关闭 PHP 提示的方法

搜索php.ini:

 代码如下 复制代码

  error_reporting = E_ALL

改为:

  error_reporting = E_ALL & ~E_NOTICE

还有个不是办法的办法就是

在每个文件头上加

 代码如下 复制代码
error_reporting(0);

虽然不好弄但是可以解决问题,对于关闭php错误提示我们如果能发现错误还是对错误进行解决,因为我前写过一篇php 代码如果有大量错误我们进行了关闭,会影响到程序性能哦。

以前写的一个php脚本,在换成php5.5.8的版本的时候出现了 PHP Notice: undefined index xxx 的警告信息,感觉不舒服解决方法


方法1:服务器配置修改 修改php.ini配置文件,error_reporting = E_ALL & ~E_NOTICE

方法2:页面头部新增 error_reporting(E_ERROR | E_WARNING | E_PARSE); 或者 error_reporting(E_ALL & E_NOTICE); 或者 error_reporting(0);

检测参数方法:(在PHP5.5.8依然无效 Undefined variable: param)

定义一个函数:

function _get($str){
    $val = !empty($_GET[$str]) ? $_GET[$str] : null;
    return $val;
}

延伸问题:
1.修改在php.ini的参数后重启 php-fpm 网上的那种 php5.4下的 kill 等都无效(在5.5下无php-fpm.pid,kill对应进程也是无效的,我的默认起了3个php-fpm进程)
 
 
php-fpm 关闭:

kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

查看php-fpm进程数:
ps aux | grep php-fpm

2.解决方法 netstat -lntp 可以看到php-fpm 监听的9000端口的进程 kill掉此进程即可

3.在重新启动php-fpm即可 /usr/local/webservers/php/sbin/php-fpm -D

fopen一般情况是可以使用的,但是今天在测试一个打开远程文件时出了一些问题,最后还是解决了,而感谢而发写了这篇文章了,也就是总结了一下我找到的解决办法吧,希望对同样和我碰到fopen函数使用问题的朋友带来帮助,让大家也少走弯路了。

问题描述

allow_url_fopen = on


Whether to allow the treatment of URLs
(like http:// or ftp://) as files.
allow_url_include = on


Whether to allow include/require to open URLs
(like http:// or ftp://) as files.

在本地wamp测试环境中,这样设置以后,fopen可以正常打开远程地址,但遇到本地的地址却会报错,例如

 

 代码如下 复制代码
fopen("http://localhost/myfile.php", "r");

就会在超过php.ini中设置的脚本最长执行时间后报错,告知文件不存在等。这在在线服务器上是不会出现的,但如果将localhost替换成127.0.0.1,却可以正常工作。

从状况看,问题出在DNS解析上,按理说localhost已经自动被映射到127.0.0.1,实际上访问http://localhost和访问http://127.0.0.1也到达同一个地址。

解决的方法就是检查一下Windows的host文件,通常位于system32目录下,一个系统盘是C盘的host路径如下所示

C:/Windows/System32/drivers/etc/hosts

打开hosts文件,用记事本或者notepad++等工具

将下面的127.0.0.1前面的#去掉即可。

 代码如下 复制代码
# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost

将url视为文件有什么用

比如给include的文件传值,可以这样

 代码如下 复制代码

<?php include 'http://yourdomain.com/
example.inc.php?foo=1&bar=2'; ?>
在example.inc.php中


<?php
    var_dump($_GET['foo']);
    var_dump($_GET['bar']);
?>

运行结果

string(1) "1" string(1) "2"

补充一下

fopen不能创建中文文件名文件的问题

之前网页的chartset用的是utf-8,文件也用utf-8,然后用fopen()创建一个中文文件名的文件时问题就出来了,文件名都是乱 码!

查看了很多文档试了不少方法都解决不了,本来想着用别的方法绕过这个问题,忽然脑子里闪过Windows默认的文字编码是ansi,然后再 baidu了一下,证实了这点,所以我的网页也应该是ansi编码才能使创建的文件名不会是乱码。

接着就着手验证,把网页都用ansi保存,去掉chartset语句,果然ok了,但是网页的内容就成乱码了,后来想起,这个网页还include 了别的网页,把include的网页也改成ansi保存,哈哈万事ok

编程这个工作真的很靠积累,如果我以前没看过Windows默认编码是ansi,那这个问题就不知何年何月才能解决了

ps:< meta content ="text/html; charset=utf-8" http -equiv ="Content-type" > 这个meta标记一定要放在<title></title>之前才有效的

后来又想到了一个更好的解决方法,网页还是用utf-8编码和保存,只是fopen()里的文件名参 数单独给它编下码就行,php有iconv() 这个改换编码的程序,把utf-8转成 gb2312就可以避免中文文件名为乱码了

test.htm

 代码如下 复制代码

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>标题:{title}</title>
</head>
<body>
<b>此新闻的内容:</b>{content}
</body>
</html>

 test.php

 

 代码如下 复制代码

<?php

    //实际应用中很可能是查询数据库取内容。
    $rows = array(array("替换标题1","替换内容1"),array("替换标题2","替换内容2"));
    $filename = "tmp.htm";
    foreach($rows as $id => $val){
        $title = $val[0];
        $content = $val[1];
        $pagename = "测试".$id.".html";
        //对文件名的编码,避免中文文件名乱码
        $pagename = iconv("UTF-8", "GBK", $pagename);
       
        //读取模板
        $tmpfile = fopen($filename,"r");
        $string = fread($tmpfile,filesize($filename));
        $string = str_replace("{title}",$title,$string);
        $string = str_replace("{content}",$content,$string);
        fclose($tmpfile);
        //写新文件
        $newpage = fopen($pagename,"w");
        fwrite($newpage,$string);
        fclose($newpage);
       
    }
    echo "创建成功!";
?>

下面来给各位同学介绍关于phpmyadmin无法登录提示please check errors given in your PHP and/or webserver,希望例子对各位有帮助。


今天帮别人弄网站的时候要修改数据库字段

然后发现苦逼的事情

phpmyadmin无法登陆

访问 PHPMyAdmin 提示

phpMyAdmin - Error

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.

好吧 无语了

赶紧查资料

说这个问题是因为session存放目录的权限问题。session目录你要找到PHP目录下的php.ini文件,看你设定的  session 存放目录为哪个路径,找到其所在的文件夹,给予Internet来宾账户session目录的控制权限。

我是按照以下操作解决的:

在php.ini找到session.save_path 这一行, session.save_path = "D:/php/tmp"  那么你就对tmp文件夹进行权限设定。 Internet来宾账户就是IUSR开头的账户,我给了其最高为写入权限,刷新可以看到登陆界面了。激动哈,所以记录下方法,以免遗忘。

另外一个是将php.ini中的session.auto_start的值改为1(启动),默认是0(禁用).

然后重启下

对于cookie path很多的朋友不以为燃了这样会发现就是因为一个小点或一个路径问题测试了一天发现读取不了cookie值了,今天我就来给大家介绍cookie中路径的一些例子与注意细节。

先看phpcms中的一个函数

 代码如下 复制代码

phpcms/libs/classes/param.class.php
/**
     * Set Cookie
     * @param string $var
     * @param string $value
     * @param int $time
     * @param string $path
*/

    public static function set_cookie($var, $value = '', $time = 0, $path = '') {
        $time = $time > 0 ? $time : ($value == '' ? SYS_TIME - 3600 : 0);
        $s = $_SERVER['SERVER_PORT'] == '443' ? 1 : 0;
        $var = pc_base::load_config('system','cookie_pre').$var;
        $path = $path == '' ? pc_base::load_config('system','cookie_path') : $path;
        $_COOKIE[$var] = $value;
        if (is_array($value)) {
            foreach($value as $k=>$v) {
                setcookie($var.'['.$k.']', sys_auth($v, 'ENCODE'), $time, $path, pc_base::load_config('system','cookie_domain'), $s);
            }
        } else {
            setcookie($var, sys_auth($value, 'ENCODE'), $time, $path, pc_base::load_config('system','cookie_domain'), $s);
        }
    }
param::set_cookie('auth', '',time()-1,'/');

这个函数与cookie没什么区别我们先不介绍它,可能很多朋友懂,下面我们再看

setcookie函数的第四个参数为cookie路径,关于路径的设置,本文做了一些尝试,下面是两个测试页(直接用url表示路径和文件目录了):

  http://localhost/test/cookie/father.php

  http://localhost/test/cookie/child/child.php

 

 代码如下 复制代码

<?php
//location:  locahost/test/cookie/father.php

//setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
setcookie("father_set_1_/","@@@@",time()+24*3600,"/");
setcookie("father_set_2_/child","@@@@",time()+24*3600,"/child/");
setcookie("father_set_3_test/cookie/child","@@@@",time()+24*3600,"/test/cookie/child/");

print_r($_COOKIE);
?>

 

 代码如下 复制代码

<?php
//location:   localhost/test/cookie/child/child.php

//setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1);
setcookie("child_set_0","@@@@",time()+24*3600);
setcookie("child_set_1_/","@@@@",time()+24*3600,"/");
setcookie("child_set_2_/child","@@@@",time()+24*3600,"/child");
setcookie("child_set_3_/test/cookie/child/","@@@@",time()+24*3600,"/test/cookie/child/");

print_r($_COOKIE);
?>

分别按如下顺序访问页面father.php—>child.php—>father.php—>child.php,使用firebug查看,分别有如下结果:


php 设置cookie路径例子总结

 第一访问father.php

  图中可以看出,本次请求服务端做出响应,打印了$_COOKIE数组,但数组为空。设置了三个cookie值,分别是:"father_set_1_/"、"father_set_2_/child"、"father_set_3_test/cookie/child",它们对应的路径为"/"、"/child"、"/test/cookie/child",其中"/"指的是站点根目录。
  第一次请求father.php时,初始状态下客户端没有相关的cookie记录,在上图中只有已收到的cookie,没有已发送的cookie,则打印$_COOKIE数组时是没有输出。
  从上面这点可以看出,页面的每次请求cookie的变化是:页面请求时浏览器发送客户端已有的cookie,服务器端接收cookie将其存入数组$_COOKIE数组中供程序使用;而在服务器端响应本次请求设置的cookie尚未发送到客户端时$_COOKIE数组中是没有记录的。
 
php 设置cookie路径例子总结
第一次访问child.php

  访问child.php能看到请求中发送了两个cookie分别为"father_set_1_/"、"father_set_3_test/cookie/child",接收到四个cookie分别是"child_set_0"、"child_set_1_/"、"child_set_2_/child"、"child_set_3_/test/cookie/child/"。
  页面打印出的$_COOKIE数组中有两个值,分别是请求时发送的数据。
  这里有个貌似奇怪的地方,打印出的$_COOKIE数组只有两个呢,第一个father.php页面不是设置了三个cookie值吗,为什么不能访问"father_set_2_/child"呢?
  这里仔细分析就没有什么奇怪的了,浏览器每次发出请求只发送父级路径和当前路径下的cookie给服务器,服务端的$_COOKIE数组也就是来自每次请求中的发送cookie,这也意味着一个页面只能访问路径设置为当前页面路径和父路径的cookie,不能访问兄弟路径的cookie。
 
php 设置cookie路径例子总结
第二次访问father.php

  第二次访问father.php打印出了二个值,也就是本次请求发送了两个值,也就是意味着father.php能访问两个值它们分别是"father_set_1_/"、"child_set_1_/"对应的路径都是"/"。
  这里就能看出来father.php虽然设置了三个cookie,但由于路径的原因浏览器请求时并没有发送其他子路径的cookie以至于不能读取。其中"child_set_1_/"是子路径下的页面设置的cookie,由于路径是本页面所在路径则能读取。
  还有一点值得注意的是,这次访问时没能打印出"child_set_0"的值,在child.php中"child_set_0"的路径是为空的,这点是默认为当前路径,而不是站点根目录的,所有子路径想设置cookie让父路径的页面访问则需要设置路径的。
 
php 设置cookie路径例子总结
第二次访问child.php
  再次访问child.php一共能打印出5个值,没能打印出路径为"/child"的cookie,这点说明浏览器只发送“直系”路径关系的cookie值

好了现在不知道你对cooke路径设置懂了没有其它就是我们要使用那个就设置那个路径了,如果是多域名就直接设置主域名就可以了,如果是目录指定目录就行了,如果是单文件指定单文件路径就可以了哦。

[!--infotagslink--]

相关文章

  • Ecshop提示Only variables should be passed by reference in错误

    在安装好ecshop软件之后我们打开首页时提示Only variables should be passed by reference in错误了,碰到这个问题是什么原因呢?下面我们就一起来看看解决办法吧。...2016-11-25
  • 409错误是什么 http 409错误怎么解决

    409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
  • 414错误是什么 414错误怎么解决

    414错误是HTTP协议状态码中的一种,很多都还不知道414错误是什么,以及不知道怎么解决414错误,那么就来看看小编带来的介绍吧。 414错误是什么: HTTP 414错误,(Requ...2017-01-22
  • http 405错误是什么 http 405错误怎么解决

    http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • http 402错误是什么 http 402简介

    http 402错误是什么?402错误较为少见,一般不轻易出现,下面小编就来告诉大家402错误是什么吧。 HTTP 402错误是HTTP状态码的一种,表示“要求付费”; 所求的...2017-01-22
  • 411错误是什么 411错误怎么解决

    411错误是HTTP协议状态码的一种,很多人都还不知道411错误是什么,本次一聚教程网将为大家进行解答,并且告诉大家411错误怎么解决。 411错误是什么: HTTP 411错误,(Lengt...2017-01-22
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • 404错误是什么 404错误怎么解决

    403错误是网站访问过程中,常见的错误提示。资源不可用,服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致,比如IIS或者apache设置了访问权限...2017-01-22
  • php错误提示 open_basedir restriction in effect 解决

    今天在帮助一个朋友配置一台服务器时发现网站配置好了缓存目录读写不成功,在打开错误时发现提示 Warning: file_exists() [function.file-exists]: open_basedir restr...2016-11-25
  • 403错误是什么 403错误怎么解决

    403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
  • 解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题

    这篇文章主要介绍了解决springboot使用logback日志出现LOG_PATH_IS_UNDEFINED文件夹的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-28
  • 412错误是什么 412错误怎么解决

    412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • 407错误是什么 407错误怎么解决

    407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22
  • 406错误是什么 406错误怎么解决

    HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
  • 410错误是什么 http 410错误怎么解决

    410错误是HTTP协议状态码的一种,本次一聚教程网将为大家详细介绍HTTP 410错误是什么,以及410错误的解决办法。 410错误是什么: HTTP 410错误是HTTP协议状态码的...2017-01-22
  • HTTP 400错误是什么 HTTP 400错误怎么解决

    每当遇到http错误代码为400,代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误,那么HTTP 400错误怎么解决呢?请看下文介绍。 目前400错...2017-01-22
  • PHP Fatal error: Cannot use object of type stdClass as array in错误

    下面一起来看看在php开发中碰到PHP Fatal error: Cannot use object of type stdClass as array in错误问题的解决办法吧。 普通的数组出现如下错误 代码...2016-11-25
  • PHP Curl出现403错误的解决办法

    自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31