您的位置:首页 > 编程语言 > PHP开发

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()]);

}

以上,所述是一些新手经常遇到的问题。或许是详述不清,难免有误所在,请高手指点批评。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: