部分整理,留待验证
MYSQL取得当前时间用 now() 就行。
在数据库中格式化时间 用DATE_FORMA T(date, format) .
为什么在debug可以在Ie不行
为什么chrome and IE 乱码
如何加载error
Class中this
如何向数据库中循环插入10条记录
存储过程
create procedure MYINS
decalre @txt varcher(10)
decalre @i int
set @i=0
while @i<10
begin
set @i=@i+1
insert into first(content)values(cancat('yy',@i)
end
CodeIgniter项目中load的原理,
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//此句用于防止跳过控制器直接访问hello.php
php 8种数据类型(integer,string,bool,float;object,array;null,resource;)
时间戳是文件属性中创建修改和访问时间。起始于1970.1.1 终止于2038.1.19
magic_quotes_gpc on时 不用使用addslashes,用时必须使用stripslashes 同时
off时必须用addslashes,但不用stripslashes
magic_quotes_runtime
若 magic_quotes_runtime 打开时,所有外部引入的数据库资料或者文件等等都会自动转为含有反斜线溢出字符的资料。
如何取出数组中值为V的项
array_filter($entry) array_filter函数的功能是利用回调函数来对数组进行过滤,一直都以为用回调函数才能处理,却没有发现手册下面还有一句,如果没有回调函数,那么默认就是删除数组中值为false的项目
写一个程序,远程抓取www.gogle.cn网页内容,并匹配所有超连接,写入URL.TXT
while(list(,$line)=each($p)){
while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+"?)(.*)',$line,$regs)){
$regs[1] = eregi_replace('(href[[:space:]]*=[[:space:]]*"?)([[:alnum:]:@/._-]+)("?)',"\\2",$regs[1]);
echo " $regs[1]
";
$line = $regs[2];
}
}
如何检查SQL语句的效率索引使用情况;
mySQL数据库Sql语句执行效率检查--Explain命令
一个文件体积大小为2G,内存只有1G,php分析数据如何读取大文件。
1.
2. $fp = fopen('test.txt','r');
3. $fs = filesize('test.txt');
4. $i = $n = NULL;
5. while($i <4)
6. {
7. fseek($fp,$fs--);
8. $n = fread($fp,1);
9. ($n=="
")?$i++:1;
10. echo $n;
11. }
12. fclose($fp);
13.
序列化和反序列化 serialize & unserialize 对象的字符串表示和构建对象
如何记录php程序错误到系统日志
1、使用指定的文件记录错误报告日志
使用指定的文件记录错误报告日志一定要确保将这个文件存放在文档根目录之外,以减少遭到***的可能。并且该文件一定要让PHP脚本的执行用户(Web服务器进程所有者)具有写权限。假设在Linux操作系统中,将/usr/local/目录下的error.log文件作为错误日志文件,并设置Web服务器进程用户具有写的权限。然后在PHP的配置文件中,将error_log指令的值设置为这个错误日志文件的绝对路径。
需要将php.ini中的配置指令做如下修改:
1. error_reporting = E_ALL ;将会向PHP报告发生的每个错误
2. display_errors = Off ;不显示满足上条 指令所定义规则的所有错误报告
3. log_errors = On ;决定日志语句记录的位置
4. log_errors_max_len = 1024 ;设置每个日志项的最大长度
5. error_log = /usr/local/error.log ;指定产生的 错误报告写入的日志文件位置
PHP的配置文件按上面的方式设置完成以后,并重新启动Web服务器。这样,在执行PHP的任何脚本文件时,所产生的所有错误报告都不会在浏览器中显示,而会记录在自己指定的错误日志/usr/local/error.log中。此外,不仅可以记录满足error_reporting所定义规则的所有错误,而且还可以使用PHP中的error_log()函数,送出一个用户自定义的错误信息。
该函数的原型如下所示:
1. bool error_log ( string message [, int message_type [, string destination [, string extra_headers]]] )
此函数会送出错误信息到Web服务器的错误日志文件、某个TCP服务器或到指定文件中。该函数执行成功则返回TRUE,失败则返回FALSE。第一个参数message 是必选项,即为要送出的错误信息。如果仅使用这一个参数,会按配置文件php.ini中所设置的位置处发送消息。第二个参数message_type为整数值:0表示送到操作系统的日志中;1则使用PHP的Mail()函数,发送信息到某E-mail处,第四个参数extra_headers亦会用到;2则将错误信息送到TCP 服务器中,此时第三个参数destination表示目的地IP及Port;3则将信息存到文件destination中。
如果以登入Oracle数据库出现问题的处理为例,该函数的使用如下所示:
1.
2. if(!Ora_Logon($username, $password)){
3. error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中
4. }
5. if(!($foo=allocate_new_foo()){
6. error_log("出现×××烦了!", 1, ". mydomain.com"); //发送到管理员邮箱中
7. }
8. error_log("搞砸了!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中
9. error_log("搞砸了!", 3, "/usr/local/errors.log"); //发送到指定的文件中
10. ?>
2、 错误信息记录到操作系统的日志里
错误信息记 录到操作系统的日志里错误信息记录到操作系统的日志里错误信息记录到操作系统的日志里 错误报告也可以被记录到操作系统日志里,但不同的操作系统之间的日志管理有点区别。在Linux上错误语句将送往syslog,而在Windows上错误将发送到事件日志里。如果你不熟悉syslog,起码要知道它是基于UNIX的日志工具,它提供了一个API来记录与系统和应用程序执行有关的消息。Windows事件日志实际上与UNIX的syslog相同,这些日志通常可以通过事件查看器来查看。如果希望将错误报告写到操作系统的日志里,可以在配置文件中将error_log指令的值设置为syslog。
具体需要在php.ini中修改的配置指令如下所示:
1. error_reporting = E_ALL ;将会向PHP报告发生的每个错误
2. display_errors = Off ;不显示 满足上条指令所定义规则的所有错误报告
3. log_errors = On ;决定日志语句记录的位置
4. log_errors_max_len = 1024 ;设置每个日志项的最大长度
5. error_log = syslog ;指定产生的错误报告写入操作系统的日志里
除了一般的错误输出之外,PHP还允许向系统syslog中发送定制的消息。虽然通过前面介绍的error_log()函数,也可以向syslog中发送定制的消息,但在PHP中为这个特性提供了需要一起使用的4个专用函数。
分别介绍如下:
define_syslog_variables()
在使用openlog()、syslog及closelog()三个函数之前必须先调用该函数。因为在调用该函数时,它会根据现在的系统环境为下面三个函数初使用化一些必需的常量。
openlog()
打开一个和当前系统中日志器的连接,为向系统插入日志消息做好准备。并将提供的第一个字符串参数插入到每个日志消息中,该函数还需要指定两个将在日志上下文使用的参数,可以参考官方文档使用。
syslog()
该函数向系统日志中发送一个定制消息。需要两个必选参数,第一个参数通过指定一个常量定制消息的优先级。例如LOG_WARNING表示一般的警告,LOG_EMERG表示严重地可以预示着系统崩溃的问题,一些其他的表示严重程度的常量可以参考官方文档使用。第二个参数则是向系统日志中发送的定制消息,需要提供一个消息字符串,也可以是PHP引擎在运行时提供的错误字符串。
closelog()
该函数在向系统日志中发送完成定制消息以后调用,关闭由openlog()函数打开的日志连接。
如果在配置文件中,已经开启向syslog发送定制消息的指令,就可以使用前面介绍的四个函数发送一个警告消息到系统日志中,并通过系统中的syslog解析工具,查看和分析由PHP程序发送的定制消息,如下所示:
1.
2. define_syslog_variables();
3. openlog("PHP5", LOG_PID , LOG_USER);
4. syslog(LOG_WARNING, "警告报告向syslog中发送的演示, 警告时间:".date("Y/m/d H:i:s"));
5. closelog();
6. ?>
以Windows系统为例,通过右击"我的电脑"选择管理选项,然后到系统工具菜单中,选择事件查看器,再找到应用程序选项,就可以看到我们自己定制的警告消息了。上面这段代码将在系统的syslog文件中,生成类似下面的一条信息,是事件的一部分:
1. PHP5[3084], 警告报告向syslog中发送的演示, 警告时间:2009/03/26 04:09:11.
使用指定的文件还是使用syslog记录错误日志,取决于你所在的Web服务器环境。如果你可以控制Web服务器,使用syslog是最理想的,因为你能利用syslog的解析工具来查看和分析日志。但如果你的网站在共享服务器的虚拟主机中运行,就只有使用单独的文本文件记录错误日志了。
Php的魔术方式有哪些,在什么情况下被自动调用
以下为总结的在使用类时可用的魔术方法,魔术方法会在某种待定情况下被自动调用,但前提是该方法被定义。有些方法不一定要定义在类中,还可以写在程序中作为一个函数。
__construct() 构造函数,创建对象时自动调用
__destruct() 析构函数,不需要创建
__clone() 克隆函数,调用clone方法时自动调用
__set() 当程序试图写入一个不存在或不可见的成员变量时自动调用。该函数在类中定义时必须有两个参数:变量称和变量值 。
__get() 当程序调用一个未定义或不可见的成员变量时自动调用__get()来读取变量值。定义时必有有一个参数:变量名
__call() 当程度试图调用不存在或不可见的成员方法时,自动调用__call()来存储方法名及其参数。该方法包含两个参数:方法名和方法参数。其中方法参数以数组形式存在。
__sleep() 使用serialize()实现序列化对象时,先执行该方法,清除对象并返回一个该对象中所有变量的数组。
__wakeup() 使用unserialize()还原一个被序列化的对象时,先执行该方法,恢复在序列化中可能丢失的数据库连接及相关工作
__toString() 当使用echo或print输出对象时,将对象转化为字符串
__autoload() 调用未被实例化的类时,自动调用,在指定路径下查找和该类名称相同的文件。
Arrayaccess 提供像访问数组一样访问对象的能力的接口
• ArrayAccess::offsetExists — 检查一个偏移位置是否存在
• ArrayAccess::offsetGet — 获取一个偏移位置的值
• ArrayAccess::offsetSet — 设置一个偏移位置的值
• ArrayAccess::offsetUnset — 复位一个偏移位置的值
SQL注入最有效的防御方式
如何查看某个SQL的执行计划
Myisam 与 innodb 存储引擎有何区别 使用哪种更好用于bbs,cms
Innodb 事务安全 具有原子性 bbs myisam 适合大量数据select cms
http状态码 1xxx 临时响应
200 success
304 not modify
403 not authority
404 request page not found!
405 页面被禁用
500 服务器内部错误
GZIP 压缩传输 是浏览器和服务器间压缩传输协议
同一个IP 使用手机和电脑显示不同页面
Php实现二分查找,顺序查找,冒泡排序,快排,二维数组排序算法
时间顺序
第一步 自我介绍
Answer: 大学学了什么,大学做了什么学生活动,大学参加了什么项目实践,工作内容
Question1:为什么换工作,工作内容是什么?为什么选择php
Answer:大四时候比较喜欢web和移动开发,在现在的岗位上感觉越来越脱离这方面,希望掌握这方面知识,从以往接触过的技术来看,觉着php更易用,功能同样也很强大,开源宽展功能更强大
Question2:对于php掌握到什么程度
有过两个项目经验,学校网站 CI &MVC理解
QUESTION3:缓存技术 一个用户缓存如何与数据库保持同步,当数据库更新时采用什么手段更新缓存
Answer: 每次数据库更新即更新缓存,定时轮询更新
QUESTION4:NGINX MyISAM
ANSWER: Nginx 其特点是占有内存少,并发能力强,C实现可以供php等调用
事务处理上方面:
类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持
InnoDB提供事务支持事务,外部键等高级数据库功能
SELECT UPDATE,INSERT,Delete操作
如果执行大量的SELECT,MyISAM是更好的选择
1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表
2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
3.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用
QUESTION5: char和varchar 索引用哪个?为什么?
选择char还是选择varchar的建议
1.适宜于char的情况:
a. 列中的各行数据长度基本一致,长度变化不超过50字节;
b. 数据变更频繁,数据检索的需求较少。
c. 列的长度不会变化,修改char类型列的宽度的代价比较大。
d. 列中不会出现大量的NULL值。
e. 列上不需要建立过多的索引,过多的索引对char列的数据变更影响较大。
2.适宜于varchar的情况;
a. 列中的各行数据的长度差异比较大。
b. 列中数据的更新非常少,但查询非常频繁。
c. 列中经常没有数据,为NULL值或为空值
QUESTION 6: 数据库操作
ANSWER:
QUESTION 7: PHP ARRAY & STRING 函数
ANSWER:
QUESTION8: 给定两个数组$arr1 & $arr2 求出起交集$arr3 & 并集$arr4
Answer: array_merge() array_intersect()
QUESTION9:约瑟夫环
Answer:递归
QUESTION10:画出学生课程数据表之间的关系,类图或者ER图
ANSWER:
QUESTION11:求两个数M,N的最大公约数 ——辗转相除相减
ANSWER: 递归
int aaa(int max,int min)
{
int i=max-min;
if(i>min) aaa(i,min);
if(i if(i==min) return i; } Private Sub command1_click() Dim m As Integer, n As Integer Dim a As Integer, b As Integer Dim r As Integer m = InputBox("输入m") n = InputBox("输入n") a = m b = n Do r = Abs(m - n) m = n n = r Loop While m <> n Print a; "和"; b; "最大公约数是"; r Print a; "和"; b; "最小公倍数是"; a * b / r End Sub 假设m是大的,n是小的。 1、判断m能否被n整除,如果能,则最大公约数就是n。如果不能则进行下一步骤。 2、k=m-n。比较n和k,假设n大,k小。m=n; n=k; 重复第1步骤。直到m能被n整除为止。 编程: int big_divisor(int m, int n) { int min,max,k=m; do { max=MAX(k,n); min=MIN(k,n); m=max; n=min; k=m%n; }while(k!=0) return n; } QUESTION12:数组A,B B中元素全部在A中出现,求A中不在B中出现的元素,考虑时间效率 ANSWER: hash表 将B中数据做标志 )(a+b——时间的算法 QUESTION13:多人过桥最短时间问题 ANSWER:保证传递物品的人为最优时间 QUESTION14:PRIMARY KEY UNIQUE KEY FOREIGN KEY 和普通索引之间的关系, ANSWER: 一、对于关系R,使用primary key或者unique声明某组属性S为键的效果是:R的任意两个元组不能在S的所有属性上具有完全相同的值,除非其中有一个是NULL值。任何违反该规则的插入或更新操作,都会使DBMS拒绝该操作并引起异常。 Primary key 与Unique Key都是唯一性约束。但二者有很大的区别: 1、Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而UNIQUE KEY 对列没有此要求。 2、一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY。 创建方法一: create table moviestar( name char(30) primary key, address varchar(255), gender char(1), birthdate date ); 方法二: create table moviestar( name char(30), address varchar(255), gender char(1), birthdate date, primary key (name) ); 同样可以用unique替换primary key。 二、外键约束(foreign-key constraint),它是指一个关系中的一个属性或一组值也必须在另一个关系的一个或一组属性的值中出现。在SQL中可以将关系的一个属性或属性组声明为外键(foreign key),该外键引用另一个关系(也可以是同一个关系)的属性(组)。外键声明隐含着如下两层意思: 1、被引用的另一个关系的属性在它所在的有关系中,必须被声明为unique或primary key。否则,不能做外键声明。 2、在第一个关系中出现的外键值,也必须在被引用关系的某个元组的属性中出现。 对于主键,有两种方法声明外键: a)如果外键是单个属性,则可以在此属性的名字和类型之后,声明基“引用”某个表的某个属性(被引用的属性必须有主键或唯一性声明)。声明的格式如下: referencess <表名> <属性名> b)另一种方法是,可以在create table语句的属性列表上加一个或多个声明,来说明一组属性是一个外键。然后给出外键引用的表和属性(这些属性必须是键)。声明的格式为: foreign key (<属性名列表>) reference <表名> (<属性名列表>) QUESTION15:5亿行记录,如何返回访问最多的IP,访问最多的前100个IP ANSWER: 索引 QUESTION16:汉字140个,与140字母存储空间的差距为多少倍 ANSWER:10 QUESTION17:SESSION实现机制 ANSWER: 最近想设计思考一种服务器的登录管理机制,想起这个,就看了看,也许能够得到某些启发。 http协议是一种无状态的协议,服务器本身并不能区分出每个会话来。不过各种网页编程语言想asp.net php java等都是实现了自己的一套session管理机制的。我搜索了一下网上资料,总结一下看到的原理说明,大概有以下几点: 1. 服务器需要在 客户端与服务器间不停的传递session id的。会话状态的维护就是要靠增加这个来做到的吧,把http没有的功能扩展了一下。 传递保存的办法有 cookie 或者get 方法参数,隐藏form的属性,http协议的头部 等各种各样的办法。具体可以参考网上文档。 2. Session id的生成。 服务器需要一个很好的办法来区分不同的客户端的会话,所以也要为每个客户端生成一个不同session id了,避免别人伪造等。 根据网上文档 php实现大概的生成方法是: hash_func = md5 / sha1 #可由php.ini配置 PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器) 3. session在服务器端的保存功能。 各个语言平台里面都允许为session保存大量的数据的吧。保存的位置或者说办法也有很多 (1) 保存平台实现的内置管理器 (2) 保存于数据库 。 这个就可以在不同的机器上共享了。 (3) 扩展实现,保存于memcached等高性能服务里。 比如某牛人为tomcat实现的memcached session保存机制 “Use MemCacheStore in Tomcat” http://research-and-destroy.de/blog/2008/10/10/use-memcachestore-in-tomcat-for-storing-session-in-memcached-server/ 这种应该性能就非常好了,而且session可以在集群系统不同机器上面共享访问了。 4. session id 应该是可以被监听到,然后伪造***的。 网上截获你的session id,然后就可以以你的身份访问网站了,很危险啊! 还是用https好点啊,如果安全要求比较高的话。 QUESTION18:DOM,js实现表单校验函数与HTML通过getelementbyid()来实现 ANSWER: QUESTION19:索引采用B+树实现,简述B+树的原理 ANSWER: QUESTION20:CI的优缺点以及与其他框架的比较 ANSWER: 这个其实大多数框架都差不多 QUESTION21:模版及其特点 ANSWER: SMARTY 理解php与页面分离的原理本质 QUESTION22:isset() UNSET() EMPTY()之间的关系和作用 ANSWER: PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在则返回 FALSE 若变量存在且其值为NULL,也返回 FALSE 若变量存在且值不为NULL,则返回 TURE 同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE 版本:PHP 3, PHP 4, PHP 5 更多说明: 使用 unset() 释放变量之后,它将不再是 isset()。 PHP函数isset()只能用于变量,传递任何其它参数都将造成解析错误。 检测常量是否已设置可使用 defined() 函数。 PHP的empty()函数 判断值为否为空 格式:bool empty ( mixed var ) 功能:检查一个变量是否为空 返回值: 若变量不存在则返回 TRUE 若变量存在且其值为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE 若变量存在且值不为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 FALSE 版本:PHP 3, PHP 4, PHP 5 更多说明: empty()的返回值=!(boolean) var,但不会因为变量未定义而产生警告信息。参见转换为布尔值获取更多信息。 empty() 只能用于变量,传递任何其它参数都将造成Paser error而终止运行。 检测常量是否已设置可使用 defined() 函数。 QUESTION23:php如何控制错误日志的输出 ANSWER: //禁用错误报告 error_reporting(0); //报告运行时错误 error_reporting(E_ERROR | E_WARNING | E_PARSE); //报告所有错误 error_reporting(E_ALL); 控制错误级别并返回当前级别 一 HP关闭脚本错误提示的方法: 打开PHP安装目录下的php.ini文件 找到display_errors = On 修改为 display_errors = off 注意:如果你已经把PHP.ini文件复制到windows目录下,那么必须同时把 c:\windows/php.ini里的display_errors = On 修改为display_errors = off 二 让脚本错误提示输出为日志文件的方法: 打开PHP安装目录下的php.ini文件 找到log_errors = off 修改为 log_errors = on 找到error_log = filename 修改为 error_log="D:\PHPerrlog\php_error.log" (这里的目录和文件名D:\PHPerrlog\php_error.log随便你取什么) 注意:如果你已经把PHP.ini文件复制到windows目录下,那么必须同时把 c:\windows/php.ini文件. 此外php_error.log至少要有USER的修改和写权限,否则无法输出错误日志. QUESTION24:正则 ANSWER: QUESTION25:对PHP缓存、DOM、HTML5、网站重构的了解 ANSWER: 把"未采用CSS,大量使用HTML进行定位、布局,或者虽然已经采用CSS,但是未遵循HTML结构化标准的站点"变成"让标记回归标记的原本意义。通过在HTML文档中使用结构化的标记以及用CSS控制页面表现,使页面的实际内容与它们呈现的格式相分离的站点。"的过程就是网站重构(Website Reconstruction) 以下两种情况,会导致PHP运行程序代码效率低下: PHP编译缓存 1、即使PHP代码文件没有发生改变,也会被PHP重新编译。 2、如有引用文件,PHP也要花费时间重新编译这些被引用的文件。 因此,需要PHP编译缓存工具对PHP程序的编译结果做缓存处理。这样,PHP程序只要编译一次,就不要重新再做无意义的编译了。 PHP数据缓存 DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档的常用方法。 Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强 Question 26:如何防止其他程序盗链,如何抓取其他网站特定内容,如何判断一个请求是非法/机器行为,而不是用户正常请求,爬虫 QUESTION30:php中UTF8编码汉字字节 ANSWER:3