个人工作笔记

网站滚动术:http://blog.csdn.net/jianggaocheng_nupt/article/details/7868320


phpcms具体文件夹的文件
api         接口文件目录 
caches      缓存文件目录 
    configs     系统配置文件目录 
    caches_*    系统缓存目录 
phpcms      phpcms框架主目录 
    languages   框架语言包目录 
    libs        框架主类库、主函数库目录 
        classes 
        data 
        functions 
            extention.func.php 用户自定义函数库 
            global.func.php 公共函数库 
    model       框架数据库模型目录 
    modules     框架模块目录 
    templates   框架系统模板目录 
languages   框架语言包目录 
    zh-cn       中文语言目录 
        admin.lang.php      cms后台系统标签 
        content.lang.php    内容模型系统标签 
        member.lang.php     会员模块系统标签 
        pay.lang.php        交易模块系统标签 
libs        框架主类库、主函数库目录 
model       框架数据库模型目录 
modules     框架模块目录 
templates   框架系统模板目录 
    default     系统默认主题模板目录 
    announce 
    comment     评论模块模板 
    content     内容模块模板 
    dianping 
    formguide 
    link        友链模块模板 
    member      会员模块模板 
    message     留言模块模板 
    mood 
    pay         交易模块模板 
    plugin 
    poster 
    search      搜索模块模板 
    special 
    vote 
    wap         手机模块模板 
phpsso_server phpsso主目录 
statics     系统附件包 
    css         系统css包 
    images      系统图片包 
    js          系统js包 
uploadfile  网站附件目录 
admin.php   后台管理入口 
index.php   程序主入口 
crossdomain.xml FLASH跨域传输文件 
robots.txt 搜索引擎蜘蛛限制配置文件 
favicon.ico 系统icon图标


网页加载的几种状态

document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法.
function subSomething()
{
if(document.readyState == “complete”) //当页面加载状态
myform.submit(); //表单提交
} 

 


原文:
0: (Uninitialized) the send( ) method has not yet been invoked.
1: (Loading) the send( ) method has been invoked, request in progress.
2: (Loaded) the send( ) method has completed, entire response received.
3: (Interactive) the response is being parsed.
4: (Completed) the response has been parsed, is ready for harvesting.
翻译成中文为:
0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了


java运行环境
http://jingyan.baidu.com/article/e75aca85b29c3b142edac6a8.html
进入页面就可以知道
先现在安装 java jdk
下载之后点击安装到相应的文件夹中(推荐安装到文件夹C:/Program File/)
我的电脑->右击属性->高级->环境变量->新建变量
在环境变量中,要修改两个地方,一个是添加JAVA_HOME。可以选择“新建”,变量名填上JAVA_HOME,变量值填上C:\Program Files\Java\jdk1.7.0_04,因为在上面的安装过程中,我默认一直下一步安装,所以装在C盘,
如果你在安装过程中改了,那可能是D盘或者E盘。同样变量值要做相应的更改。
还要修改一个地方,就是Path,添加JAVA的变量值到Path中,选择Path,然后点“编辑”,在最后面添加如下语句;%JAVA_HOME%\bin;
?注:在环境变量的配置中,名字不能随便改,JAVA_HOME不要随便去更改其它的,否则可能认不到。
在上述操作以后再进行如下操作
我的电脑->右击属性->高级->环境变量->新建变量(重复操作具体如下)
新建变量名PATH和CLASSPATH值分别为
C:\Program Files\Java\jdk1.6.0_10\bin
C:\Program Files\Java\jdk1.6.0_10\lib\tools.jar
添加好两个变量之后进行测试下面为测试的步骤:
cmd->输入javac出现正常的信息则安装成功否则安装失败

 

网站伪静态:
访问:http://localhost/32654_id.html
等同于在访问
http://localhost/index.php?id=32654
这是由apache中的某个模块的功能处理的;
具体的步骤见网站中的视频
http://www.tudou.com/programs/view/rls7LB7GU3U
mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面。下面我详细说说它的使用方法
1.检测Apache是否支持mod_rewrite
通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。
如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/apache/conf/” 下的 httpd.conf 文件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。
如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module ,modules/mod_rewrite.so”(必选独占一行),然后重启apache服务器即可。
2.让apache服务器支持.htaccess
如何让自己的本地APACHE服务器支持”.htaccess”呢?其实只要简单修改一下apache的httpd.conf设置就可以让 APACHE支 持.htaccess了。打开httpd.conf文件(在那里? APACHE目录的CONF目录里面),
用文本编辑器打开后,查找
Options FollowSymLinks
AllowOverride None
改为
Options FollowSymLinks
AllowOverride All
就可以了。
3.建立.htaccess 文件
有1种最简单的方法建立.htaccess文件:
用记事本 打开,点击文件–另存为,在文件名窗口输入”.htaccess”,注意是整个绿色部分,
也就是包含英文引号,然后点击保存就行了。
4.rewrite规则学习
我们新建一个.htaccess文件之后,就在里面写入以下内容:
RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭
RewriteRule ([0-9]{1,})$index.php?id=$1
我讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的([0-9]{1,})是指由数
字组成的,$是结束标志,说明是以数字结束!
好吧,现在我们可以实现伪静态页面了,写下一下的规则:
RewriteEngine on
RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$index.php?action=$1&id=$2
([a-zA-Z]{1,})-([0-9]{1,}).html$是规则,index.php?action=$1&id=$2是要替换的格式,$1代表第
一个括号匹配的值,$2代表第二个,如此类推!!
我们写一个处理的PHP脚本:
index.php
PHP代码
echo ‘你的Action是:’ . $_GET['action'];
echo ‘
’;
echo ‘你的ID是:’ . $_GET['id'];
?>
好了,我们现在在浏览器中输入:
localhost/page-18.html
输出的是:
你的Action是:page
你的ID是:18

 

mysql优化技术
传智视频网址:http://v.youku.com/v_show/id_XNTYzMDUxNTU2.html
1.表格设计要合理("表的设计要符合三范式:数据不可再分割,不要有重复的数据,不要有冗余的数据");
2.添加适当的索引:主键索引、普通索引、唯一索引、全文索引;
3.表格分割:水平分割、垂直分割;
4.读写分离:两个库,一个库专门用来读.一个库专门用来写.当有数据写入后.触发,更新只读的数据库.这里的要求是,数据及时性没要求.并且写的频率不高;
5.存储过程的合理利用;
6.mysql的配置进行设置;
7.mysql服务器进行升级;
8.定时清除不需要的数据,并对碎片进行整理;
查询mysql的运行进程:
常用的有 连接的时间:show [session|global] status like 'uptime'/查询执行的语句频率:show status like 'com_*'(*可以是select update delete等);
查看mysql的连接数show status like 'connections';
查看连接者的ip在cmd控制台下输入netstats -an;
显示慢查询的次数:show status like 'slow_queries';
查看慢查询的设置时间:show variables like 'long_query_time';
设置慢查询的时间 set long_query_time=1;

创建海量数据对数据库进行压力测试:
#创建表DEPT

慢查询的sql记录到一个日志中,陌认的不是启动的
在默认情况下mysql不记录慢查询日志,需要在启动的时候指定 bin\mysqld.exe - -safe-mode  - -slow-query-log [mysql5.5 可以在my.ini指定]  bin\mysqld.exe –log-slow-queries=d:/abc.log [低版本mysql5.0可以在my.ini指定]
直接在my.ini文件中可加入如下代码设置慢查询
---------------------------
log-slow-queries = D:\wamp\mysql_slow_query.log
long_query_time=5


CREATE TABLE dept( /*部门表*/
deptno MEDIUMINT   UNSIGNED  NOT NULL  DEFAULT 0,
dname VARCHAR(20)  NOT NULL  DEFAULT "",
loc VARCHAR(13) NOT NULL DEFAULT ""
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

 

#创建表EMP雇员
CREATE TABLE emp
(empno  MEDIUMINT UNSIGNED  NOT NULL  DEFAULT 0, /*编号*/
ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/
job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/
hiredate DATE NOT NULL,/*入职时间*/
sal DECIMAL(7,2)  NOT NULL,/*薪水*/
comm DECIMAL(7,2) NOT NULL,/*红利*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
)ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

#工资级别表
CREATE TABLE salgrade
(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
losal DECIMAL(17,2)  NOT NULL,
hisal DECIMAL(17,2)  NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);

# 随机产生字符串
#定义一个新的命令结束符合
delimiter $$
#删除自定的函数
drop  function rand_string $$

#这里我创建了一个函数.

#rand_string(n INT) rand_string 是函数名 (n INT) //该函数接收一个整数
create function rand_string(n INT)
returns varchar(255) #该函数会返回一个字符串
begin
#chars_str定义一个变量 chars_str,类型是 varchar(100),默认值'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
 declare chars_str varchar(100) default
   'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
 declare return_str varchar(255) default '';
 declare i int default 0;
 while i < n do
   set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));
   set i = i + 1;
   end while;
  return return_str;
  end $$


delimiter ;
select rand_string(6);

# 随机产生部门编号
delimiter $$
drop  function rand_num $$

#这里我们又自定了一个函数
create function rand_num( )
returns int(5)
begin
 declare i int default 0;
 set i = floor(10+rand()*500);
return i;
  end $$


delimiter ;
select rand_num();

#******************************************
#向emp表中插入记录(海量的数据)


delimiter $$
drop procedure insert_emp $$


#随即添加雇员[光标]  400w
create procedure insert_emp(in start int(10),in max_num int(10))
begin
declare i int default 0;
#set autocommit =0 把autocommit设置成0
 set autocommit = 0; 
 repeat
 set i = i + 1;
 insert into emp values ((start+i) ,rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());
  until i = max_num
 end repeat;
   commit;
 end $$


delimiter ;
#调用刚刚写好的函数, 1800000条记录,从100001号开始
call insert_emp(100001,4000000);


#**************************************************************
#  向dept表中插入记录

delimiter $$
drop procedure insert_dept $$


create procedure insert_dept(in start int(10),in max_num int(10))
begin
declare i int default 0;
 set autocommit = 0; 
 repeat
 set i = i + 1;
 insert into dept values ((start+i) ,rand_string(10),rand_string(8));
  until i = max_num
 end repeat;
   commit;
 end $$


delimiter ;
call insert_dept(100,10);

 

 

#------------------------------------------------
#向salgrade 表插入数据
delimiter $$
drop procedure insert_salgrade $$
create procedure insert_salgrade(in start int(10),in max_num int(10))
begin
declare i int default 0;
 set autocommit = 0;
 ALTER TABLE emp DISABLE KEYS; 
 repeat
 set i = i + 1;
 insert into salgrade values ((start+i) ,(start+i),(start+i));
  until i = max_num
 end repeat;
   commit;
 end $$
delimiter ;
#测试不需要了
#call insert_salgrade(10000,1000000);
#----------------------------------------------

MySQL函数不能创建,是未开启功能:

    mysql> show variables like '%func%'; 
    +---------------------------------+-------+ 
    | Variable_name                   | Value | 
    +---------------------------------+-------+ 
    | log_bin_trust_function_creators | OFF   | 
    +---------------------------------+-------+ 
    1 row in set (0.00 sec) 
    
    mysql> set global log_bin_trust_function_creators=1; 
    Query OK, 0 rows affected (0.00 sec) 
    
    mysql> show variables like '%func%'; 
    +---------------------------------+-------+ 
    | Variable_name                   | Value | 
    +---------------------------------+-------+ 
    | log_bin_trust_function_creators | ON    | 
    +---------------------------------+-------+ 
    1 row in set (0.00 sec)mysql>


mysql索引
添加索引:
添加主键索引:一张表把某个列设为主键的时候.则该列是主键索引;
alter table 表名 add primary key (列名);
普通索引:先建表在创建索引;
create index 索引名 on 表(列);
创建全文索引:alter table tablename add fulltext(column1,column2) ;全文索引只对myisam表起作用,只对英文有效;
正确使用全文索引:select * from articles where match(title,body) against ("database");
删除索引:alter table 表名 drop index 索引名;
如果删除主键索引:alter table 表名 drop primary key;
查询索引:
desc表明[该方法的缺点是不能够显示索引的名字];
show index(es) from 表名 \G;
show keys from 表名 \G;

查看索引  show index from 数据库表名
alter table 数据库add index 索引名称(数据库字段名称)
PRIMARY KEY(主键索引)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
UNIQUE(唯一索引)
ALTER TABLE `table_name` ADD UNIQUE (`column`)
INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
FULLTEXT(全文索引)
ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
多列索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
1.普通索引。
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
(1)创建索引:CREATE INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length,下同。
(2)修改表结构:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:CREATE TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;
2.唯一索引。
它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
(1)创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))
(2)修改表结构:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));
3.主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:CREATE TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 当然也可以用ALTER命令。

注:那些列上适合添加索引(有利于查询的速度加快,但是增加了增删改的压力):
频繁作为查询条件字段应该创建索引;
唯一性太差的字段不适合单独创建索引;
更新太频繁的字段不适合创建索引;

复合索引中必须先使用左边的才能使用右边的;
模糊查询中如果百分号加在前面则不会用到索引;
使用or条件查询的时候两条件的字段都要建立索引,否则索引失去作用;
如果字段类型是字符串的时候则一定要用引号括起来,否则无法用到索引;
查询索引的使用情况 show status like 'handler_read%';

添加外键:
注意:
为了建立两个MySQL表之间的一个外键关系,必须满足以下三种情况:  
 
    * 两个表必须是InnoDB表类型。  
    * 使用在外键关系的域(字段)必须为索引型(Index)。所以要为设置外键的字段建立index。
    * 使用在外键关系的两个域(字段)数据类型要相同。
方法:
alter table web_subject add constraint FK1 foreign key (cid) references web_column(cid) ON DELETE CASCADE;
 
sql语句使用的小技巧:
group by语句默认的将会对结果进行排序,可以将group by null阻止排序;
mysin类型表删除数据后存在大量的碎片 需要通过optimize table 表名来进行碎片整理;
mysql数据库的备份 在cmd控制台中输入 mysqldump -u root -proot temp>e:\temp.bak
如果希望备份的是数据库的某几张表 mysqldump -u root -proot temp[表名1] [表名2]>e\temp.bak
如何使用备份文件恢复我们的数据mysql>source D:/www/sql/back.sql;
定时完成数据库的备份:建立bat文件内部放入自己写好的执行语句如: E:\wamp\bin\mysql\mysql5.5.20\bin\mysqldump -u root -p test1 dept>e:\dept.bak
数据备份的时候会出现总是覆盖的问题这就需要一个可以随时备份且不会被覆盖最好是按照时间的顺序来排列的一个方法,既先用php文件执行备份命令;php执行命令函数为exec
在cmd控制台中如何访问php文件:E:\wamp\bin\php\php5.3.10\php.exe  被访问的文件路径\test.php


php完成定时发送邮件等功能;
sql函数中 unix_timestamp() 获取当前时间戳(十天之后的值为unix_timestamp()+3600*10);
strtotime()取得默认取得当天零点的时间戳可以给定参数求指定时间的时间戳作用大于mktime();
php函数中有个mail函数是发送邮件的最好使用phpmailer类
**使用phpmailer类的使用前提:1.本身的机器是可以联网的;2.搭建自己的smtp邮件服务器(接收和发送邮件)或用已有的账户邮件账号进行转发(前者用的更多);
3.安装遥志邮件服务器参数配置:(1)选择数据库ACCESS;(2)启用webmail取消(3)邮件服务器配置:域名配置(4)服务器设置中去掉勾选esmtp发送验证(5)设置一个账号
*******************************发送邮件的代码************************************************
<?php
//引入文件类
include './class.phpmailer.php';
//实例化邮件类
$mail=new PHPMailer();
//编写的邮箱内容
$content=<<<EMAIL
因为你最近非法散播有害国家的信息,你的QQ号将永久封号!;
EMAIL;
//对邮件的一些参数进行配置;
$mail->CharSet='utf-8';
$mail->ContentType='text/html';
$mail->Encoding='base64';
$mail->From='wuwenjie@192.168.1.185';
$mail->FromName='腾讯网';
$mail->Subject='腾讯封号通知';
$mail->Body=$content;

//设置一下语言包
$mail->SetLanguage('zh_cn');
//添加收件人地址
$mail->AddAddress('ping1075745367@163.com','曹慧萍');
if($mail->Send()){
echo"ok";
}

?>
*********************************结束代码**********************************************
(6)***********修改php.ini****
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = wuwenjie@192.168.1.185
****************************************************************************************

 

表的分割技术:
原理:如将一个表分成三个表,将用户的数据id%3就可以知道用户的信息大概在哪张表;
mysql_insert_id()获取插入的id;
步骤:1.建四张表(三张表是用来存放数据的,另一张是辅助表用来存放数据后获取唯一的id后%3存入另三张表)

读写分离:就是读和增删改放在不同的表中,住表放增删改,几张从表是用来执行select操作的,同时主表要定时的去更新几张从表(?);

增量备份:
定义:mysql数据库会以二进制的方式记录数用户对据库操作语句,记录到文件中,当用户希望恢复的时候可以使用备份文件恢复
注:会记录(dml语句),创建表语句,select语句不会记录,会记录操作语句的本身,操作的时间和position;
步骤:配置mysql.cof文件或my.ini文件启用二进制备份(log-bin=E:\mylog),集成环境中备份的文件存在于E:\wamp\bin\mysql\mysql5.5.20\data文件夹中,可以在cmd中运行E:\wamp\bin\mysql\mysql5.5.20\bin\mysqlbinlog.exe E:\wamp\bin\mysql\mysql5.5.20\data\备份文件;
利用备份文件进行恢复数据操作
将备份的文件导出为sql文件:
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000001 > e:/log/log.sql
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000002 >> e:/log/log.sq
 
时间定位mysqlbinlog --stop(start)-datetime="2013-01-14 18:20:40" E:\wamp\bin\mysql\mysql5.5.20\data\备份文件 | mysql -uroot -p;
位置定位mysqlbinlog --stop(start)-position="100" E:\wamp\bin\mysql\mysql5.5.20\data\备份文件 | mysql -uroot -p;
1)RESET MASTER
在上面查看日志存放的文件夹中,二进制日志命名的格式是以mysql-bin.*,*代表日志的序号,序号是递增的,其中还有mysql-bin.index是日志的索引文件,记录了日志的最大序号
我们执行RESET MASTER命名删除全部日志
2)PURGE MASTER LOGS TO & PURGE MASTER LOGS BEFORE
执行PURGE MASTER LOGS TO 'mysql-bin.******'命令,是将'******'编号之前的所有日志进行删除
执行PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'命令,是将在'yyyy-mm-dd hh:mm:ss'时间之前的所有日志进行
EXPIRE_LOGS_DAYS
此参数是设置日志的过期天数,过期的日志将会被自动删除,这有利于减少我们管理日志的工作量,需要修改my.cnf


网页静态化(大型网站提速优化技术)
学习新知识的思路:
提出问题->引进新技术->做个小案例->技术细节->使用到项目中
apache\Apache2.2.21\bin\ab.exe 可以做压力测试 可以模仿多人迸发访问摸个页面
基本用法 ab.exe -n 10000 -c 10 http://www.huixingwo.com
-n 表示多少次
-c 表示多少人
php缓存机制开启的方式有两个一个是修改php.ini中output_buffer文件还有中方法是直接在文件的顶部加上ob_start()


//查询执行状态
show processlist

posted @ 2013-12-30 17:51  念雷星  阅读(297)  评论(0编辑  收藏  举报