php安装xdebug后,让var_dump()函数输出完整的变量内容

php开发环境里,安装了xdebug模块后,var_dump()输出的结果将比较易于查看,但默认情况下,var_dump() 输出的结果将有所变化:过多的数组元素不再显示,字符串变量将只显示前N个字符,较深的数组元素也被显示成省略号。这点会带来一些不便,我们修改配置文件,设置这些。

在php.ini里的xdebug节点中,加入如下

xdebug.var_display_max_children=128
xdebug.var_display_max_data=512
xdebug.var_display_max_depth=5

含义从名字上看就可看懂。

其实这里有三条配置,正好与本文上述的三点“变化”一一对应嘀 ^..^

从phpinfo()里的xdebug节点里可以看到更多的配置变量,多半也是可以通过php.ini修改的

关于php打开文件的写法原因之辨误

这是对一种错误表述的评论,错误见文后部分

"windows系统是直接输入文件的绝对路径需要这种方式"e:\\aaa.txt",注意是两个反斜杠,一个反斜杠的话就错了"这个说法是误导,或有 误导之嫌。windows系统表示文件路径时,使用一个反斜杠,而反斜杠在很多语言里表示转义之用,所以要用两个反斜杠;路径的字符串在程序运行过程中 (内存里),实际还是一个。

如果在php里,这样的用单引号括起路径字符串,如下这样是这完全正确的 readfile('e:\Downloads\t.txt'); 而readfile("e:\Downloads\t.txt");这样写就错了。不过事实上,在win32版的php里,这样写也是对的 readfile("e:\Downloads\z.txt"); 可能是反斜杠后是一个非转义字符,php把此\解析为常规反斜杠。

php里,用单引号括起路径字符串,readfile('e:\Downloads\t.txt');是这完全正确的,而readfile("e: \Downloads\t.txt");这样写就错了。不过事实上,在win32版的php里,这样写也是对的 readfile("e:\Downloads\z.txt"); 可能是反斜杠后是一个非转义字符,php把此\解析为常规反斜杠(但反对这样使用)。

——以上是对新浪微博里的一条微博做的回复,该条微博如下:http://weibo.com/1767100271/xDUCLyFYM【fopen函数的使用的几种方式】 //第一种使用fopen的方式,windows系统是直接输入文件的绝对路径需要这种方式"e:\\aaa.txt",注意是两个反斜杠,一个反斜杠的话就错了 //

原发微者没有回应,那就这管他了,把该条回复转到这里。

[转]ms sql server 存储过程,查看正在执行的sql语句

简介
  大家都知道使用sp_who2这个命令来查看当前正在的执行的SQL语句的spids.但是显示
的信息有限.比如,它只显示执行SELECT,DELETE,UPDATE等.看不到实际的sql命令.

知道正在执行哪条sql语句对于我们debug程序,找出哪些语句花费很长时间,或是哪些语句产生
堵塞来说非常重要.而且这个常用来查看存储过程执行到哪一步.执行到哪个语句.

所以我们需要一个比sp_who2更好的命令来做这些工作.
这个命令使用SQL的动态管理视图 Dynamic Management Views (DMVs).所以只用执行在SQL2005或是
更高的版本上.

返回字段简介:

 

列名 类型 描述
spid smallint SQL Server process ID.
ecid smallint Econtext ID
dbid smallint 数据库ID
nt_username nchar(128) 用户名
status nchar(30) 状态
wait_type bigint 当前等待的 milliseconds.
Individual Query varchar 当前执行的SQL语句
Parent Query varchar 上层的SQL语句
program_name nchar(128) 程序名称
Hostname nchar(128) 主机名
nt_domain nchar(128) 域名
Start_time datetime 开始时间

 

CREATE PROC [dbo].[dba_WhatSQLIsExecuting]
AS
/*--------------------------------------------------------------------
Purpose: Shows what individual SQL statements are currently executing.
----------------------------------------------------------------------
Parameters: None.
Revision History:
24/07/2008 Ian_Stirk@yahoo.com Initial version
Example Usage:
1. exec YourServerName.master.dbo.dba_WhatSQLIsExecuting
---------------------------------------------------------------------*/
BEGIN
-- Do not lock anything, and do not get held up by any locks.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

-- What SQL Statements Are Currently Running?
SELECT [Spid] = session_Id
, ecid
, [Database] = DB_NAME(sp.dbid)
, [User] = nt_username
, [Status] = er.status
, [Wait] = wait_type
, [Individual Query] = SUBSTRING (qt.text,
er.statement_start_offset/2,
(CASE WHEN er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE er.statement_end_offset END -
er.statement_start_offset)/2)
,[Parent Query] = qt.text
, Program = program_name
, Hostname
, nt_domain
, start_time
FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt
WHERE session_Id > 50 -- Ignore system spids.
AND session_Id NOT IN (@@SPID) -- Ignore this current statement.
ORDER BY 1, 2
END

from http://www.diybl.com/course/7_databases/sql/sqlServer/20090520/167430.html

数据库入门

数据库是什么,从字面上理解,就是存储数据的系统。

日常学习工作生活中,经常会见到“数据库”这一概念,如,公安系统的居民身份证数据库,银行储户信息数据库,某某论文数据库,基因数据库,等等。这些例子里的数据库并非本文所要讲述的“数据库”的概念,它们是 依据一定的手段存储的、可以快速检索的海量数据。而本文中所讲的数据库,则是能够对数据实现方便存储、快速检索、易于更新维护的软件,注意了,我们所讲的数据库实际是计算机软件,而并不关心存储具体数据是银行存款、还是家庭收支账单、或者是邂逅美女的记录。严格的说,本文所讲的数据库,是“关系型数据库”,而不是当下在sns时代火爆的NoSQL数据库。

关系型数据库软件,有很多种,应用广泛的有MySQL, PostgreSQL, Oracle, DB2,MS sql server等。

数据拆分

数据库是对数据“格式化”存储的工具,这里的格式化,指的是对数据分类另,分条目,分栏目,按实际需求把数据拆分成小的单元,并存储在数据库中。

举个例子类比一下,以便对数据库有个初步理解。Excel文件(电子表格),大家应该都知道。

  1. 一个excel文件,它里面在可以存储多个工作表,新建一个excel文件默认会有Sheet1,Sheet2,Sheet3这三个工作表。
  2. 每个工作表,都是一个“表格”,可以有很多行。
  3. 每一行,都分为多列,每列是一个单元格,可以存储一定的内容。

[注] 工作表,对于excel本身,一般理解成一个工作表有行与列垂直交错形成格子,每个格式就是单元格。但为了类比理解数据库,不能这样理解,而是按html(超文本标记语言)里对表格(table)的划分,表格先分成行(<tr>.....</tr>),对每行再分列(<td>...</td>).

数据库可以与excle作类比,一个excel文件对应类比一个数据库,excel工作表类比数据库的表,工作表的行对应数据库里表的行。

数据库的数据一般正是拆分为这三个层次的,即表,行,字段 这三个层次。

数据表

数据库里的表,即数据表,简称表;可以与excel文件里的一个工作表类比。注意,这里说用来类比的excel表,是没有“合并单元格”存在的,不管是按行或是按列合并的。

通常,我们的excel表里,会有一个标题行。类似上图中所示,这是个简单的人员联系信息表,第一行,"name gender company address phone"那一行,它分为多列,每列都是对本列的说明、或者说是该列的名称,对于数据库列,也有这样的一列,称为列名,也称为字段名。不同的是,在excel表里,列名是占据一行的,而在数据库里,它并不占据任何一行;这一点,有点类似于excel里本身的列名的,如 列A、列B、列C... 这是固定的列名,不能修改的;而数据库里列名都是我们自己定义的。

多列数据,每列数据都放

行/记录

数据表里的数据是分为多行的,每行的格式都是一致的,如上图中所示,

本文内容原本是很久以前在公司里给非技术人员培训时的演示文稿。在草稿箱里放了几乎5年,最近整理博客看其更新时间为 2011年12月26日 @ 23:05,这么久都没有继续写,大概以后也不会续写,直接发出来算了(2016-10-10 15:29)

MySQL函数 GROUP_CONCAT,相当有用

一直想找这个函数,今天终于找到了,属于聚合函数,也正是猜测可能是个函数函数、才通过“MySQL 聚合函数” google到的。

使用过程中可能会遇到1260错误,如下:

#1260 - %d line(s) were cut by GROUP_CONCAT()

这是因为group_concat()有最大长度限制,该限制值默认为1024,可以从mysql环境变量里可以查看。如需修改该值,可以在mysql配置文件里指定:

group_concat_max_len = 102400

也可以在mysql运行时动态指定,执行语句:

SET GLOBAL group_concat_max_len=102400;

参考该链接http://www.fuchaoqun.com/2008/12/mysql-trap-of-group-concat/,或者mysql手册(推荐)。

centos 6 下编译安装 nginx

下载nginx源码包,可以到nginx官方的下载文件归档里 http://nginx.org/download/ 下载

下载pcre源码,并编译安装,从pcre官方下载  ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.21.zip

解压缩 unzip pcre-8.21.zip

进入源码目录 cd pcre-8.21/

./configure

make

make install

全部使用默认,不必要指定目录,这样包容易被找到。

安装nginx

这里使用nginx 1.0.8为例。

下载源码包  wget http://nginx.org/download/nginx-1.0.8.tar.gz

解压缩 tar xvf nginx-1.0.8.tar.gz

进入源码目录 cd nginx-1.0.8/

查看配置参数 ./configure --help (此步可以省略)

简单配置 ./configure
(注:centos 6 默认安装pcre包的,但是其安装位置并不为nginx识别,而且即使手工指定好像也不行,编译过程中会提示找不到文件;所以才需要先安装pcre包)

不指定任何配置选项,应该可以成功通过,得到如下的消息

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + md5: using system crypto library
  + sha1: using system crypto library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

然后就是 make

应该不会出问题,接着make install 就安装好了。

先测试一下是否可以运行,执行 /usr/local/nginx/sbin/nginx 没有消息提示,通过浏览器打开nginx所在的ip地址,应该可以看到

 

Welcome to nginx!

 

这样的一个简单页面,证明nginx可以工作。

接下来的工作就是配置nginx了,其配置文件为/usr/local/nginx/conf/nginx.conf

fckeditor清理word代码,默认勾选"清理 CSS 样式"

修改文件

editor/dialog/fck_paste.html

大概339行

                    <br />
                    <input id="chkRemoveStyles" type="checkbox" checked="checked" />
                    <label for="chkRemoveStyles" fcklang="DlgPasteRemoveStyles">
                        Remove Styles definitions</label>

加入 checked="checked" 即可.

效果如图:

firefox弹出窗口错在新标签里打开/phpMyAdmin

使用phpMyAdmin,打开编辑sql语句,正常情况下是在新窗口中打开的,但突然变成新标签了,而且firefox的主窗口大小变成sql语句编辑窗口那么大小,很是难受。

之前也遇到过这种情况,当时是把当前用户目录下的firefox文件全部删掉(或者移走),这样对当前用户而言firefox就成了第一次使用,要重新配置,重新安装插件(当然也可以从备份文件里拷回相应目录、文件),这是一件很麻烦的工作。

这种问题出现过几次了。上次通过删除部分文件的方式,找到问题在于文件prefs.js。该文件里面很多配置项目,似乎是about:config配置项目保存的地方。但没有找到具体是哪一行或几行。

这次就单独针对本文件处理,折半法,删除一半,找问题在于哪一半,然后在有问题的一半里再删除其中一半....如此循环(或许叫递归),最终发现问题在于这样的一行:

user_pref("browser.link.open_newwindow.restriction", 0);

把这一行删掉,就可以了。不过这一行什么时候被添加上,什么时候会出现这样的问题,还不清楚。