用流量下载看一个三分钟的视频要多少流量,大概需要花费多少流量?清晰度是360P

大家都在搜
自建视频网站服务器需要多大的性能?
假设我需要建立一个视频网站(其实视频只是该网站提供的服务之一,不过比重较高),同时在线观看人数为100人,每个视频小于10分钟,清晰度大致在360P徘徊,每天更新视频数量大概10~20个。 如果以上假设成立,我需要一台怎样性能的服务器,多大的网络带宽,需要提供多少流量,资金支出要多少? P.S. 我希望所以视频源都存储在我的服务器上,而不是优酷这些视频网站上(一来有广告影响体验,二来源挂在别处也不方便管理,三来我不&
xinqing201005的答复:
1、做网站这件事从技术角度来说没有任何瓶颈无非就是你的成本预算问题而已,如今的模板网站非常成熟。&br/&&br/& 2、这里边最为核心的是整体运营体系和运营思路,没有强大的流量作为支撑很难产生收益转化,对于独立的商城在当下的环境下是没有生存空间的,因为消费者的购物习惯早已经养成了,除非是极具差异化的产品和服务这类产品和服务实在主流B2C平台和垂直电商平台没有的,并且产品和服务还有很大的市场空间。&br/&&br/& 3、阿里云的稳定性和安全性都是毋庸置疑的,但是如果创业型并且还要做商城一类的项目很显然后续费用你是承受不起的。实时音视频 - 视频通话sdk - 网易云信
视频服务增值服务全面的音视频通话能力一对一聊天一对多连麦多人群组通话低延时不卡顿,弱网通话也流畅高并发+低延时支持海量并发,客户实际延时低至200ms内抗丢包+抗抖动定制化的FEC/ Jitter Buffer/ QoS策略,70%丢包仍可正常通话全球节点+智能选路策略全球多点覆盖,保障美洲、欧洲、亚洲等海外用户实时高清通话更好的音画品质,更少的流量消耗<div class="u-title" data-v-4fcP高清画质
多种分辨率自由切换
支持720P/480P /360P多画质切换,音视频自由切换
独家视频画面增强算法,全面提升清晰度
CD级别音质 真正的高清通话
48kHz音频采集,全频道音质,业界最高标准
语音智能降噪,自动增益,回声消除,打造无损音质
丰富功能,适配多样化场景美颜美颜
基于深度学习的智能美颜
炫酷立体的动态贴纸
精确识别多种手势动作
支持aac、mp3、mp4、 wav等多种音频文件播放
互动白板互动白板
支持多人白板操作,支持PDF、PPT、PPTX等多种格式转码,方便用户互动
支持各种第三方变声算法,互动更有趣
旁路直播旁路直播
支持旁路对接直播流,将音视频内容进行直播
服务端录制服务端录制
支持一对一、多人群组等多种场景录制,支持多人群组中单个或全部参与者通话内容录制
iOS安卓PCWebLinuxMac30分钟接入 全终端覆盖音视频通话每<strong data-v-4fc分钟低至<strong data-v-4fc元这是一部史上最全的面试题库,根据本人多年面试经验汇总,面试多了,问来问去总逃不出这些问题.当然这是php的基础部分,我发现越是多年的phper,基础部分遗忘的就越多,经验越丰富,针对的问题不是零碎的语法点,而是对于实际问题的解决.对于实际问题的解决,每个公司的侧重点不一样,这里就不详谈.
看完这些题,妈妈再也不用担心我的面试了
冲击月薪18k(税后),你应该具备哪些技能?
1.熟悉设计模式,单例,工厂,策略,观察者能根据实际场景写出代码
2.熟悉框架tp,yii,larval,symfony,;至少读过其中之一的源码
3.熟悉memcache,redis的使用,特别是redis,熟悉redis的主从配置;熟悉mongodb
4.熟练掌握mysql,视图,触发器,sql语句优化,表设计,sql注入,锁,事物,并发,分表,mysql性能调优,mysql主从和集群搭建
5.熟悉lamp,lnmp安装配置及调优,反向代理,服务器集群,性能优化,高可用
7.node.js及js的几个前端框架jquery,vue.js,angular.js,rect.js
8.网站安全,xss,csrf,ddos攻击
10.图片压缩
11.python基础
12.了解php扩展开发
13.http协议,socket编程
14.php swoole编程
1.apache和nginx的区别
最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向
(1) nginx相对于apache的优点:
轻量级,同样起web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各种高性能模块出品迅速啊
(2)apache 相对于nginx 的优点:
rewrite ,比nginx 的rewrite 强大
模块超多,基本想到的都可以找到
少bug ,nginx 的bug 相对较多 超稳定
2. php各框架优缺点:
  1. 配置简单,全部的配置使用PHP脚本来配置,执行效率高;具有基本的路由功能,能够进行一定程度的路由;具有初步的Layout功能,能够制作一定程度的界面外观;数据库层封装的不错,具有基本的MVC功能
  2. 快速简洁,代码不多,执行性能高,PHP框架简单,容易上手,学习成本低,文档详细;自带了很多简单好用的library,框架适合小型应用
  缺点:
  1. 把Model层简单的理解为数据库操作
  2. PHP框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要
  评价:
  总体来说,拿CodeIgniter来完成简单快速的应用还是值得,同时能够构造一定程度的layout,便于模板的复用,数据操作层来说封装的不错,并且CodeIgniter没有使用很多太复杂的设计模式,执行性能和代码可读性上都不错。至于附加的 library 也还不错,简洁高效。
1. CakePHP是最类似于RoR的PHP框架,包括设计方式,数据库操作的Active Record方式;设计层面很优雅,没有自带多余的 library,所有的功能都是纯粹的框架,执行效率还不错;数据库层的 hasOne, hasMany 功能很强大,对于复杂业务处理比较合适;路由功能,配置功能还不错;自动构建脚手架(scaffold)很强大;适合中型应用;基本实现过了MVC每一层;具有自动操作命令行脚本功能;
  2. 文档比较全,在国内推广的比较成功,大部分都知道CakePHP,学习成本中等
  缺点:
  1. CakePHP非常严重的问题是把Model理解为数据库层操作,严重影响了除了数据库之外的操作能力
  2. CakePHP的cache功能略显薄弱,配置功能稍嫌弱;CakePHP不适合大型应用,只适合中型应用,小型应用来说略微的学习成本高了点
  评价:
  总体来说CakePHP框架代表了PHP框架很重要的一个时代和代表,并且目前发挥着很重要的作用,不少自己写的框架都模仿了CakePHP的方式,是个里程碑式的产品;CakePHP透露着RoR的敏捷开发方式和把数据库操作认为是唯一Model的设计思想,作为开发快速应用和原型是绝好的工具;同样,用来做Web2.0网站的开发框架,也是值得选择的。
  1. 官方出品,自带了非常多的 library,框架本身使用了很多设计模式来编写,架构上很优雅,执行效率中等;MVC设计中,比较简洁,具有路由功能,配置文件比较强大(能够处理XML和php INI),各种 library 很强大,是所有PHP框架中各种功能最全面的,包括它不仅是一个PHP框架,更是一个大类库(取代PEAR),这是它的主要特色;能够直观的支持除数据库操作之外的Model层(比 CodeIgniter 和 CakePHP 强),并且能够很轻易的使用Loader功能加载其他新增加的Class;Cache功能很强大,从前端Cache到后端Cache都支持,后端Cache支持Memcache、APC、SQLite、文件等等方式;数据库操作功能很强大,支持各种驱动(适配器)
  2. 文档很全,在国内社区很成熟,并且目前不少Web 2.0网站在使用,学习成本中等
  缺点:
  1. MVC功能完成比较弱,View层简单实现(跟没实现一样),无法很强大的控制前端页面
  2. 没有自动化脚本,创建一个应用,包括入口文件,全部必须自己手工构建,入门成本高
  3. Zend Framework 作为一个中型应用框架问题不大,也能够勉强作为大型应用的PHP框架,但是作为一个很成熟的大型PHP框架来说,还需要一些努力
  评价:
  作为官方出品的框架,Zend Framework的野心是可以预见的,想把其他框架挤走,同时封装很多强大的类库,能够提供一站式的框架服务,并且他们的开发团队很强大,完全足够有能力开发很强大的产品出来,所以基本可以确定的是Zend Framework前途无量,如果花费更多的时间去完善框架。同样的,Zend Framework架构本身也是比较优雅的,说明Zend官方是有很多高手的,设计理念上比较先进,虽然有一些功能实现的不够完善,比如View层,自动化脚本等等,这些都有赖于未来的升级。总体来说Zend Framework是最值得期待的PHP框架,当然,你目前要投入你的项目中使用也是完全没问题的
1.完整实现了MVC三层,封装了所有东西,包括 $_POST,$_GET 数据,异常处理,调试功能,数据检测;包含强大的缓存功能,自动加载Class(这个功能很爽),强大的i18n国家化支持;具有很强大的view层操作,能够零碎的包含单个多个文件;非常强大的配置功能,使用yml配置能够控制所有框架和程序运行行为,强大到让人无语;能够很随意的定义各种自己的class,并且symfony能够自动加载(auto load)这些class,能够在程序中随意调用;包含强大的多层级项目和应用管理:Project --& Application --& Module --& Action,能够满足一个项目下多个应用的需要,并且每层可以定义自己的类库,配置文件,layout;非常强大的命令行操作功能,包括建立项目、建立应用、建立模块、刷新缓存等等;
  2. Symfony绝对是开发大型复杂项目的首选,因为使用了Symfony,将大大节约开发成本,并且多人协作的时候,不会出现问题,在Project级别定义好基础Class以后,任何模块都能够重用,大大复用代码
  缺点:
  1. 数据库操作model采用了重量级的propel和creole,不过在我测试的版本中已经把他们移到了addon里,可用可不用
  2. 缓存功能无法控制,每次开发调试总是缓存,需要执行 symfony cc, symfony rc 来清除和重建缓存;
  3. 效率不是很高,特别是解析模板和读取配置文件的过程,花费时间不少;
  4. 学习成本很高,并且国内没有成熟的社区和文档,连中文手册都没有,相应的要掌握所有功能,需要花费比较多的时间
  评价:
  Symfony绝对是企业级的PHP框架,唯一能够貌似能够跟Java领域哪些强悍框架抗衡的东西;强悍的东西,自然学习复杂,但是相应的对项目开发也比较有帮助,自然是推荐复杂的项目使用Symfony来处理,觉得是值得,后期的维护成本比较低,复用性很强。相应的如果使用Symfony的应该都是比较复杂的互联网项目,那么相应的就要考虑关于数据库分布的问题,那么就需要抛弃Symfony自带的数据库操作层,需要自己定义,当然了,Symfony支持随意的构造model层。
3. php运行的3种模式
三种运行方式:mod_php5、cgi、fast-cgi
(1. 通过HTTPServer内置的模块来实现,
例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持;
(2. 通过CGI来实现
这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器,另一方面就是不太安全,
该方式几乎很少使用了。
(3. 最新出现一种叫做FastCGI。
所谓FastCGI就是对CGI的改进。它一般采用C/S结构,一般脚本处理器会启动一个或者多个daemon进 程,每次HTTPServer遇到脚本的时候,直接交付给FastCGI的进程来执行,然后将得到的结果(通常为html)返回给浏览器。
该种方法的问题存在一个小问题是当遇到大流量的频繁请求的话,脚本处理器的daemon进程可能会超负荷从而变得很慢,甚至发生内存泄漏;
但是比较起Apache的内置模块的方式的优点是由于Server和脚本解析器完全分开各负其责,因此服务器不再臃肿,可以专心地进行静态文件响 应或者将动态脚本解析器的结果返回给用户客户端。
所以比较起Apache的内置模块方式,有时候性能要提高很多。
有人测试可能会达到 Apache+mod_php的5~10倍。
3.1. FastCGI常用模式:
lightppd+spawn-fcgi
nginx+PHP-FPM
4.memcache与redis的区别
Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
抛开这些,可以深入到Redis内部构造去观察更加本质的区别,理解Redis的设计。
在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。Redis只会缓存所有的 key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计 算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以 保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存 中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个 操作,直到子线程完成swap操作后才可以进行修改。
5.用户访问网站的基本流程
详见http://blog.csdn.net/yonggeit/article/details/
//1.当前时间格式化打印//date_timezone_set('PRC');//设置中国时区//date_timezone_set("Etc/GMT-8");// 比林威治标准时间快8小时,是我们的北京时间echo date('Y-m-d H:i:s');echo '&hr/&';//2.//字符串转数组:print_r(str_split("Hello Shanghai"));echo '&hr/&';//字符串截取:substr($str,1,10);mb_substr()和mb_strcut(),mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,一个utf8中文字符占三个字节echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');//输出:这样一来我的字echo '&hr/&';echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');//输出:这样一echo '&hr/&';//分隔成数组:print_r(explode(' ',"Hello Shanghai"));echo '&hr/&';//字符串替换:echo str_replace("world","Shanghai","Hello world!");echo '&hr/&';//正则替换echo preg_replace('/\s+/', '','foo
o');//剥离空白字符echo '&hr/&';//数组转字符串:print_r(implode(array('a'=&'aaa','b'=&'bbb')));echo '&hr/&';//3.字符串查找strpos,strrpos$str = '/web/a/b/index.html';
$index = strrpos($str,'/');//截取网址文件部分echo substr($str,$index+1);//包含索引位置到结尾部分echo basename($str);//取文件名echo '&hr/&';//截取网址路径部分echo substr($str,0,$index);echo dirname($str);//取路径名echo '&hr/&';//日期反转$date = '18/02/2016';echo preg_replace('/(\d+)\/(\d+)\/(\d+)/','$3/$2/$1',$date);echo '&hr/&';//写一个函数,尽可能高校的从一个url里提取文件扩展名$url = 'http://www.test.com.cn/abc/dsg/del.inc.php';
$path = pathinfo($url);//var_dump(parse_url($url));echo $path['extension'];// ["basename"]=& string(11) "del.inc.phpecho '&hr/&';//复杂情况$url1 = 'http://www.test.com.cn/abc/dsg/del.inc.php?id=6';
$arr = parse_url($url1);
$path1=$arr['path'];
$arr2 = pathinfo($path1);//print_r($arr2);echo $arr2['extension'];echo '&hr/&';
/** *一. 字符串函数join() implode() 的别名,返回由数组组成的字符串
strlen($str)
addslashes($str)在预定义字符前加/;预定义字符是:单引号(')双引号(")反斜杠(\)NULL,也可在php.ini中设置magic_quotes_gpc=onget_magic_quotes_gpc()检测字符串是否经过转义,
strpos() 函数用于检索字符串内指定的字符或文本。如果找到匹配,则会返回首个匹配的字符位置。如果未找到匹配,则将返回 FALSE。
strtolower()
//所有大写转小写;
strtoupper — 将字符串转化为大写
ucfirst — 将字符串的首字母转换为大写
把字符串的首字符转换为小写
ucwords — 将字符串中每个单词的首字母转换为大写
strstr($str,search,before_search)(别名strchr) — 默认返回$search以及之后的部分,若before_search为true则返回之前的部分。如果想要不区分大小写,请用 stristr()。
chop($str,$charlist)
删除$charlist指定的字符串,若charlist 参数为空,则移除以下字符:"\0" - NULL,"\t" - 制表符,"\n" - 换行,"\x0B" - 垂直制表符,"\r" - 回车," " - 空格。
chunk_split($str,length,end)
把字符串分割为一系列更小的部分,默认以默认是 \r\n,可通过end指定分隔符,length几位一分隔,默认是 76
localeconv()
返回本地数字及货币格式信息number_format()
以千位分组来格式化数字
ltrim($str,$charlist)
移除$charlist指定字符串若省略第二参数则移除"\0" - NULL,"\t" - 制表符,"\n" - 换行,"\x0B" - 垂直制表符,"\r" - 回车," " - 空格*//** *
二.数组函数
count() 的别名
current() 的别名
join()的别名,将数组分隔成字符串
array_reduce($arr,fun) 通过使用用户自定义函数,将数组转化为字符串。
array_rand($arr,n)随机取出数组的一个键
array_unshift($arr)向前插入数组元素,可以传入多个,返回插入的个数
array_push($arr)从尾部插入数组元素,返回插入个数
array_shift($arr)从前面弹出数组元素,从前面出栈,每次删除一个
array_pop($arr)从后面弹出数组元素,从后面出栈,每次删除一个
unset($arr[2]); 删除指定数组元素
array_flip($arr);交换数组的键和值
array_unique() 删除数组中的重复值
array_count_values()
用于统计数组中所有值出现的次数。
array_intersect()
比较数组,返回交集(只比较键值)。
array_intersect_assoc()
比较数组,返回交集(比较键名和键值)。
array_intersect_key()
比较数组,返回交集(只比较键名)
array_filter()用回调函数过滤数组中的元素。
array_reverse()
以相反的顺序返回数组。
array_search() 搜索数组中给定的值并返回键名。
array_combine($arr1,$arr2)将第一个数组的值作为第二个数组的键合并为一个数组array_merge_recursive() 函数把一个或多个数组合并为一个数组。该函数与 array_merge() 函数的区别在于处理两个或更多个数组元素有相同的键名时。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。
array_map()把数组中的每个值发送到用户自定义函数,返回新的值。
array_slice($arr,2)
去掉数组前2个元素,返回数组剩余的部分
$a=array("red","green","blue","yellow","brown");
print_r(array_slice($a,1,2));//Array ( [0] =& green [1] =& blue )
$a=array("red","green","blue","yellow","brown");
print_r(array_slice($a,-2,1));//Array ( [0] =& yellow )
$a1=array("a"=&"red","b"=&"green","c"=&"blue","d"=&"yellow");
$a2=array("a"=&"purple","b"=&"orange");
array_splice($a1,0,2,$a2);
print_r($a1);//Array ( [0] =& purple [1] =& orange [c] =& blue [d] =& yellow )
$a1=array("0"=&"red","1"=&"green");
$a2=array("0"=&"purple","1"=&"orange");
array_splice($a1,1,0,$a2);
print_r($a1);//Array ( [0] =& red [1] =& purple [2] =& orange [3] =& green )
array_product()
计算数组中所有值的乘积//数组排序
7.sort() - 以升序对数组排序
8.rsort() - 以降序对数组排序
9.asort() - 根据值,以升序对关联数组进行排序
10.ksort() - 根据键,以升序对关联数组进行排序
11.arsort() - 根据值,以降序对关联数组进行排序
12.krsort() - 根据键,以降序对关联数组进行排序
13.shuffle()
将数组打乱
预定义数组* __FILE__:当前文件在服务器的什么地址上面;
__LINE__:对应的行号;
__FUNCTION__:当前函数名;
__CLASS__:当前的类名;
__METHOD__:当前的方法;
PHP_OS: 当前操作系统的版本;
PHP_VERSION: 当前的PHP的版本;
超全局数组
$_SERVER['HTTP_REFERER'];
//上级来源
$_SERVER['HTTP_ACCEPT_LANGUAGE']; //字符集
$_SERVER['HTTP_HOST'];
//当前服务器的IP地址
$_SERVER['REMOTE_ADDR'];
//哪台主机访问,没有获取IP记录的,只有它.
$_SERVER["SERVER_ADMIN"];
//管理员邮箱
防止sql注入:
1.$SERVER['HTTP_REFERER']判断提交来源;
2.开启addslashes和magic_quotes_gpc *
3.使用预处理(PDO)*//** *
1.利用apache或nginx的rewrite重写功能基于来源做判断*
2.通过$SERVER['HTTP_REFERER'];判断*
$urlar=parse_url($_SESSION['HTTP_REFERER']);
if($_SERVER['HTTP_HOST']
$urlar["host"]
$urlar["host"]
"202.102.110.204"
$urlar["host"]
"http://blog.163.com/fantasy_lxh/")
header("location:
login.php");
用php写出一个安全的用户登录系统需要注意哪些方面*
1.加验证码*
2.三次失败锁定*
3.密码不能ctrl+V,html加入oncopy="" onpaste="" oncut="" *
4.密码使用小键盘
5.动态口令卡
//结果为空
echo true;//1
echo '&hr/&';echo ord('a');//转化为ASCll码
echo '&hr/&';
echo chr(97);//将ascll码转化为string
echo '&hr/&';
$arr=array('a'=&'aaaaa','b'=&'bbbbb');echo "A is {$arr['a']}";//对于双引号内的数组引用如果下标加了引号则该变量一定要加{},否则会报错
//静态变量的值每次执行后会保存在内存中,不会自动销毁
echo '&hr/&';//heredoc技术
//session.use_trans_sid=1;(当客户端禁用cookie时,浏览器自动带上session_id,其他页面根据session_id取值)
echo '&hr/&';
/** * 把字符串转换成数组可使用函数有str_split()(每个字符作为一个数组元素)、explode()//每个单词作为一个数组元素,preg_split()
* 把数组转换在字符串implode(),join(),array_reduce($arr,fun)
通过使用用户自定义函数,将数组转化为字符串。
写一个函数将open_door转化成OpenDoor
function _Ucwords($str){return str_replace(' ','',ucwords(str_replace('_',' ',$str)));
return strtr(ucwords(str_replace('_',' ',$str)),array(' '=&''));
}echo _Ucwords('open_door');echo '&hr/&';//或者function Ucword($str){
$arr = explode('_',$str);foreach($arr as $k=&$v){
$arr[$k]=ucfirst($v);
}return implode($arr);
}echo Ucword('get_by_id');echo '&hr/&';//将转化成12,345,657,678$number='';number_format($number);//或者function my_number_format($number){
$num=strrev($number);//反转字符串$arr=str_split($num,3);
$num=strrev(implode(',',$arr));//也可以写作$num=strrev(join(',',$arr));join()是implode的别名}echo '&hr/&';//将 HELLO WORLD转化为Hello Word$bar = '!HELLO WORLD';
$bar = ucwords(strtolower($bar));echo $echo '&hr/&';echo '&hr/&';echo '&hr/&';
/** * 文件目录操作*///通过 PHP 函数的方式对目录进行遍历,写出程序
function dirList($path){
$arr =scandir($path);foreach($arr as $file){if($file !='.' && $file !='..'){
$pathNext =$path.'/'.$echo $pathNif(is_dir($pathNext)){
dirList($pathNext);
}else{echo '&p&'.$pathNext.'&/p&';
$path='D://WWW';
dirList($path);echo '&hr/&';
$a=array("red","green","blue","yellow","brown");
$random_keys=array_rand($a,3); //随机取n个键
var_dump($random_keys);var_dump($a[$random_keys[1]]);echo '&hr/&';
$str = "Shanghai";echo chunk_split($str,2,'-');//Sh-an-gh-ai-
echo '&hr/&';
$str = 'sdgdg"sdsds"\//gh.ghnullNULL\'\'';echo addslashes($str);echo($str);
echo '&hr/&';
$str='i am da niu and you?';echo strstr($str,'am');//am da niu and you?
echo '&hr/&';
//有 A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中 A.id 与 B.id 关联, 现在要求写一条SQL 语句,将 B 中 age&50 的记录的 c1、c2 更新到 A 表中统一记录中的 c1、c2 字段中。
$sql="update A,B set A.c1=B.c1,A.c2=B.c2 where A.id=B.id and B.age&50";
1.从login表中选出name字段包含admin字段的前十条结果* select * from login where name like '%admin%' limit 10
*2通配符:* 我们使用like和not like加上一个带通配符的字符串就可以了。共有两个通配符”_”(单个字符)和”&”(多个字符)select concat(first_name,' ‘,last_name) as name,where last_name like ‘W%'; //找到以W或w开头的人where last_name like ‘%W%'; //找到名字里面W或w开头的人*
3.使用扩展正则*SELECT * FROM `sunup_user` where username REGEXP 'test[0-9]+';
“.”匹配任何单个的字符;
一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]” 匹配任何小写字母,而“[0-9]”匹配任何数字;
“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:为了找出以“b”开头的名字,使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”:mysql& SELECT * FROM pet WHERE name REGEXP "^[bB]"; *
4.变量:* 变量的命名规格是:@name, 赋值语法是 @name:=value ( pascal?) 使用起来也简单:select @birth:=birth from presidentwhere last_name ='adsltiger'; //执行完成后我们就就会有一个@birth变量可用用一下试试:select concat(first_namem,' ‘,last_name) as name from presidentwhere birth&@ //看看那些人比我大!
mysql重启后索引会回收
1.对象间的赋值默认是引用传值,指向同一个内存空间;只有指向同一内存地址的两个对象才相等;
2.只要在实例化后在类外改变了属性和方法,不管在类内还是类外调用都是改变后的值;
2.当构造方法__construct()有参数时,在实例化时在对象里传参;
3.__destruct()释放程序资源,(unset操作,关闭文件,数据库)当类执行完成后自动运行;析构函数不能传参;当unset和给对象重新赋值时都会触发;当程序运行完后php会自动销毁变量和对象,释放内存。故实例了几个对象最后就会执行几次__destruct();子类会继承父类的构造方法,若子类也有定义,则会被覆盖;
4.__get($param);当对象调用不存在的属性时自动调用;作用:实现私有属性在类外访问(在__get()内部给返回值);
5.__set($param,$val);给私有属性赋值时不会报错,但调用赋值的属性时得用__get();作用:对私有属性赋值;
6.PHP不允许调用不存在的属性但允许给类中不存在的属性赋值,而不会报错
7.__isset(isset调用的属性名);当给一个属性isset()判断时自动调用此方法;
8.__unset(属性名)当给一个属性使用unset时,自动调用;
9.__call(不存在的方法名,调用不存在的方法时的所有参数(array)):调用不存在的方法是执行;作用:实现私有方法的外部调用;call_user_func_array(array(),)
10.__toString();将对象可以以字符串方式输出;
11.__autoload($classname);当实例化一个不存在的类时,程序自动调用该方法;作用:避免类的重复加载;
12.静态属性static,属于整个类,而非某个对象。访问方式 类名::$属性名,还可以用parent:$属性名;子类继承过来的属性和方法用$this和$parent都可以访问,但$this优先从子类开始寻找。还可用self:$属性名; 静态属性不能重写;
13.(1)静态属性存在于类空间,普通属性存在于每个对象中。类声明完毕即存在,不依赖于对象,不实例化也可以访问。不依赖于对象(内存中只有一份)。静态方法中不能含有非静态属性;
(2)还可以不用实例化。直接使用类名::方法名(属性名)来调用;
(3)在类中静态方法访问静态属性,使用类名::静态属性名即可调用类中的静态属性。
(4)在当前类中如果要访问静态成员可以使用self::关键字进行访问。
14.类常量定义 const name="liyong";访问方式:类名::只能在类的内部访问;const不能在条件语句中定义常量;const采用一个普通的常量名称,define可以采用表达式作为名称。const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。
15.对象直接相互赋值是引用传递,而想要值传递用clon()方法;在类中定义__coln魔术方法;
16.抽象类不能被实例化,用来规范开发者定义方法的名称;抽象方法不能有方法体;抽象方法必须要在子类中实现(重写/覆盖);抽象类中可以存在非抽象方法,但必须有抽象方法;
17.接口只能声明抽象类和常量;同样不能实例化,只能实现implements,不叫继承;子类必须实现接口的全部方法;一个类可以实现多个接口;作用:用来规范开发,命名规范接口设计原则:尽量避免臃肿,一个接口完成一件事,把共有的常量方法单独封成接口;
18.对象串行化serialize()//对象转字符串
19.设计模式:单件模式(单例模式Singleton),工厂方法模式(Factory Method),抽象工厂模式(Factory Abstract) 适配器模式(),观察者模式,命令模式,策略模式
20.对象的回收机制:**//** * 接口和抽象类的区别:* 1.抽象类可以有抽象的方法,而接口中只能有抽象方法
2.一个类可以继承多个接口但只能继承一个抽象类* 接口通过implements实现,抽象类通过extends继承*/
class Human{
public $name='张三';public $gender=NULL;public function __destruct() {echo '发了';
$a= new Human();
$b=$c=$d=$a;echo $a-&name,'&br /&';echo $b-&name,'&br /&';
$b-&name='李四';echo $a-&name,'&br /&';echo $b-&name,'&br /&';//对象的相互赋值是引用传递,即$a,$b,$c,$d都指向同一个对象所以都会变成李四;unset($a);//注意这里的unset对对象是无效的,因为还有$b,$c,$d指向这块内存空间,只有当他们全部unset后才会触发析构函数;//unset($b);unset($c);unset($d);echo '&hr /&';//-----------------------兄弟连面向对象-------------------------------/**
数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案?
1) 查询速度慢
,避免全盘扫描,因为全盘扫描会导致大量磁盘 I/O 操作 用 sphinx 来解决
2) 读写过于频繁 读写分离来做
3) 设置主从,并做好冗余备份
4) 数据库压力过大 采用分布式数据库负载均衡来解决
5) memcache 缓存层
6) 链接数据库使用 PDO,或者 mysqli 预处理缓存字段
7) 索引优化
面向对象基础
声明:[修饰类的关键字]class 类名{ * 成员(成员属性:变量;成员方法:函数) } *命名:类名.class.php,方便自动加载*变量和函数名驼峰式命名,类名首字母大写;*$对象引用=new 类名; *变量成员的调用不用$
*构造方法就是对象创建完成后第一个调用的方法;*php4中和类名相同的就是构造方法; *php5中,构造方法使用魔术方法__construct();
*每个魔术方法都在不同时刻为了完成某一个功能自动调用的方法*__destruct();用于关闭资源,做一些清理工作。*例如类内调用的__get(),__set(),__isset(),__unset(),__clone(),__call(),__sleep(),__weakup(),__toString() *类外调用,唯一一个__autoload();
就是把对象的成员(属性和方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节*封装可提高安全性*封装使用private(只能在对象内部用$this访问
1.方法的封装主要用于内部的一个主方法借助其他若干小方法工作,这些小方法没有单独存在的意义,就可以用private把这些小方法封装起来
2.属性的封装,只要变量在多个方法中都用到就将该变量声明为成员属性。封装属性为了不让属性值在实例化后随意读取和更改。类内访问不受影响。封装后可以通过调用共有方法传参来改值,可以在public方法中限制值的范围。可通过方法的return来读取私有属性。
3.如果要设置和取值的属性很多可用魔术方法__set和__get来操作。
4__get获取成员属性的值时自动调用,必须有一个参数__get($proname),为传进来的属性名,实例化后获取哪个私有属性就会把哪个私有属性传进来,__get方法内使用$this-&$来获取(ps:$proname只是一个参数,并不是成员属性,故调用时加上$),经过方法就可以判断传进来的成员属性是哪一个,从而写程序来控制。
5__set为成员属性设置值时自动调用,有两个参数__set($proName,$proValue),__set方法内使用$this-&$proName=$proV来设置值。
6__isset($proName)查看私有属性是否存在时自动调用,方法内加上 return isset($this-&$proName),禁止判断是否设置可通过判断传进来的属性名即可
7__unset($proName)直接删除对象中私有属性时调用,方法中加上unset($this-&$proName);
1.父类:基类;
子类:派生类*开放性,可扩充性,增加代码的重用性,提高可维护性*如果两个或两个以上类中有公用的部分,那么公用的部分就可以作为父类;*继承就是在父类的基础上“扩展”父类的功能;*C++多继承,同一个类可以有多个父类;PHP属于单继承,同一个类只能继承一个父类;但一个类都可以有多个子类;
2.子类声明用extends关键字,格式:class 子类名 extends 父类名{},子类不能继承私有方法
3.成员属性一般先声明,加关键字private,protected,public再用__construct设置值,这样即使是私有属性子类也可以用; *protected类内和子类可用,类外不能用;
4.子类重载父类的方法;重载即方法名相同但参数类型不同。强类型语言可通过指定参数类型实现。PHP中子类方法名与父类相同则会覆盖父类同名方法,还可以扩展此方法;*在覆盖父类方法的子类中调用父类方法使用父类名::方法名();即对象-&成员;类::成员;
5.借助父类初始化:parent:: __construct(属性1,属性2,属性3,........);
6.注意:子类只能放大权限不能缩小权限,例如父类为public子类必须为public,父类为protected,则子类可为protected或public。*
多态是面向对象的三大特性之一*“多态”是面向对象设计的重要特性,它展现了动态绑定(dynamic binding)的功能,也称为“同名异式”(Polymorphism)。多态的功能可让软件在开发和维护时,达到充分的延伸性(extension)。事实上,多态最直接的定义就是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同的反应效果。例如:interface Test{fuanction aaa();fuanction bbb();}class one implements Test{function aaa(){echo "aaaaaaaaaaaaa";}function bbb(){echo "bbbbbbbbbbbbbbb";}}class Tow implements Test{function aaa(){echo "11111";}function bbb(){echo "2222222";}}$a=new T$b=$a-&aaa();$b-&aaa(); * *1抽象类是一种特殊的类,接口是一种特殊的抽象类,多态就是要用到抽象类和接口*抽象类和接口的作用一样,功能有所不同*抽象方法:若一个类中的方法没有方法体,而直接使用;结束的就是抽象类。方法体就是方法中的{},例如:function test(); *若一个方法是抽象方法,就必须使用abstract关键字修饰,* 抽象类:若类中存在抽象方法,则该类就是抽象类;*抽象类也需要abstract关键字修饰,其特殊性就在于它有抽象方法;*抽象类不能实例化对象,类内的成员也不能直接被访问。*要想使用一个抽象类就必须用一个类去继承抽象类,子类不能再是抽象类,子类可重写抽象类的方法,给抽象方法加上方法体即可实例化子类。*子类必须实现抽象类中抽象方法,即子类必须有抽象类的方法名。其本质就是定义一些规范让子类按这些规范去实现自己的功能。*目的:将自己写的程序块加入到 原来写好的程序中去;
2.接口是为了解决PHP不能多继承,若使用抽象类则继承抽象类的子类就不能再继承其他类。若既想实现一些规范又想继承其他的类就要使用接口。
3.接口与抽象类的对比:
(1作用相同,都不能创建对象,都需要子类去实现
(2接口的声明不一样
(3 接口被实现的方式不一样 ,interface 接口名{
(4接口的所有方法必须是抽象方法,但不需要abstract修饰
(5接口 的成员属性只能声明常量,用const HOST="localhost";常量可通过
类名::常量
(6接口中的成员访问权限都必须是public,抽象类中最低的访问权限是protected,
(7子类实现接口用implements关键字 ,接口之间的继承还是使用extends;*可以使用抽象类去实现接口中的部分方法*如果想让子类可以创建对象,则必须实现接口中的全部抽象方法* *
可以定义一个接口去继承另一个接口* *
一个类可以去实现多个接口(按多个规范去开发子类), 使用逗号分隔多个接口名称* *
一个类可以在继承一类的同时,去实现一个或多个接口(先继承,再实现)
例如:class Man extends Person implements Woker,Students,Teachers{
使用implements的两个目的
1. 可以实现多个接口 ,而extends词只能继承一个父类
2. 没有使用extends词,可以去继承一个类, 所以两个可以同时使用**
class 类名{ * *
}//普通类* *
abstract class 类名 { * *
}//抽象类* *
声明方式* *
interface 接口名{ * *
} //接口* * * * * *
四.PHP中常用的关键字和魔术方法
1.final不能修饰成员属性,只能修饰类和方法;使用final修饰的方法不能被继承和重写(覆盖)
2.static可以修饰成员属性和方法,不能修饰类static修饰的成员属性可以被同一类的所有对象共享;静态数据存在内存中的数据段(初始化静态段);静态数据是在类第一次加载时分配到内存中的,以后直接在内存中调用
注意:(1.静态成员直接使用类名去访问,不用创建对象,访问格式 类名::静态成员,例如Parent::go();这种格式还用于覆盖父类方法的子类中调用父类方法使用父类名::方法名()
(2.若在类中使用静态成员可用self代表本类($this代表本对象),例如self::go(); *静态的成员方法不能访问非静态的成员,因为非静态的成员就必须用对象来访问,$this就表示调用它的对象,而静态成员不用对象来去调用,$this就不能代表哪个对象
(3.若确定一个方法不使用非静态的成员则可将这个方法声明为静态方法(不用创建对象直接通过类名就可以访问);
3.const只能修饰成员属性,用于在类中声明常量,与define功能相同,访问方式和静态成员相同。类内使用seif::常量
类外 类名::方法*常量一定要在声明时给初值,存储与数据段*__call($methodName,$arg1,$arg2....) 调用系统中不存在的方法时自动调用,用于处理调用不存在方法时的错误提示。
__toString(){return "wwwwwwwwwww";}直接输出对象引用时调用
__clone()可以没参数。与原对象各占一个内存空间,若是把对象引用赋值给一个变量,则这个变量和原对象指向同一个内存地址;*其作用与构造方法类似,用于给克隆方法初始化。其中的$this指的是克隆出来的副本的对象,$that代表原本对象;*用法:$p=new P
$p1=clone $p;
4__autoload($className){include './'.$className.'class.php';}唯一一个不在类中添加的方法;用于在类外部自动加载类,只要用到外部类名就会被自动加载
5__sleep(),序列化时自动调用的方法;可以将一个对象部分串行化。只要这个方法中返回一个数组,数组中有几个成员属性就序列化几个成员属性,若不加这个方法则所有成员都被序列化了,例如function __sleep(){return array(name,age);//将成员属性name和age序列化} *其本质就是规定属性中需要序列化的成员属性* *对象串行化,将一个对象转化成一个二进制串存储于内存中;*用于将对象长时间存储于数据库或文件中,或将对象在多个PHP文件中传输时;*例如:$p=new Person();$str=serialize($p);//将对象转化成二进制串file_put_contents("p.txt",$str);//写入文件$str2=file_get_contents("p.txt");$pp=unserialize($str2)//反序列化.得到的$pp与原对象$p相同;*6__wakeup()是在反序列化时自动调用的方法,为序列化后的对象初始化(有对象诞生就要初始化);* * * * * * * * * * * */
class Person{
var $name;var $age;var $sex;function say() {echo"说话";echo $this-&name='888';
}function run() {echo "跑";
$p1-&say();echo $p1-&name='李勇';echo $p2-&age;
/** * * javascript *//*explore=navigator.userAif(explore.search('MSIE')&=0){
alert('ie 浏览器');}else{
alert('非IE')} *//** * linux基础* 1.如何实现每天 0 点钟重新启动服务器crontab -e分 时 日 月 周00 00 * * * /sbin/init 6 * #!/bin/bash chown root /path/to * //shell遍历目录的脚本#!bin/bash tree chmod 777 tree.sh
1. 什么事面向对象?主要特征是什么?
面象对象是把自然界的物体和概念直接映射到程序界的一种比较优雅的手段。主要特征:抽象、继承、封装、多态 。
2. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?
Session是服务器端保存客户端状态信息的方案,一般保存在服务器端内存中,session超时时间在服务器端进行设置。 Cookie是客户端保存信息的方案,一般是以文件的形式进行保存,cookie清空时间是在客户机浏览器设置。
3. HTTP 状态中302、403、 500代码含义?
302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。
301" Moved Permanently
"302" Moved Temporarily
"304" Not Modified
"400" Bad Request
"401" Unauthorized
"403" Forbidden
4. Linux 下建立压缩包,解压缩包的命令
Tar -cvf demo.tar demo Tar -xcf demo.tar
guzip demo.gz
gzip -d demo.gz
Bzip2 -k demo. Bunzip demo.bz2
Zip -r demo unzip demo.zip
5. 请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别?
Int 整数 char 定长字符 Varchar 变长字符 Datetime 日期型 Text 文本型 Varchar 与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。 Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。 由于varchar类型是可变的,所以在数据长度改变的时,服务器要进行额外的操作,所以效率比char类型低。
6. MyISAM 和 InnoDB 的基本区别?
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
7. 不使用cookie向客户端发送一个cookie.
理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID. 当浏览器第二次请求时,会把已存在的COOKIE一起提交到服务器端。
10. isset() 和 empty() 区别,对不同数据的判断结果,$a=0;$a='0';$a='';$a=$a=
Isset()判断是否存在,存在就为真不管是否为假。
Empty()判断是否为空,为空时为真值,不存在也为真值。
Isset():false Empty():true
12. 如何在页面之间传递变量(至少两种方式) ? get,post
三、PHP 代码题
1. 写出匹配URL的正则表达式.
/^[a-zA-z]+:\/\/(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?/
2. 请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。
$arr=array(233,5,6,75454,32);
Mao($arr);
Function mao($arr){
$n=count($arr);
For($i=0;$i&$n;$i++){
For($j=$n-1;$j&0;$j--){
If($arr[$j-1]&$arr[$j]){
$t=$arr[$j-1];
$arr[$j-1]=$arr[$j];
$arr[$j]=$t;
3. 在数据库test中的一个表student,字段是name,class,score。分别代表姓名、所在班级,分数。
1) 学出每个班级中的学生,按照成绩降序排序;
2) 查出每个班的及格人数和不及格人数,格式为:class、及格人数、不及格人数;
3) 用PHP写入连接数据库("localhost","msuser","mspass")、执行以上SQL、显示结果、判断错误、关闭数据库的过程;
1) SELECT * FROM student ORDER BY
$conn=mysql_connect('localhost','root','123456');
@mysql_select_db('test');
$result=Mysql_query($sql);
If($result && mysql_affected_rows()){ ............................. }
Mysql_close($conn);
1 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
答: 传值只是把某一个变量的值传给了另一个变量,而引用则说明两者指向了同一个地方。
2 在PHP中error_reporting这个函数有什么作用?
答: The error_reporting()
1 E_ERROR 致命的运行时错误(它会阻止脚本的执行)
2 E_WARNING 运行时警告(非致命的错误)
4 E_PARSE 解析错误
8 E_NOTICE 注意(事情可能是或者可能不是一个问题)
256 E_USER_ERROR 用户生成的错误消息,由trigger_error()函数生成
512 E_USER_WARNING 用户生成的警告,由trigger_error()函数生成
1024 E_USER_NOTICE 用户生成的注意,由trigger_error()函数生成
2048 E_STRICT 关于兼容性和互操作性的建议
8191 E_ALL 所有的错误、警告和建议
3 请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
if(isset($_POST['action']) &&
$_POST['action']==’submitted’)
$email=$_POST['email'];
if(!preg_match(“/^(w:?+.?)*w+@(?:w+.?)*w+$/”,$email))
“电子邮件检测失败”;
“电子邮件检测成功”;
1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组
//冒泡排序(数组排序)
function bubble_sort($array)
$count = count($array);
if ($count &= 0)
for($i=0; $i&$ $i++){
for($j=$count-1; $j&$i; $j–){
if ($array[$j] & $array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $
//快速排序(数组排序)
function quick_sort($array) {
if (count($array) &= 1) return $
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i& $i++){&
if ($array[$i] &= $key)
$left_arr[] = $array[$i];
$right_arr[] = $array[$i];
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
if ($low &= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
}elseif ($k & $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
return bin_sch($array, $mid+1, $high, $k);
return -1;
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i&$n; $i++){
if($array[$i]==$k){
if ($i&$n){
return $i;
return -1;
3. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数
//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
$keysvalue = array();
foreach($arr as $key =& $val) {
$keysvalue[$key] = $val[$keys];
if($order == 0){
asort($keysvalue);
arsort($keysvalue);
reset($keysvalue);
foreach($keysvalue as $key =& $vals) {
$keysort[$key] = $
$new_array = array();
foreach($keysort as $key =& $val) {
$new_array[$key] = $arr[$val];
return $new_
* 请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit,
* 数组中所有元素都用小写字母,并按照字母先后次序排序
class sort
public function __construct($str)
$this-&str=strtolower($str);
private function explodes()
if(empty($this-&str)) return array();
$arr=explode(” “,$this-&str);
return is_array($arr)?$arr:array($arr);
public function sort()
$explode=$this-&explodes();
sort($explode);
//$str=’Apple Orange Banana Strawberry’;
////$sortob=new sort($str);
////var_dump($sortob-&sort());
复制代码题二:
* 对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,
* 请用正则 表达式验证,对于不符合要求的$string返回出错信息
class regx
public static function check($str)
if(preg_match(“/^([1-9,])+$/”,$str))
$str=”12345,6″;
if(regx::check($str))
echo “suc”;
echo “fail”;
复制代码题三:
* 请写一段程序,在服务器创建一个文件fruit.dat,将试题3中得到的数组写入到改文件中,
* 然后写一段程序从文件中读取并还原数组
* @author zhuwenqiong
class sort
public function __construct($str)
$this-&str=strtolower($str);
private function explodes()
if(empty($this-&str)) return array();
$arr=explode(” “,$this-&str);
return is_array($arr)?$arr:array($arr);
public function sort()
$explode=$this-&explodes();
sort($explode);
class file
private $sort=
public function __construct($arrobj,$path)
$this-&sort=$
$this-&filepath=$
private function getresource($filename,$mode)
return fopen($this-&filepath.$filename,$mode);
private function closeresource($resource)
fclose($resource);
public function savefile($filename)
$arr=$this-&sort-&sort();
$fopen=$this-&getresource($filename,”a+”);
if(!$fopen){
echo “文件打开失败!”;
var_dump($arr);
foreach($arr as $key=&$value)
fwrite($fopen,$value.”\n”);
$this-&closeresource($fopen);
public function readfile($filename)
$this-&savefile($filename);
$fopen=$this-&getresource($filename,”r”);
if(!$fopen){
echo “文件打开失败!”;
$arr=array();
while(!feof($fopen))
$get=fgets($fopen);
if(!empty($get))
$arr[]=str_replace(“\n”,”",$get);
$this-&closeresource($fopen);
$file=new file(new sort(‘Apple Orange Banana Strawberry’),”E:\\”);
$arr=$file-&readfile(“fruit.dat”);
var_dump($arr);
复制代码题四:
* 单例模式,创建mysqli数据库链接的单例对象
* @author zhuwenqiong
private static $
private function __construct($host,$username,$password,$dbname)
$this-&handle=NULL;
$this-&getcon($host,$username,$password,$dbname);
public static function getBb()
self::$instance=new Db();
return self::$
private function getcon($host,$username,$password,$dbname)
if($this-&handle!=NULL){
$this-&handle= mysqli_connect($host,$username,$password,$dbname);
windows平台, Apache Http Server启动失败, 排错思路是什么?
检查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服务,然后启动apache服务器
PHP session扩展默认将session数据储存在哪里? D
SQLite DatabaseB)
MySQL DatabaseC)
Shared Memory
File SystemE)
Session Server
.如果你想要自动加载类,下面哪种函数声明是正确的 C
function autoload($class_name)B)
function __autoload($class_name, $file)
function __autoload($class_name)D)
function _autoload($class_name)
function autoload($class_name, $file)
PHP程序使用utf-8编码, 以下程序输出结果是什么?D
$str = ’hello你好世界’;
echo strlen($str);
A) 9B) 13C) 18D) 17
你所知道的php数组相关的函数?
Array_flip()
Array_pop()
Array_push()
Array_unshift()
Array_count_values()
Array_difff()
Arrry_keys()
Array_merge()
Array_pad()
Array_rand()
Array_shift()
Array_unique()
Array_values()
php读取文件内容的几种方法和函数?
打开文件,然后读取。Fopen() fread()
打开读取一次完成 file_get_contents()
以下程序,变量str什么值的情况下输出111? if( ! $str ) { echo 111; }
在$str值为:0,’0′,false,null,”"
说说你对缓存技术的了解?
1、缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库。
2、使用memcache可以做缓存。
你所知道的设计模式有哪些?
工厂模式、策略模式、单元素模式、观察者模式、命令链模式
说说你对SVN的了解?优缺点?
SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。
SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。
缺点:不能随意修改服务器项目文件夹。
PHP加速模式/扩展? PHP调试模式/工具?
Zend Optimizer加速扩展
调试工具:xdebug
你常用到的mysql命令?
Select * from table
Update table set field=’value’ where id=
Delete from where id=
Insert into table values(‘value1′,’value2′)
Create table tablename
Show tables
进入mysql管理命令行的命令?
Mysql -u root -p
show c 这个命令的作用?
答:显示创建数据库的sql语句
sh 这个命令的作用?
答:显示创建表的sql语句
这个命令的作用?
答:查询user表的结构
explain select * 这个命令的作用?
答:获取select相关信息
这个命令的作用?
答:显示哪些线程正在运行
SHOW VARIABLES; 这个命令的作用?
显示系统变量和值
SHOW VARIABLES like ’%conn%’; 这个命令的作用?
答:显示系统变量名包含conn的值
LEFT JOIN 写一个SQL语句?
Select A.id,A.class from A left join B on A.cid=B.id
in, not in, exist, not exist的作用和区别?
in在什么中
Not in 不在什么中
Exists 存在
Not exists 不存在
怎么找到数据库的配置文件路径?
在数据库安装目录下,my.ini
linux: rpm
简述Linux下安装PHP的过程?
安装软件之前先安装编译工具gcc、gcc-c++
拷贝源码包,解包解压缩
Cd /lamp/php进入php目录
./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc指定安装目录和配置文件目录
Make install安装
简述Linux下安装Mysql的过程?
Groupadd mysql 添加一个用户组mysql
Useradd -g mysql mysql 添加一个mysql用户指定分组为mysql
Cd /lamp/mysql 进入mysql目录
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
简述Linux下安装apache的过程?
Cd /lamp/httpd 进去apache软件目录
./configure –prefix=/usr/local/apache2/ –sysconfdir=/etc/httpd/ –with-included-apr
HTML/CSS/DIV/Javascritp:
用javascript取得一个input的值?取得一个input的属性?
document.getElementById(‘name’).
document.getElementById(‘name’).getAttribute('name');
用Jquery取得一个input的值?取得一个input的属性?
$(“input[name='aa']“).val();
$(“input[name='aa']“).attr(‘name’);
请您写一段ajax提交的js代码,或者写出ajax提交的过程逻辑。
if(window.XMLHttpRquest)
xmlhttp=new XMLHttpRequest();
else if(window.ActiveXObject)
xmlhttp=new ActiveXObject(‘Microsoft.XMLHTTP’);
xmlhttp.open(‘GET’,’1.php?aa=name’,true);
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4)
if(xmlhttp.status==200)
var text=xmlhttp.responseT
xmlhttp.send(null);
写出你认为语言中的高级函数
Imagecreate
Imagecolorallocate
Imagesetpixel
Imagettftext
Mysql_connect()
Mysql_select_db
Mysql_query
mysql_fetch_row
Mysql_close
简述Cookie的设置及获取过程
设置COOKIE的值:
Setcookie(名称,值,保存时间,有效域);
获取值:$_COOKIE['名称'];
面向对象中接口和抽象类的区别及应用场景
1、有抽象方法的类叫做抽象类,抽象类中不一定有抽象方法,抽象方法必须使用abstract关键字定义。
2、接口中全部是抽象方法,方法不用使用abstract定义。
3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。
用面向对象来实现A对象继承B和C对象
Interface B{
Interface C{
Class A implements B,C{
写出Smarty模板引擎中你最常用的关键词
MySQL存储引擎中MyISAM和InnoDB,在同样的应用场景中各有什么优缺点,索引结构如何实现?
MyISAM不支持外键和事务处理,但是查询速度比InnoDB类型的稍快。
InnoDB类型数据库支持外键和事务处理,查询速度比MyISAM稍慢。
创建索引:alert table tablename add index (`字段名`)
如下user表结构
Int unsigned
Varchar(20)
Tinyint unsigned
l 增加一个字段性别sex,写出修改语句
Alert table user add sex enum(’0′,’1′);
l 查询出年龄介于20岁到30岁之间的用户
Select * from user where age&20 and age&30
如果是一个Web频繁访问的查询,上题的查询如何优化?
使用memcache缓存技术,在一定时间内将动态内容缓存到文件中,访问动态页面时,直接调用缓存文件而不必重新查询数据库。
echo(),print(),print_r()的区别?
Echo() 是PHP语法,可以输出多个值,不能输出数组。
Print() 是PHP函数,可以输出单个简单类型的变量值。
Print_r() 是php函数,可以打印出复杂类型变量的值,如数组,对象。
什么是模板技术、能够使HTML和PHP分离开使用的模板?
模板技术就是使程序的逻辑代码和界面分开的技术。
能够使HTML和PHP分开的模板有:Smarty、Template、PHPlib Template、FastTemplate
对于大流量的网站,您采用什么样的方法来解决访问量问题?
优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:
1、确定当前服务器设备是否满足流量需求。
2、使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。
3、禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。
4、控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。
5、使用不同的主机分流主要流量,使服务器均衡负载。
6、使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。
mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
Mysql_fetch_row()以索引数组的方式取查询的结果集,mysql_fetch_array()以索引数组和关联数组两种方式取查询的结果集。
实现中文字串截取无乱码的方法
Mb_substr();
用PHP写出显示客户端IP与服务器IP的代码
获取客户端IP:get_env(“REMOTE_ADDR”);
获取服务器端IP:$_SERVER["SERVER_ADDR"];
有一个网页地址, 比如PHP开发资源网主页:
获取网页内容:
$url=”“;
$str=file_get_contents($url);
请写一个函数验证电子邮件的格式是否正确
function checkemail($email)
echo preg_match(‘/^[\w]+@[\w]+[\.]([\w]+)$/’,$email)?’email格式正确‘:’email格式不正确‘;
简述如何得到当前执行脚本路径,包括所得到参数
用$_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];取得当前页面的完整路径和参数。
取得参数:$_SERVER['QUERY_STRING'];
JS表单弹出对话框函数是?获得输入焦点函数是?
Alert();
Onfocus();
.写一个函数,算出两个文件的相对路径
如 $a = ’/a/b/c/d/e.php’;
$b = ’/a/b/12/34/c.php’;
计算出 $b 相对于 $a 的相对路径应该是
$a=”a/b/c/d/e.php”;
$b=”a/b/12/34/c.php”;
$ainfo=parse_url($a);
$binfo=parse_url($b);
$apath=ltrim($ainfo['path'],’/');
$bpath=ltrim($binfo['path'],’/');
$arr=explode(‘/’,$apath);
$brr=explode(‘/’,$bpath);
$count=count($arr);
for($i=0;$i&$$i++)
if($arr[$i]==$brr[$i])
$brr[$i]=’..’;
$cha=implode(‘/’,$brr);
print_r($cha);
写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function show($dirs){
$dir=opendir($dirs);
While($f=readdir($dir))
If($f!=’.' && $f!=’..’)
$file=$dirs.’/’.$f;
If(is_file($file))
Echo ’文件名:‘.$file.’&br/&’;
Show($file);
Cookie和session的区别,禁止了cookie后session能正常使用吗?session的缺点是什么?session在服务器端是存在哪里的?是共有的还是私有的?
COOKIE保存在客户端,用户通过手段可以进行修改,不安全,单个cookie允许的最大值是3k。
而SESSION保存在服务器端,相对比较安全,大小没有限制。
禁用了cookie之后session不能正常使用。
Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。
Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。
Session文件是公有的。
数据库索引有几类,分别是什么?什么时候该用索引?
普通索引、主键索引、唯一索引
并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。
写几个魔术方法并说明作用?
__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方法
__get()当获取未定义变量的值时会自动调用的方法
__construct()构造方法,实例化类时自动调用的方法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用unset()时自动调用的方法
__isset()当对一个未定义变量调用isset()方法时自动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法
$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什么?
它们都是PHP预定义变量。
$_REQUEST用来获取post或get方式提交的值。
$_POST用来获取post方式提交的值。
$_GET用来获取get方式提交的值。
$_COOKIE用来获取cookie存储的值,
$_SESSION用来获取session存储的值,
$_FILE用来获取上传文件表单的值
数组中下标最好是什么类型的,为什么?
数组的下标最好是数字类型的,数字类型的处理速度快。
++i和i++哪一个效率高,为什么?
++i效率比i++的效率更高,因为++i少了一个返回i的过程。
119.magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?
Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加\
Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。
120.Echo()、print()、print_r()的区别?
Echo 是php语法,可以输出多个变量,不能输出数组。
Print()是php中的函数,只能输出简单的变量。
Print_r()是php中的函数,可以输出变量也可以输出数组。
121.框架中什么是单一入口和多入口,单一入口的优缺点?
1、多入口就是通过访问不同的文件来完成用户请求。
单一入口只web程序所有的请求都指向一个脚本文件的。
2、单一入口更容易控制权限,方便对http请求可以进行安全性检查。
缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。
122.提示类型200、404、502是什么意思。
200是请求成功,404是文件未找到,502是服务器内部错误。
123.编写一个自定义函数提取这段路径的的后缀名。
“Www/hello/test.php.html?a=3&b=4”
Function geturltype($url){
$info=parse_url($url);
Return end(explode(‘.’,$info['path']));
124.你对Memcach的理解,优点有哪些?
Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。
Memcache的优点:稳定、配置简单、多机分布式存储、速度快。
125.对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:
a) 索引的目的是什么?
b) 索引对数据库系统的负面影响是什么?
c) 为数据表建立索引的原则有哪些?
d) 什么情况下不宜建立索引?
索引的目的:
1、快速访问数据表中的特定信息,提高检索速度
2、创建唯一性索引,保证数据库表中每一行数据的唯一性
3、加速表和表之间的连接
4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。
建立索引的原则:
1、在最频繁使用的、用以缩小查询范围的字段上建立索引
2、在平频繁使用的、需要排序的字段上建立索引
什么情况下不宜建立索引:
1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。
126.web应用中,数据库的读取频率远高于写入频率, 如何优化MySQL而应对此种情景 ?
使用memcache缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。
如果网站的访问量很大,可以把数据库读写服务器分开,使用多台服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。
127.include与require的区别?
Php在遇到include时就重新解释一次,如果一个页面中出现10次include,php就重新解释10次,而php遇到require时只解释一次,即使页面中出现多次require,php也直解释一次。
使用require包含文件时,被包含的文件当成了当前文件的一个组成部分,如果被包含的文件中有语法错误或者文件不存在,程序就提示错误信息,并结束执行。
使用include包含文件时,相当于指定了文件的路径,被包含的文件中有语法错误或者文件不存在时,页面只是给出警告信息,不响应程序本身的执行。
128.PHP字符串中单引号与双引号的区别?
单引号不能解释变量,而双引号可以解释变量。
单引号不能转义字符,在双引号中可以转义字符。
132.指出以下代码片段中的SQL注入漏洞以及解决方法(magic_quotes_gpc = off)
mysql_query(“select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%’”, $link);
注入漏洞主要存在用户提交的数据上,这里的注入漏洞主要是$_GET[catid]和$_GET[keyword]
解决注入漏洞:
$_GET[catid]=intval($_GET[catid]);
$sql=”select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%”;
$sql=addslashes($sql);
Mysql_query($sql);
133.分别指出php.ini中 magic_quotes_gpc, magic_quotes_runtime两项参数的作用.
Magic_quotes_gpc的作用是在POST、GET、COOKIE数据上使用addslashes()自动转义。
Magic_quotes_runtime参数的作用是设置状态,当状态为0时则关闭自动转义,设置为1则自动转义,将数据库中取出来的单引号、双引号、反斜线这些字符加上反斜杠转义。
134.写出以下php代码的运行结果:
function foo($i) {
function bar(&$i) {
echo $i++ , ++$i;
输出:10,12
foo($i); 输出:13
输出:无输出
135.如何快速下载一个远程http服务器上的图片文件到本地?
$file=”";
$fp=fopen($file,’rb’);
$img=fread($fp,10000);
$dir=”./”;
$local=fopen($dir.’/’.basename($file),’w');
Fwrite($local,$img);
136.什么是时间戳? 如何取得当前时间戳?
时间戳是从日 00:00:00到指定日期的秒数。
获取当前时间戳:time()
137. 与cookie的区别与关系, 禁用cookie后, session能否正常使用?
SESSION存储在服务器端,COOKIE保存在客户端。
Session比较安全,cookie用某些手段可以修改,不安全。
Session依赖于cookie进行传递。
禁用cookie后,session不能正常使用。
138.HTTP/1.1协议中 200和404状态码是什么含义?
200是请求成功,404是文件未找到
139.了解XSS攻击吗? 如何防止 ?
XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。
使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。
140.SQL注入漏洞产生的原因 ? 如何防止?
SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。
防止SQL注入:
1、开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置
2、执行sql语句时使用addslashes进行sql语句转换
3、Sql语句书写尽量不要省略小引号和单引号
4、过滤掉sql语句中的一些关键字:update、insert、delete、select、*
5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。
6、Php配置文件中设置register_globals为off,关闭全局变量注册
7、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。
141.一个字节占多少bit ? 一个IPv4地址占几个字节? 一个IPv6地址呢?
一个字节占8bit,一个IPV4占用4字节,一个IPV6占用16字节。
142.M ADSL宽带连接, 理想情况下, 最大下载速度是多少KB/s
143.请写出一个正则表达式,用于匹配一个HTML文件中&img /&标记中的图片地址
$url=”&img src=’11.jpg’/&”;
/&img[\s]*src=['|\"](.*)['|\"][\s]*\/&/
145.Fatal error: Call to undefined method ge_user() in /website/index.php on line 39
调用了未定义的方法ge_user(),检查程序中有没有定义此方法
146.Fatal error: Class ’client’ not found in /website/index.php on line 173
类client没有找到,检查文件中有没有client类,或者有没有包含client类文件
147.Warning: Cannot modify header information - headers already sent by (output started at /website/index.php:1) in /website/index.php
提示文件前面有输出,检查是否有输出,或者编码
148.Warning:session_start(): open(/website/tmp/sess_47e067121facfa1cb16d243b,
O_RDWR) failed: No such file or directory (2) in /website/index.php on line
没有找到文件或目录,检查文件是否存在
149.Parse error: syntax error, unexpected T_STRING in /website/index.php on line 18
18行语法错误,检查语法
150.Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /website/index.php on line 2
没有找到welcome.txt文件,检查文件是否存在
1、抓取远程图片到本地,你会用什么函数?
fsockopen, A
2、用最少的代码写一个求3值最大值的函数.
function($a,$b,$c){
* W0 z* u6 k+ e. L
return $a&$b? ($a&$c? $a : $c) : ($b&$c? $b
5 O: F6 v1 W# U}
3、用PHP打印出前一天的时间,打印格式是日22:21:21
Echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));
4、javascript能否定义二维数组,如果不能你如何解决?
javascript不支持二维数组定义,可以用arr[0] = new array()来解决
5、假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。
function go2b(){
window.location = “b.html”;
window.close();
setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b()
6、//正在浏览当前页面用户的 IP 地址:127.0.0.1
echo $_SERVER["REMOTE_ADDR"].”&br /&”;
//查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2
echo $_SERVER["QUERY_STRING"].”&br /&”;
//当前运行脚本所在的文档根目录:d:inetpubwwwroot
echo $_SERVER["DOCUMENT_ROOT"].”&br /&”;
7、在HTTP 1.0中,状态码 401 的含义是未授权____;如果返回“找不到文件”的提示,则可用 header 函数,其语句为header(“HTTP/1.0 404 Not Found”);
答:401表示未授权;header(“HTTP/1.0 404 Not Found”);
8、写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function my_scandir($dir)
$files=array();
if(is_dir($dir))
if($handle=opendir($dir))
while(($file=readdir($handle))!==false)
if($file!=”.” && $file!=”..”)
if(is_dir($dir.”/”.$file))
$files[$file]=my_scandir($dir.”/”.$file);
$files[]=$dir.”/”.$
closedir($handle);
print_r(my_scandir(“D:Program FilesInternet ExplorerMUI”));
9、把 John 新增到 users 阵列?
$users[] = ‘john’;
array_push($users,‘john’);
10、在PHP中error_reporting这个函数有什么作用?
答:error_reporting() 设置 PHP 的报错级别并返回当前级别。
11、请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
$email=$_POST['email'];
if(!preg_match(‘/^[\w.]+@([\w.]+)\.[a-z]{2,6}$/i’,$email))
echo “电子邮件检测失败”;
echo “电子邮件检测成功”;
12、用PHP写出显示客户端IP与服务器IP的代码
答:打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv(‘REMOTE_ADDR’);
打印服务器IP:echo gethostbyname(“www.bolaiwu.com”)
13、如何修改SESSION的生存时间(1分).
答:方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
方法2:$savePath = “./session_save_dir/”;
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
方法3:setcookie() and session_set_cookie_params($lifeTime);
14、有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分)
答:方法1(对于PHP5及更高版本):
$readcontents = fopen(“http://www.phpres.com/index.html”, “rb”);
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo file_get_contents(“http://www.phpres.com/index.html”);
15、请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)
答:按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
16、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(“.”,$file);
return $ext[1];
function getExt($url) {
$url = basename($url);
$pos1 = strpos($url,”.”);
$pos2 = strpos($url,”?”);
if(strstr($url,”?”)){
return substr($url,$pos1 + 1,$pos2 – $pos1 – 1);
return substr($url,$pos1);
17、使用五种以上方式获取一个文件的扩展名
要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,
必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name)
function get_ext1($file_name){
return strrchr($file_name, ‘.’);
function get_ext2($file_name){
return substr($file_name, strrpos($file_name, ‘.’));
function get_ext3($file_name){
return array_pop(explode(‘.’, $file_name));
function get_ext4($file_name){
$p = pathinfo($file_name);
return $p['extension'];
function get_ext5($file_name){
return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), ‘.’)));
echo $str1==$str2 ? ‘相等’ : ‘不相等’;
$str3 = ”;
$str4 = 0;
echo $str3==$str4 ? ‘相等’ : ‘不相等’;
$str5 = 0;
$str6 = ’0′;
echo $str5===$str6 ? ‘相等’ : ‘不相等’;
相等 相等 不相等
19、MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?
Varchar是变长,节省存储空间,char是固定长度。查找效率要char型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些
20、请使用JavaScript写出三种产生一个Image 标签的方法(提示:从方法、对象、HTML角度考虑)
(1)var img = new Image();
(2)var img = document.createElementById(“image”)
(3)img.innerHTML = “&img src=”xxx.jpg” /&”
21、16.请描述出两点以上XHTML和HTML最显著的区别
(1)XHTML必须强制指定文档类型DocType,HTML不需要
(2)XHTML所有标签必须闭合,HTML比较随意
22、写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数组。
//冒泡排序(数组排序)
function bubble_sort($array)
$count = count($array);
if ($count &= 0)
for($i=0; $i&$ $i++){
for($j=$count-1; $j&$i; $j–){
if ($array[$j] & $array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $
//快速排序(数组排序)
function quicksort($array) {
if (count($array) &= 1) return $
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i&count($array); $i++){
if ($array[$i] &= $key)
$left_arr[] = $array[$i];
$right_arr[] = $array[$i];
$left_arr = quicksort($left_arr);
$right_arr = quicksort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
23、写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)
MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎
24、求两个日期的差数,例如 ~
的日期差数
class Dtime
function get_days($date1, $date2)
$time1 = strtotime($date1);
$time2 = strtotime($date2);
return ($time2-$time1)/86400;
$Dtime = new D
echo $Dtime-&get_days(’′, ’′);
$temp = explode(‘-’, ’′);
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode(‘-’, ’′);
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;
方法三:echo abs(strtotime(“″)-strtotime(“″))/60/60/24 计算时间差
25、请写一个函数,实现以下功能:
字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。
function str_explode($str){
$str_arr=explode(“_”,$str);$str_implode=implode(” “,$str_arr); $str_implode=implode
(“”,explode(” “,ucwords($str_implode)));
return $str_
$strexplode=str_explode(“make_by_id”);print_r($strexplode);
方法二:$str=”make_by_id!”;
$expStr=explode(“_”,$str);
for($i=0;$i&count($expStr);$i++)
echo ucwords($expStr[$i]);
}方法三:echo str_replace(‘ ‘,”,ucwords(str_replace(‘_’,’ ‘,’open_door’)));
26、一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数,用SQL语句及视图、
存储过程分别实现。
DELIMITER //
create procedure proc_countNum(in columnId int,out rowsNo int)
select count(*) into rowsNo from member where member_id=columnId;
call proc_countNum(1,@no);
方法:视图:
create view v_countNum as select member_id,count(*) as countNum from member group by
select countNum from v_countNum where member_id=1
27、js中网页前进和后退的代码 ( 前进: history.forward();=history.go(1); 后退: history.back
();=history.go(-1); )
28、echo count(“abc”); 输出什么?
count — 计算数组中的单元数目或对象中的属性个数
int count ( mixed$var [, int $mode ] ), 如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回1,有一个例外,如果 var 是 NULL 则结果是 0。
对于对象,如果安装了 ,可以通过实现 Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。
29、有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)
function BubbleSort(&$arr)
$cnt=count($arr);
for($i=0;$i&$$i++)
if($flag==0)
for($j=0;$j&$cnt-$i-1;$j++)
if($arr[$j]&$arr[$j+1])
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);
30、请举例说明在你的开发过程中用什么方法来加快页面的加载速度
答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具
31、.以下的代码会产生什么?为什么?
function multiply(){
$num =$num *10;
multiply();
由于函式 multiply() 没有指定 $num 为全域变量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值是 10。
32. php class中static,public,private,protected的区别?
static 静态,类名可以访问
public 表示全局,类内部外部子类都可以访问;
private表示私有的,只有本类内部可以使用;
protected表示受保护的,只有本类或子类或父类中可以访问;
33. HTTP协议中GET

我要回帖

更多关于 2018年7月手机流量免费 的文章

 

随机推荐