群里有人在说自己是PHPCMS团队的,并贴出了博客,看到这个东东,以前写过类似的,但只写了PV,UV,IP,这个就比较全了,那我哪还能忍得住?不由分说的转载了。。
原文:http://blog.phpcms.cn/?paged=2
内容如下:
浏览数Page Views:网页(含文件及动态网页)被访客浏览的次数。Page View的计算范围包括了所有格式的网页,例如:.htm、.html、.asp、.cfm、 asa、cdx、htmls、shtm、shtml、txt等等,可以由用户根据实际情况自己设定。
访问数Visits:也称为登陆数,一个登陆是指客户开始访问网站到离开网站的过程。其中:相邻两次点击页面时间间隔在30分钟以内(系统默认30分钟,用户可以修改默认值)为一次登陆,大于30分钟为两次登陆。
用户数Unique Visitors:也称为唯一客户数,是指一天内访问本网站的唯一IP个数。
点击数Hits:是指日志文件中的总记录条数。
停留时间Visiting Times:也称为访问时长,是用同一个访问过程中最后一个页面的访问时间减去第一个页面的访问时间,得到此访问在网站上的停留时间。
首页浏览数:网站首页被访客浏览的次数。
过滤浏览数Filter Page Views:网站中的某些页面并不是独立的页面,而是附属于某个页面,如滚动条页面就是附属于首页的页面,用户可以将这些附属页面设置为过滤页面,过滤页面被访客浏览的次数即为过滤浏览数。
有效浏览数Effective Page Views:去除过滤页面后的其他所有页面被访客浏览的次数,即有效浏览数=浏览数-过滤浏览数。
平均访问浏览数:一次访问平均产生的浏览数,即平均访问浏览数=浏览数÷访问数。
重复访问数Returning Visits during a day:一天内访问两次以上的用户数。
曝光数:广告弹出次数。
广告点击数:用户点击弹出广告的次数,即Click数。
返回数:通过电子邮件进行市场推广时,用户通过点击邮件中的链接地址访问网站的次数。
注册数:用户通过电子邮件和广告访问本网站,并最终转换为注册用户的数量。
返回率:广告弹出后,被用户点击的程度,即返回率=点击数÷曝光数×100%。
客户转化率:客户转化率包含两方面含义:用户通过广告访问本网站,并最终转化成注册用户的程度,即客户转化率=注册数÷点击数×100%;用户通过邮件上的链接地址访问本网站,并最终转化成注册用户的程度,即客户转化率=注册数÷返回数×100%。
发送字节数:从服务器端向客户端发出的字节数。
接收字节数:服务器端从客户端接收的字节数。
总字节数:是发送字节数和接收字节数的总和,即总字节数=发送字节数+接收字节数。
行为/路径:在一个访问过程中,客户访问过的所有页面的轨迹称为路径,或称为行为。
特定行为:由用户自行定义的行为,包含若干行为步骤,其中行为步骤不受限制,即可以任意设定行为步骤。进而分析出满足设定行为的发生次数及各个步骤之间的转化率。
特定行为转化率:在特定行为中,两个步骤之间的转化率。
行为入口:客户开始访问网站的第一个页面。在Web-IA中,根据入口给出典型行为分析。
行为出口:客户访问网站的最后一个页面。在Web-IA中,根据出口给出典型行为分析。
沉默时间:注册用户最后一次访问网站到分析日的天数。
沉默用户:在沉默时间内未访问网站的注册用户。
重复访问用户比例:一天内访问两次以上用户占总用户数的比例,该值越大表明用户品质越高,理想值为100%。
用户粘着度指数:一天内的总访问数与总用户数之比,该值越大表明用户品质越高。
重度访问用户:按每次访问的停留时间划分,把停留时间超过20分钟的用户归为重度访问用户;也可以按照每次访问产生的浏览数划分,把一次访问浏览超过10个页面的用户归为重度访问用户。对于重度访问用户,包括以下四个指标,每个指标值越大,表明用户品质越高。
重度用户比例(次数)=(浏览数≥11页面的访问数)÷总访问数
重度用户比例(时长)=(》20分钟的访问数)÷总访问数
重度用户指数=(》20分钟的浏览数)÷(》20分钟的访问数)
重度访问量比列=(》20分钟的浏览数)÷总浏览数
轻度访问用户:按每次访问的停留时间划分,把停留时间不超过1分钟的用户归为轻度访问用户。对于轻度访问用户,包括以下三个指标,每个指标值越小,表明用户品质越高。
轻度用户比例=(0-1分钟的访问数)÷总访问数
轻度用户指数=(0-1分钟的浏览数)÷(0-1分钟的访问数)
轻度访问量比例=(0-1分钟的浏览数)÷总浏览数
拒绝率:一次访问只访问一个页面的访问次数占总访问数的比例,比例越小,表明用户品质越高。
拒绝率(一个页面)=只访问1个页面的访问数÷总访问数
拒绝率(首页)=只访问首页的访问数÷总访问数
地区:访问客户的来源地区,是根据IP地区对照表,查询访问客户的IP地址落在哪个IP区段内,而得到其对应的地区。地区包括国内地区和国外地区,国内地区以省为单位,国外地区以国家为单位。
网页开发人员使用firebug那是理所当然的事,IE8也在学习firebug,而且,快捷键都一样哦。F12打开firebug(IE也是这个快捷键,哈哈)
原文地址:http://www.cnblogs.com/cocowool/archive/2009/05/12/1454696.html
作者:小狼
内容如下:
Firebug对于Web开发人员来说,已经成为了不可或缺的工具,但是在我日常的工作中,常常感觉还没有能够深刻的挖掘出她的潜力,今天花了点时间仔细研究了Console和命令行的使用在提高工作效率方面的作用,
记下来和大家分享一下.
Firebug一共有Console,HTML,CSS,Script,DOM,NET六个Tab,今天着重说一下Console的用法。
其实我们对于Console应该非常熟悉,因为这里是Firebug给出各种信息的窗口,而这也正是Console的主要用途,日志记录(Logging)。
除此之外,Console还提供了通过命令行方式来调试Javascript的方法。下面就来学习一下Console的用法。
1、Firefox的日志记录(Logging in Firefox)。
通过Console的记录方法,我们可以不再使用烦人的alert或者document.write方法来进行调试。
Firebug提供了五种日志的类型:
console.log:记录一行信息,无任何图标提示;
console.debug:记录一行信息,带超链接,可以链接到语句调用的地方;
console.error():向控制台中写入错误信息,带错误图标显示和高亮代码链接;
console.info():向控制台中写入提示信息,带信息图标显示和高亮代码链接;
console.warn():向控制台中写入警告信息,带警告图标显示和高亮代码链接;
consle打印字符串支持字符串替换,使用起来就像c里面的printf(“%s",a),支持的类型包括:
%s string,字符串
%d,%i 整型
%f 浮点
%o 对象
如果使用%o的话,对象就会用绿色的超链接表示出来,单击后会将你带到DOM视图。
2、分组(Grouping)。
如果某一类的信息特别多时,分组就有利于逻辑的划分。
使用上很简单,参见代码。
function consoleGroup(){
var groupname = "Group 1";
console.group("Message group %s", groupname);
console.log("This is the 1 message in %s", groupname);
console.log("This is the 2 message in %s", groupname);
console.log("This is the 3 message in %s", groupname);
console.groupEnd();
goupname = "Group 2";
console.group("Message group %s", goupname);
console.log("This is the 1 message in %s", goupname);
var subgroupname = "Sub group 1";
console.group("Message group %s",subgroupname);
console.log("This is the 1 message in %s", subgroupname);
console.log("This is the 2 message in %s", subgroupname);
console.log("This is the 3 message in %s", subgroupname);
console.groupEnd();
console.log("This is the 2 message in %s", goupname);
console.groupEnd();
}
3、console.dir和console.dirxml
console.dir可以将一个对象的所有方法和属性打印出来,这个方法无疑是非常有用的,我们不再需要object.toString这样的方法支持了,只要有firebug,查看对象也变得很轻松
同时,我们也可以将页面中的元素作为一个对象打印出来,但是你要小心,因为这将输出众多的信息,可能你会迷失在繁杂的信息中而找不到自己需要的条目。
我们可以通过分组将这些大量的信息放入一个分组中,这样可以在逻辑上更清楚一些。
function consoleDir(){
function Car(){
this.Model = "Old Model";
this.getManu = function(){
return "Toyota";
}
}
var objCar = new Car();
console.dir(objCar);
console.dir(zoo);
var groupname = "Css Style";
console.group("The button Style", groupname);
console.dir(document.getElementById('consoledir').style, groupname);
console.groupEnd();
}
console.dirxml 打印出HTML元素的XML表示形式.
4、断言(console.assert())。
console.assert()可以用来判断一个表达式是否正确,如果错误,他就会打印错误信息在控制台窗口中。
5、追踪(console.trace())。
console.trace()是一个非常有趣的功能。我们先来看看官方的解释:打印Javascript执行时刻的堆栈追踪。
这个函数可以打印出程序执行时从起点到终点的路径信息。
比如如果我们想知道某个函数是何时和如何被执行的,我们将console.trace()放在这个函数中,我们就能够的看到这个函数被执行的路径。
这个函数在调试其他人的源代码时非常有用。
6、计时(Timing)。
console.time(timeName)可以用来计时,这个在我们需要知道代码执行效率的时候特别有用,就不用自己造轮子了。
function consoleTime(){
var timeName = "timer1";
console.time(timeName);
var a = 0;
for(var i = 0; i < 100; i++){
for(var j = 0; j < 100; j++){
// console.log('Hello world');
a = a + 1;
}
}
console.log("a = %d", a);
console.timeEnd(timeName);
}
7、Javascript分析器(Javascript Profiler)。
我们可以通过代码console.profile('profileName')或者单击Profiler标签来进行Javascript代码执行的分析。这个功能有点类似于console.time(),可以帮助我们评估
代码的表现,但是能够提供比console.time()更详细的信息。
有三种方法可以调用Javascript profiler。一种是在代码中写入分析脚本,一种是单击profile标签,最后还可以在命令行下输入命令来执行。
执行后,可以看到详细的输出结果,下面对各项进行一些说明:
Function Column:显示调用的函数名称;
Call Column:显示调用次数;
Percent Column:显示消耗的时间比;
Own Time:显示函数内部语句执行的时间,不包括调用其他函数的时间;
Time Column:显示函数从开始到结束的执行时间;
Avg Column:平均时间。Avg = Own / Call;
Min & Max Column:显示最小和最大时间;
File Column:函数所在的文件;
8、其他的一些选项。
在Console Tab的最右侧有一个Options的选项,在这里可以自己定义需要显示的错误,其内容很好理解,这里就不多说了。
有一点就是Firebug1.3以后,多了
Show Chrome Errors
Show Chrome Message
等几个选项,这几个选项还没有验证过其具体的作用,哪位知道的可以共享一下。
[参考资料]
1、Firebug Tutorial http://michaelsync.net/2007/09/09/firebug-tutorial-logging-profiling-and-commandline-part-i
2、Firebug Tutorial http://michaelsync.net/2007/09/10/firebug-tutorial-logging-profiling-and-commandline-part-ii
从这个数字来看,确实是个颇具吸引力的东西啊。其他操作系统和更多版本下载请前往zend studio专门下载页面。
增加的新功能也是同样的引人瞩目。具体如下:
- Zend Studio 7.0 is built on top of the latest version of Eclipse (Galileo).[Zend Studio 7.0 基于Eclipse 的最新版本构建(Galileo).]
- PHP 5.3 Support[支持php5.3版本]
- Enhanced Source Code Editing[更强的源码编辑]
- Quick Root Cause Analysis through Zend Server Integration[集成zend server调试服务器]
- Rapid Application Development with Zend Framework[zf快速应用开发]
- Better Performance[更好的性能提升]
但是,由于这个是Early Access版本【早期使用版本?】,估计只适合体验尝新下,等最终的正式版本出炉了,我看才更有使用价值,喜欢的朋友可以下载的。
直接下载地址:http://downloads.zend.com/studio-eclipse/7.0.0/ZendStudio-7.0.0-EA.exe
原文来自gently的博客:http://www.zendstudio.net/archives/zend-studio-7-early-access/
这种方式有点另类,但确实是一种解决的方案之一。而且ob的方式还可以用来开启gzip。呵呵
原文地址:http://www.cnblogs.com/webnet/archive/2009/05/22/1486939.html
内容:
本文讨论的是如何彻底杜绝warning: Cannot add header information - headers already sent in...... 这种令人莫明其妙的的错误。
只要你写过PHP代码,相信都遇上过这个大多时候都令人莫明其妙的warning吧..今天我们就来搞定它...............
看了PHP手册,回答如下:
消息“Warning: Cannot send session cookie - headers already sent。。。”或者“Cannot add header information - headers already sent。。。”。
函数 header(),setcookie() 和 session 函数需要在输出流中增加头信息。但是头信息只能在其它任何输出内容之前发送。在使用这些函数前不能有任何(如 HTML)的输出。函数 headers_sent() 能够检查您的脚本是否已经发送了头信息。请参阅“输出控制函数”。
意思是:不要在使用上面的函数前有任何文字,空行,回车,空格等。但。。。问题是,这答案并不令人满意。因为往往程序在其他PHP环境下运行却正常。
首先:这错误是怎么产生的呢?让我们来看看PHP是如何处理HTTP header输出和主体输出的。
PHP脚本开始执行时,它可以同时发送header(标题)信息和主体信息。 Header信息(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中。 这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题)。但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header。而后继续发送主体数据。从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。
好!那我们来解决它:
笨方法:把错误警告全不显示!
掩耳盗铃之计,具体方法就不说了 ^_^#
解决方案:
1)适用于有权限编辑PHP。INI的人
打开php。ini文件(你应试比我清楚你的php。ini在哪里),找到
output_buffering =改为on或者任何数字。如果是IIS6,请一定改为ON,不然你的PHP效率会奇慢。
2)使用虚拟主机,不能编辑PHP。INI,怎么办?
简单:
在你的空间根目录下建立一个。htaccess文件,内容如下:
AllowOverride All
PHP_FLAG output_buffering On
不幸的情况是:还是不行?全部网页都不能显示啦?
那么,你可以打电话骂一通空间商,然后让他给你把apache的。htaccess AllowOverride打开
3)在PHP文件里解决
ob_start()
启用output buffering机制。 Output buffering支持多层次 -- 例如,可以多次调用 ob_start() 函数。
ob_end_flush()
发送output buffer(输出缓冲)并禁用output buffering机制。
ob_end_clean()
清除output buffer但不发送,并禁用output buffering。
ob_get_contents()
将当前的output buffer返回成一个字符串。允许你处理脚本发出的任何输出。
原理:
output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP 4。0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送。当全部脚本终止 时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。
偶尔看到这篇文章,觉得转下来也挺不错。毕竟现在mssql用的人也挺多,不是吗?
数据库迁移问题也可以多注意一下。。
原文地址:
内容如下:http://www.cnblogs.com/perfectdesign/archive/2009/05/22/mssql2mysql.html
最近在做mssql转换成mysql的工作,总结了点经验,跟大家分享一下。
同时这些也会在不断更新。也希望大家补充。
1 mysql支持enum,和set类型,sql server不支持
2 mysql不支持nchar,nvarchar,ntext类型
3 mysql的递增语句是AUTO_INCREMENT,而mssql是identity(1,1)
4 msms默认到处表创建语句的默认值表示是((0)),而在mysql里面是不允许带两括号的
5 mysql需要为表指定存储类型
6 mssql识别符是[],[type]表示他区别于关键字,但是mysql却是 `,也就是按键1左边的那个符号
7 mssql支持getdate()方法获取当前时间日期,但是mysql里面可以分日期类型和时间类型,获取当前日期是cur_date(),当前完整时间是 now()函数
8 mssql不支持replace into 语句,但是在最新的sql20008里面,也支持merge语法
9 mysql支持insert into table1 set t1 = ‘’, t2 = ‘’ ,但是mssql不支持这样写
10 mysql支持insert into tabl1 values (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1)
11 mssql不支持limit语句,是非常遗憾的,只能用top 取代limt 0,N,row_number() over()函数取代limit N,M
12 mysql在创建表时要为每个表指定一个存储引擎类型,而mssql只支持一种存储引擎
13 mysql不支持默认值为当前时间的datetime类型(mssql很容易做到),在mysql里面是用timestamp类型
14 mssql里面检查是否有这个表再删除,需要这样:
if exists (select * from dbo.sysobjects where id = object_id(N'uc_newpm') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
但是在mysql里面只需要 DROP TABLE IF EXISTS cdb_forums;
15 mysql支持无符号型的整数,那么比不支持无符号型的mssql就能多出一倍的最大数存储
16 mysql不支持在mssql里面使用非常方便的varchar(max)类型,这个类型在mssql里面既可做一般数据存储,也可以做blob数据存储
17 mysql创建非聚集索引只需要在创建表的时候指定为key就行,比如:KEY displayorder (fid,displayorder) 在mssql里面必须要:create unique nonclustered index index_uc_protectedmembers_username_appid on dbo.uc_protectedmembers
(username asc,appid asc)
18 mysql text字段类型不允许有默认值
19mysql的一个表的总共字段长度不超过65XXX。
20一个很表面的区别就是mysql的安装特别简单,而且文件大小才110M(非安装版),相比微软这个庞然大物,安装进度来说简直就是.....
21mysql的管理工具有几个比较好的,mysql_front,和官方那个套件,不过都没有SSMS的使用方便,这是mysql很大的一个缺点。
22mysql的存储过程只是出现在最新的版本中,稳定性和性能可能不如mssql。
23 同样的负载压力,mysql要消耗更少的CPU和内存,mssql的确是很耗资源。
24php连接mysql和mssql的方式都差不多,只需要将函数的mysql替换成mssql即可。
25mysql支持date,time,year类型,mssql到2008才支持date和time。