php基本设置之error_reporting
2011-10-08 11:12
225 查看
今天遇到了一个关于Warning: Trying to destroy uninitialized session的问题,顺便把php.ini里面关于这报错设置的这一段给弄清楚了!
display_errors = Off
默认应该是不显示errors的.
log_errors = On
把出错信息记录到web server的错误日志中.
error_reporting = E_ALL
自己定义错误日志中应该显示什么.
error_reporting 是可以在php文件中自己设置,或者.htaccess中设置的
如:
error_reporting(0);
error_reporting(E_ERROR | E_WARNING | E_PARSE); 等同error_reporting(7)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 等同error_reporting(15)
error_reporting(E_ALL ^ E_NOTICE); 等同error_reporting(6135)
error_reporting(E_ALL); 等同error_reporting(6143)
那么error_reporting到底有多少种形式了
value constant
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
6143 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR
详细的计算需要查手册,不过这些数字和*nix系统中的权限位是如出一辙的
其实没什么东西,只是记录下!
最后Warning: Trying to destroy uninitialized session 也只是
把session_destroy(); 修改为了 @session_destroy();
10个需要注意的mysql变量
mysql的性能需要我们监控,今天着重介绍十个比较重要的mysql变量.
原文来自http://blogs.techrepublic.com.com/opensource/?p=56,我并不觉得这10个变量都重要的值得去监控,但是也是必须去了解的!等以后我觉得有更重要的变量需要了解的时候,会再写下来的!今天找了好久才找到这篇文章的,本来那天看见就准备抄过来的,呵呵:)
1 Threads_connected
首先需要注意的,想得到这个变量的值不能show variables like 'Threads_connected';而是
show status like 'Threads_connected'(下面的变值也是这样的);
意思:变量的值是表示当前有多少个客户连接该mysql服务器
引申:连接数是否过多,网络时候存在问题!特别是在pconnect的情况下:)
2 Created_tmp_disk_tables
意思:在硬盘上建立的临时表数目
引申:如果这个值比较大的话,那么查询时需要建立临时表(CREATE TEMPORARY TABLE)的操作 就要消耗更多的时间
3 Handler_read_first
意思:读表索引的第一行
引申:如果这个值变化比较大的话,可以认为表索引建立的有问题,全索引的扫描操作比较多
4 Innodb_buffer_pool_wait_free
意思:This variable indicates the number of times MySQL has to wait for memory pages to be flus
引申:If this variable is high, it suggests that MySQL's memory buffer is incorrectly configured for the amount of writes the server is currently performing.
不了解这个:)
5 Key_reads
意思:读文件系统上面的索引的次数
引申:如果这个值太大的话,就需要考虑key cache设置是否正常了
6 Max_used_connections
意思:重起后到现在最大连接数
引申:服务器负载和可能需要调节的连接数
7 Open_tables
意思:当前打开的表的数目
引申:如果这个值很低,table cache很大,则减小table cache的设置是没有问题的,如果这个值很大,并接近了table cache的值,我们就需要加大talbe cache的设置
8 Select_full_join
意思:全连接的查询数目
引申:数值过大,需要建立更多的索引来避免
9 Slow_queries
意思:慢查询的数目
引申:过大的话就要察看慢查询的日志,并且检查sql语句书写是否恰当
10 Uptime
意思:运行时间,单位秒
引申:This value is useful to analyze server uptime, as well as to generate reports on overall system performance. A consistent low value indicates that the server is being frequently restarted, thereby causing frequent interruptions to client service.
总算翻译的大差不差了:)
使用telnet浏览网页
最近一直在学习mysql,把其他事情给耽搁了!
重点记一下怎么用telnet来测试网页的一些性质,虽然现在用firebug,curl,wget等等简单易用的工具来测试网页是否被压缩和是否被缓存!但有时还是不能避免的使用telnet这样原始的工具来做一些简单的测试!
其实如果了解rfc2616协议,也就是http协议的话,使用起来就不陌生了!
可是像我们这些习惯使用工具的人来讲,有时候不免会忘记!在这里记一下,毕竟我google了1好一阵也没找到!
先ping 下www.douban.com ip为59.151.41.69 80 (为什么不测试sina,163呢?他们前端有专业的防火墙等设备,直接telnet 上去似乎有问题)
telnet 59.151.41.69 80
Connected to 59.151.41.69 (59.151.41.69).
Escape character is '^]'.
GET / HTTP/1.1
Host: www.douban.com
两下回车就可以返回我们需要的内容! GET 后面的地址一般是index.html 或者index.php等等,可douban的不晓得默认页面用的萨,所以就直接GET /了。
抓douban的头的时候意外的发现X-Mem-Hit by mem-cache-etag,google了下,发现是lighttpd的一个小插件。
用telnet基本的读取网页的能力有了,我们在近一步读取压缩过后的网页
在Host: www.doban.com回车后
继续键入Accept-Encoding: compress, gzip 并两下回车,我们就能得到天书(压缩过后的html)。
累了,其他的更过参数可以从http协议中找到!
这样用telnet,就能更好的去了解协议本身了。
服务器时间同步(一)
很多时候由于安装系统时候的不在意,或者服务器本身频率的问题,会导致服务器之间时间的不同步!
时间不同步造成的影响,squid,mysql出现问题!这些都与系统时间有这紧密的关系!
1.squid中cache出现问题
2.mysql中系统时间出现问题
通常解决的办法
同步时间
/usr/bin/rdate -s rdate.darkorb.net
clock 或者 hwclock -w 写入cpu 或硬件里面
问题:clock 和hwclock的区别
用rdate只能治表不能治本
治疗时间问题的根本是: set the system time from the hardware clock,把系统时间写入硬件中!
鸟哥这篇文章可以好好的参考参考
归纳一下别人的方法
linux调整系统时间和时区的方法(redhat 系列)
1) 找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai
用这个文件替换当前的/etc/localtime文件。
2) 修改/etc/sysconfig/clock文件,修改为:
ZONE="Asia/Shanghai"
UTC=false
ARC=false (这个不太清楚,但应该是没什么用处的)
3) 同步时间并写入cmos
关于PHP--session的问题集锦解决方案
PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。
1.
错误提示
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent
分析及解决办法
这一类问题,的原因是你在程序中使用session_start()时,之前已经有实际的html内容输出了。或许你说,我没有啊,我只不过是echo或print一条消息了。很抱歉,你的echo或print语句所产生的输出,就是实际的html内容输出。解决此类问题的办法是,将你的session_start()调到程序的第一行。
2.
错误提示
Warning: open(F:/689\php\sessiondata\sess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed
分析及解决方法
出现这样的错误语句一般是因为你的php.ini中关于session.save_path一项没有设置好,解决的方法是将session.save_path和session.cookie_path 设置置为
session_save_path = c:\temp
session.cookie_path = c:\temp
然后在c:\目录下建立一个temp目录,即可
3.
错误提示
Warning: Trying to destroy uninitialized session in
分析及解决方法
出类这样的提示,一般情况都是你直接调session_destroy()函数造成的。很多的朋友认为session_destroy()函数可以独立的运行,其实不然。解决的方法是在你调session_destroy()函数之前,要用session_start()开启session的功能。
4.问题:怎么获得当前session的id值呢?
最简单的方法是:
echo SID;
你会发现的。
5.问题:我的程序,在调用header函数之前没有任何的输出,虽然我include了一个config.php文件,但在config.php文件中也没有任何的输出,为什么session还是会报出与问题1同样的错误呢,是不是因为我在header之前用了session_start()的缘故呢?
答:或许你确实认真的检查了你的php程序,在引用header()之前确实也没有任何的输出,并且在你的include文件中也没有任何的输出!但是你是否用光标键在?>这个PHP代码结束语句后移动检查呢?那么你会发现在?>这个后面,有一个空行或几个空格,你删除了这几个空行或空格,那么问题就解决了。
注:此问题,会出PHP4.1.2中,更高版本,没有测试过。
6.问:用session做登录主页面后,其它页面怎么用session限制登录。。。
答:最简单的方法是
session_start();
if(!session_registered(\'login\') ││ $login != true) {
echo \"你没有登陆\";
exit;
}
7.问:我用session_register()注册了session变量,可是当我用header或用javascript的重定向语句,那么在一下页面中,我却访问不到session所注册的变量值。请问如何解决?
问题的程序片段:
session_start();
$ok = \'love you\';
session_register(\'ok\');
header(\"location : next.php\");
?>
next.php
session_start();
echo $ok;
?>
解决的方法:
当你用header函数或window.location这样的功能后,你上一个页面所注册的session变量,就会容易的丢失,关于这个问题的原因,至今仍没有一个详细的回答。
不过有解决的方法。如下所示
header(\"Location: next.php\" .\"?\" . SID);
在跳转到下一页面的时候,将session的当前id做为一个参数,传到后一个页面。
8.session如何传数组
session_register(\'data\');
$data=array(1,2,3,4);
方法是先注册后赋值
9.问题9:我是不是可以用像$HTTP_GET_VARS[\'**\']方式来访问session值呢?
回答:可以,你可以使用如下global数组来访问session,以加强网页的安全性
$HTTP_SESSION_VARS
$_SESSION
例程:
session_start();
$username = \'stangly.wrong\';
session_register(\'username\');
echo $HTTP_SESSION_VARS[\'username\'];
echo \'
\';
echo $_SESSION[\'username\'];
?>
请参照此例程修改符合您自己的程序。
问题10:session_unregister() 和 session_destroy() 有何区别?
session_unregister()函数主要作用是注消当前的一个session变量。不过要注意的是,如果你用$HTTP_SESSION_VARS或$_SESSION在当前页面中引用过session变量,那么你可能需要和unset()配合 来注消session变量。
而session_destroy()是清除当前的session环境。意思就是说,当你用session_destroy()函数后,那么你就不可能再用session_is_registered()来检测session的变量了。但是需要注意的是他不能清除global中的session或使用了session cookie的中的session.所以在用session_destroy之前,最好不要用$HTTP_SESSION_VARS $_SESSION来访问session.(译自于php.net)
例程:
if(isset($_COOKIE[session_name()])) {
session_start();
session_destroy();
unset($_COOKIE[session_name()]);
}
以上,所述是一些新手经常遇到的问题。或许是详述不清,难免有误所在,请高手指点批评。
display_errors = Off
默认应该是不显示errors的.
log_errors = On
把出错信息记录到web server的错误日志中.
error_reporting = E_ALL
自己定义错误日志中应该显示什么.
error_reporting 是可以在php文件中自己设置,或者.htaccess中设置的
如:
error_reporting(0);
error_reporting(E_ERROR | E_WARNING | E_PARSE); 等同error_reporting(7)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 等同error_reporting(15)
error_reporting(E_ALL ^ E_NOTICE); 等同error_reporting(6135)
error_reporting(E_ALL); 等同error_reporting(6143)
那么error_reporting到底有多少种形式了
value constant
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
6143 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR
详细的计算需要查手册,不过这些数字和*nix系统中的权限位是如出一辙的
其实没什么东西,只是记录下!
最后Warning: Trying to destroy uninitialized session 也只是
把session_destroy(); 修改为了 @session_destroy();
10个需要注意的mysql变量
mysql的性能需要我们监控,今天着重介绍十个比较重要的mysql变量.
原文来自http://blogs.techrepublic.com.com/opensource/?p=56,我并不觉得这10个变量都重要的值得去监控,但是也是必须去了解的!等以后我觉得有更重要的变量需要了解的时候,会再写下来的!今天找了好久才找到这篇文章的,本来那天看见就准备抄过来的,呵呵:)
1 Threads_connected
首先需要注意的,想得到这个变量的值不能show variables like 'Threads_connected';而是
show status like 'Threads_connected'(下面的变值也是这样的);
意思:变量的值是表示当前有多少个客户连接该mysql服务器
引申:连接数是否过多,网络时候存在问题!特别是在pconnect的情况下:)
2 Created_tmp_disk_tables
意思:在硬盘上建立的临时表数目
引申:如果这个值比较大的话,那么查询时需要建立临时表(CREATE TEMPORARY TABLE)的操作 就要消耗更多的时间
3 Handler_read_first
意思:读表索引的第一行
引申:如果这个值变化比较大的话,可以认为表索引建立的有问题,全索引的扫描操作比较多
4 Innodb_buffer_pool_wait_free
意思:This variable indicates the number of times MySQL has to wait for memory pages to be flus
引申:If this variable is high, it suggests that MySQL's memory buffer is incorrectly configured for the amount of writes the server is currently performing.
不了解这个:)
5 Key_reads
意思:读文件系统上面的索引的次数
引申:如果这个值太大的话,就需要考虑key cache设置是否正常了
6 Max_used_connections
意思:重起后到现在最大连接数
引申:服务器负载和可能需要调节的连接数
7 Open_tables
意思:当前打开的表的数目
引申:如果这个值很低,table cache很大,则减小table cache的设置是没有问题的,如果这个值很大,并接近了table cache的值,我们就需要加大talbe cache的设置
8 Select_full_join
意思:全连接的查询数目
引申:数值过大,需要建立更多的索引来避免
9 Slow_queries
意思:慢查询的数目
引申:过大的话就要察看慢查询的日志,并且检查sql语句书写是否恰当
10 Uptime
意思:运行时间,单位秒
引申:This value is useful to analyze server uptime, as well as to generate reports on overall system performance. A consistent low value indicates that the server is being frequently restarted, thereby causing frequent interruptions to client service.
总算翻译的大差不差了:)
使用telnet浏览网页
最近一直在学习mysql,把其他事情给耽搁了!
重点记一下怎么用telnet来测试网页的一些性质,虽然现在用firebug,curl,wget等等简单易用的工具来测试网页是否被压缩和是否被缓存!但有时还是不能避免的使用telnet这样原始的工具来做一些简单的测试!
其实如果了解rfc2616协议,也就是http协议的话,使用起来就不陌生了!
可是像我们这些习惯使用工具的人来讲,有时候不免会忘记!在这里记一下,毕竟我google了1好一阵也没找到!
先ping 下www.douban.com ip为59.151.41.69 80 (为什么不测试sina,163呢?他们前端有专业的防火墙等设备,直接telnet 上去似乎有问题)
telnet 59.151.41.69 80
Connected to 59.151.41.69 (59.151.41.69).
Escape character is '^]'.
GET / HTTP/1.1
Host: www.douban.com
两下回车就可以返回我们需要的内容! GET 后面的地址一般是index.html 或者index.php等等,可douban的不晓得默认页面用的萨,所以就直接GET /了。
抓douban的头的时候意外的发现X-Mem-Hit by mem-cache-etag,google了下,发现是lighttpd的一个小插件。
用telnet基本的读取网页的能力有了,我们在近一步读取压缩过后的网页
在Host: www.doban.com回车后
继续键入Accept-Encoding: compress, gzip 并两下回车,我们就能得到天书(压缩过后的html)。
累了,其他的更过参数可以从http协议中找到!
这样用telnet,就能更好的去了解协议本身了。
服务器时间同步(一)
很多时候由于安装系统时候的不在意,或者服务器本身频率的问题,会导致服务器之间时间的不同步!
时间不同步造成的影响,squid,mysql出现问题!这些都与系统时间有这紧密的关系!
1.squid中cache出现问题
2.mysql中系统时间出现问题
通常解决的办法
同步时间
/usr/bin/rdate -s rdate.darkorb.net
clock 或者 hwclock -w 写入cpu 或硬件里面
问题:clock 和hwclock的区别
用rdate只能治表不能治本
治疗时间问题的根本是: set the system time from the hardware clock,把系统时间写入硬件中!
鸟哥这篇文章可以好好的参考参考
归纳一下别人的方法
linux调整系统时间和时区的方法(redhat 系列)
1) 找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai
用这个文件替换当前的/etc/localtime文件。
2) 修改/etc/sysconfig/clock文件,修改为:
ZONE="Asia/Shanghai"
UTC=false
ARC=false (这个不太清楚,但应该是没什么用处的)
3) 同步时间并写入cmos
关于PHP--session的问题集锦解决方案
PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。
1.
错误提示
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent
分析及解决办法
这一类问题,的原因是你在程序中使用session_start()时,之前已经有实际的html内容输出了。或许你说,我没有啊,我只不过是echo或print一条消息了。很抱歉,你的echo或print语句所产生的输出,就是实际的html内容输出。解决此类问题的办法是,将你的session_start()调到程序的第一行。
2.
错误提示
Warning: open(F:/689\php\sessiondata\sess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed
分析及解决方法
出现这样的错误语句一般是因为你的php.ini中关于session.save_path一项没有设置好,解决的方法是将session.save_path和session.cookie_path 设置置为
session_save_path = c:\temp
session.cookie_path = c:\temp
然后在c:\目录下建立一个temp目录,即可
3.
错误提示
Warning: Trying to destroy uninitialized session in
分析及解决方法
出类这样的提示,一般情况都是你直接调session_destroy()函数造成的。很多的朋友认为session_destroy()函数可以独立的运行,其实不然。解决的方法是在你调session_destroy()函数之前,要用session_start()开启session的功能。
4.问题:怎么获得当前session的id值呢?
最简单的方法是:
echo SID;
你会发现的。
5.问题:我的程序,在调用header函数之前没有任何的输出,虽然我include了一个config.php文件,但在config.php文件中也没有任何的输出,为什么session还是会报出与问题1同样的错误呢,是不是因为我在header之前用了session_start()的缘故呢?
答:或许你确实认真的检查了你的php程序,在引用header()之前确实也没有任何的输出,并且在你的include文件中也没有任何的输出!但是你是否用光标键在?>这个PHP代码结束语句后移动检查呢?那么你会发现在?>这个后面,有一个空行或几个空格,你删除了这几个空行或空格,那么问题就解决了。
注:此问题,会出PHP4.1.2中,更高版本,没有测试过。
6.问:用session做登录主页面后,其它页面怎么用session限制登录。。。
答:最简单的方法是
session_start();
if(!session_registered(\'login\') ││ $login != true) {
echo \"你没有登陆\";
exit;
}
7.问:我用session_register()注册了session变量,可是当我用header或用javascript的重定向语句,那么在一下页面中,我却访问不到session所注册的变量值。请问如何解决?
问题的程序片段:
session_start();
$ok = \'love you\';
session_register(\'ok\');
header(\"location : next.php\");
?>
next.php
session_start();
echo $ok;
?>
解决的方法:
当你用header函数或window.location这样的功能后,你上一个页面所注册的session变量,就会容易的丢失,关于这个问题的原因,至今仍没有一个详细的回答。
不过有解决的方法。如下所示
header(\"Location: next.php\" .\"?\" . SID);
在跳转到下一页面的时候,将session的当前id做为一个参数,传到后一个页面。
8.session如何传数组
session_register(\'data\');
$data=array(1,2,3,4);
方法是先注册后赋值
9.问题9:我是不是可以用像$HTTP_GET_VARS[\'**\']方式来访问session值呢?
回答:可以,你可以使用如下global数组来访问session,以加强网页的安全性
$HTTP_SESSION_VARS
$_SESSION
例程:
session_start();
$username = \'stangly.wrong\';
session_register(\'username\');
echo $HTTP_SESSION_VARS[\'username\'];
echo \'
\';
echo $_SESSION[\'username\'];
?>
请参照此例程修改符合您自己的程序。
问题10:session_unregister() 和 session_destroy() 有何区别?
session_unregister()函数主要作用是注消当前的一个session变量。不过要注意的是,如果你用$HTTP_SESSION_VARS或$_SESSION在当前页面中引用过session变量,那么你可能需要和unset()配合 来注消session变量。
而session_destroy()是清除当前的session环境。意思就是说,当你用session_destroy()函数后,那么你就不可能再用session_is_registered()来检测session的变量了。但是需要注意的是他不能清除global中的session或使用了session cookie的中的session.所以在用session_destroy之前,最好不要用$HTTP_SESSION_VARS $_SESSION来访问session.(译自于php.net)
例程:
if(isset($_COOKIE[session_name()])) {
session_start();
session_destroy();
unset($_COOKIE[session_name()]);
}
以上,所述是一些新手经常遇到的问题。或许是详述不清,难免有误所在,请高手指点批评。
相关文章推荐
- php中设置错误报告级别error_reporting()
- PHP中如何设置error_reporting错误报告级别
- php中设置错误报告级别error_reporting()
- PHP中如何设置error_reporting错误报告级别
- PHP中如何设置error_reporting错误报告级别
- PHP中如何设置error_reporting错误报告级别
- error_reporting() 设置 PHP 的报错级别并返回当前级别
- PHP中如何设置error_reporting错误报告级别
- error_reporting() 设置 PHP 的报错级别并返回当前级别
- error_reporting() 设置 PHP 的报错级别并返回当前级别。
- php.ini error_reporting设置,错误等级。
- PHP中如何设置error_reporting错误报告级别
- PHP 位运算(&, |, ^, ~, <<, >>)及 PHP错误级别报告设置(error_reporting) 详解
- php.ini 设置error_reporting不起作用
- php中设置错误报告级别error_reporting()
- php中设置错误报告级别error_reporting()
- php中设置错误报告级别error_reporting()
- PHP display_errors与error_reporting
- PHP 的异常处理、错误处理:error_reporting,try-catch,trigger_error,set_error_handler,set_exception_handler,register_shutdown_function
- PHP中error_reporting()用法详解