字段名
)例如:
function test(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
echo "
";
echo $b;//输出101
echo(),print(),print_r()的区别?
echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
Print()只能打印出简单类型变量的值(如int,string)
print_r()可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串
mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
Mysql_fetch_row()以索引数组的方式取查询的结果集,mysql_fetch_array()以索引数组和关联数组两种方式取查询的结果集。
请描述出两点以上XHTML和HTML最显著的区别
(1)XHTML必须强制指定文档类型DocType,HTML不需要
(2)XHTML所有标签必须闭合,HTML比较随意
HTTP协议中GET、POST和HEAD的区别?
HEAD: 只请求页面的首部。
GET: 请求指定的页面信息,并返回实体主体。
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
(1)HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。
(2)在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3)GET 这个是浏览器用语向服务器请求最常用的方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用POST来传送的。
如何实现多个线程安全的写入一个文件数据。
采用锁机制,当一个用户在对此文件进行读写入操作时,将此文件锁定,操作完毕后解除锁定,在该用户进行读写入操作过程中,其他用户不能操作此文件,需要排队等待。
什么是满二叉树?什么事完全二叉树?
满二叉树:除了叶子节点外的所有节点都有两个子节点。
完全二叉树:每个节点最多有两个子节点,缺右不缺左,而且最多只能缺少一个叶子节点。
1、限制文件存取
safe_mode_include_dir = “/path1:/path2:/path3″
不同的文件夹用冒号隔开
2、限制环境变量的存取
safe_mode_allowed_env_vars = string
指定PHP程序可以改变的环境变量的前缀,如:safe_mode_allowed_env_vars = PHP_ ,当这个选项的值为空时,那么php可以改变任何环境变量safe_mode_protected_env_vars = string
用来指定php程序不可改变的环境变量的前缀
3、限制外部程序的执行
safe_mode_exec_dir = string
此选项指定的文件夹路径影响system、exec、popen、passthru,不影响shell_exec和“”。
disable_functions = string
不同的函数名称用逗号隔开,此选项不受安全模式影响
magic quotes
用来让php程序的输入信息自动转义,所有的单引号(“’”),双引号(“””),反斜杠(“\”)和空字符(NULL),都自动被加上反斜杠进行转义
magic_quotes_gpc = On 用来设置magic quotes 为On,它会影响HTTP请求的数据(GET、POST、Cookies)
程序员也可以使用addslashes来转义提交的HTTP请求数据,或者用stripslashes来删除转义
使用过哪些PHP框架。试描述其优劣点。
1、BroPHP框架:
优点:轻量级学习型框架,配置简单,操作简单,容易上手,提供了比较全面的文档。
缺点:
2、ThinkPHP框架:
优点:功能比较全面,配置相对比较简单,操作相对比较简单,有很多使用示例程序。
缺点:提供的操作方法太多,新手不知如何选择,文档不够全面。
php中,模板引擎的目的是什么? 你用过哪些模板引擎?
使用模板引擎的目的是使程序的逻辑代码和html界面代码分离开,是程序的结构更清晰。
使用过的模板引擎:Smarty、ThinkPHP的ThinkTemplate
如何在页面之间传递变量(至少两种方式) ?
GET,POST,COOKIE,SESSION
你所知道的php数组相关的函数?
array()—-创建数组
array_combine()—-通过合并两个数组来创建一个新数组
range()—-创建并返回一个包含指定范围的元素的数组
compact()—-建立一个数组
array_chunk()—-将一个数组分割成多个
array_merge()—-把两个或多个数组合并成一个数组
array_slice()—-在数组中根据条件取出一段值
array_diff()—-返回两个数组的差集数组
array_intersect()—-计算数组的交集
array_search()—-在数组中搜索给定的值
array_splice()—-移除数组的一部分且替代它
array_key_exists()—-判断某个数组中是否存在指定的key
shuffle()—-把数组中的元素按随机顺序重新排列
array_flip()—-交换数组中的键和值
array_reverse()—-将原数组中的元素顺序翻转,创建新的数组并返回
array_unique()—-移除数组中重复的值
你所知道的PHP的一些技术(smarty等)?
Smarty,jquery,ajax,memcache,div+css,js,mysqli,pdo,svn,thinkphp,brophp,yii
你所熟悉的PHP论坛系统 有哪些?
Discuz
你所熟悉的PHP商城系统 有哪些?
Ecshop
你所熟悉的PHP开发框架 有哪些?
Brophp,thinkphp
你所知道的设计模式有哪些?
工厂模式、策略模式、单元素模式、观察者模式、命令链模式
说说你对代码管理的了解? 常使用那些代码版本控制软件?
通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。
常用的版本控制器:SVN
说说你对SVN的了解?优缺点?
SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。
SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。
缺点:不能随意修改服务器项目文件夹。
怎么找到PHP.ini的路径?
一般都在php的安装目录下,或者window系统的windows目录下。
PHP加速模式/扩展? PHP调试模式/工具?
Zend Optimizer加速扩展
调试工具:xdebug
你常用到的mysql命令?
Show databases
Show tables
Insert into 表名() values()
Update 表名 set 字段=值 where …
Delete from 表名 where …
Select * from 表名 where 条件 order by … Desc/asc limit … Group by … Having …
进入mysql管理命令行的命令?
Mysql -uroot -p 回车 密码
show databases; 这个命令的作用?
显示当前mysql服务器中有哪些数据库
show create database mysql; 这个命令的作用?
显示创建数据库的sql语句
show create table user; 这个命令的作用?
显示创建表的sql语句
desc user; 这个命令的作用?
查询user表的结构
explain select * from user; 这个命令的作用?
获取select相关信息
show processlist; 这个命令的作用?
显示哪些线程正在运行
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
请写出5个常用的unix操作命令。
1、Ls -l
2、tar -zxvf
3、Touch
4、Cat
5、Mkdir
6、rm
请写出以下5个UNIX系统配置文件/服务的作用。
/etc/passwd
/etc/hosts
/etc/fstab
Crontab
sshd
1、/etc/passwd :用户信息文件,其中包含用户名、用户是否有密码、用户ID及用户所属组
2、/etc/hosts:主机名数据库,包IP地址、主机名或域名、别名等信息,在此文件中添加记录可绕过DNS
3、/etc/fstab 保存了系统所有分区信息的配置文件。
4、Crontab 计划任务命令
5、Sshd 远程连接管理命令
请写出5个常用的SQL操作关键字。
Select ,update, delete, insert into,
create ,group by ,order by
请列出5个常用的PHP操作MySQL的函数
1、Mysql_connect()
2、Mysql_select_db()
3、Mysql_query()
4、Mysql_fetch_row()
5、Mysql_close()
请列出4个常用的HTML标签名
<table>table>
<a>a>
<form>form>
<div>div>
function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.’…’;
}else{
return $string;
}
}
$file=”";
$fp=fopen($file,’rb’);
$img=fread($fp,10000);
$dir=”./”;
$local=fopen($dir.’/’.basename($file),’w');
Fwrite($local,$img);
$object = new myclass();
$newstr = $object->test;
$object->test = "info";
简述Linux下安装Mysql的过程?
Groupadd mysql 添加一个用户组mysql
Useradd -g mysql mysql 添加一个mysql用户指定分组为mysql
Cd /lamp/mysql 进入mysql目录
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
Make
Make all
简述Linux下安装apache的过程?
Cd /lamp/httpd 进去apache软件目录
./configure –prefix=/usr/local/apache2/ –sysconfdir=/etc/httpd/ –with-included-apr
Make
Make all
if(isset($_POST['action']) && $_POST['action']==’submitted’){
$email=$_POST['email'];
if(!preg_match(“/^(?:w+.?)*w+@(?:w+.?)*w+$/”,$email)){
echo “电子邮件检测失败”;
}else{
echo “电子邮件检测成功”;
}
}
请写一个函数验证电子邮件的格式是否正确
function checkemail($email){
echo preg_match(‘/^[\w]+@[\w]+. /′, email)?’email格式正确‘:’email格式不正确‘;
}
请写出一个正则表达式,用于匹配一个HTML文件中标记中的图片地址
$url=“
”;
/
[\s]*src=['|\"](.*)['|\"][\s]*\/>/
if( ! $str ) { echo 111; }
在$str值为:0,’0′,false,null,””
请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。
常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。
冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。
// 冒泡排序法
Function mysort($arr){
For($i=0; $i$arr); $i++){
For($j=0; $j$arr)-1; $j++){
If($arr[$j] > $arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}
Return $arr;
}
$arr=array(3,2,1);
print_r(mysort($arr));
快速排序(数组排序)
function QuickSort($arr){
$num = count($arr);
$l=$r=0;
for($i=1;$i<$num;$i++){
if($arr[$i] < $arr[0]){
$left[] = $arr[$i];
$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
if($l > 1){
$left = QuickSort($left);
}
$new_arr = $left;
$new_arr[] = $arr[0];
if($r > 1){
$right = QuickSort($right);
}
for($i=0;$i<$r;$i++){
$new_arr[] = $right[$i];
}
return $new_arr;
}
使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
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){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}
写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数
二维数组排序
arr是数据, keys是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order == 0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
reset($keysvalue);
foreach($keysvalue as $key => $vals) {
$keysort[$key] = $key;
}
$new_array = array();
foreach($keysort as $key => $val) {
$new_array[$key] = $arr[$val];
}
return $new_array;
}
请以空格作为间隔,拆分字符串’Apple Orange Banana Strawberry’,组成数组$fruit,
数组中所有元素都用小写字母,并按照字母先后次序排序
class sort {
private $str;
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);
return $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)) {
return true;
}
return false;
}
}
$str="12345,6";
if(regx::check($str)) {
echo "suc";
} else {
echo "fail";
}
请写一段程序,在服务器创建一个文件fruit.dat,将试题3中得到的数组写入到改文件中,然后写一段程序从文件中读取并还原数组@author zhuwenqiong
class sort {
private $str;
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);
return $explode;
}
}
class file {
private $sort=null;
private $filepath;
public function __construct($arrobj,$path) {
$this->sort=$arrobj;
$this->filepath=$path;
}
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 "文件打开失败!";
exit;
}
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 "文件打开失败!";exit;
}
$arr=array();
while(!feof($fopen)) {
$get=fgets($fopen);
if(!empty($get))
$arr[]=str_replace("\n","",$get);
}
$this->closeresource($fopen);
return $arr;
}
}
$file=new file(new sort('Apple Orange Banana Strawberry'),"E:\\");
$arr=$file->readfile("fruit.dat");
var_dump($arr);
单例模式,创建mysqli数据库链接的单例对象
class Db {
private static $instance;
public $handle;
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::$instance;
}
private function getcon($host,$username,$password,$dbname) {
if($this->handle!=NULL){
return true;
}
$this->handle=mysqli_connect($host,$username,$password,$dbname);
}
}
A) function autoload($class_name)
B) function __autoload($class_name, $file)
C) function __autoload($class_name)
D) function _autoload($class_name)
E) function autoload($class_name, $file)
$str = ’hello你好世界’;
echo strlen($str);
?>
A) 9 B) 13 C) 18 D) 17
<style>
Body{ Text-align:center; Margin:0; Padding:0; }
#box{ Width:960px; Margin:0 auto; }
.small{ Width:320px; Float:left; }
style>
<div id=’box’>
<div class=’small’>div>
<div class=’small’>div>
<div class=’small’>div>
div>
$script_name = basename(__file__); print_r($script_name);
前进: history.forward();=history.go(1);
后退: history.back();=history.go(-1);
<script type="text/javascript" src="hello.js">script>
document.getElementById(‘name’).value;
document.getElementById(‘name’).type;
$(“input[name='aa']“).val();
$(“input[name='aa']“).attr(‘name’);
(1)var img = new Image();
(2)var img = document.createElementById(“image”)
(3)img.innerHTML = “
”
b.html。
<script>
function go2b(){
window.location = “b.html”;
window.close();
}
setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b()
script>
var xmlhttp;
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.responseText;
}
}
}
xmlhttp.send(null);
如下user表结构
名称 类型 说明 备注
Uid Int unsigned 主键
Name Varchar(20)
Age Tinyint unsigned
需求:
l 增加一个字段性别sex,写出修改语句
Alert table user add sex enum(’0′,’1′);
查询出年龄介于20岁到30岁之间的用户
Select * from user where age>20 and age<30
写一个函数,算出两个文件的相对路径
如 $a = ’/a/b/c/d/e.php’;
$b = ’/a/b/12/34/c.php’;
计算出 b相对于 a 的相对路径应该是 http://www.cnblogs.com/c/d将()添上
$a=”http://www.cnblogs.com/a/b/c/d/e.php”;
$b=”http://www.cnblogs.com/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<$count;$i++){
if($arr[$i]==$brr[$i]){
$brr[$i]='..';
}else{
break;
}
}
$cha=implode('/',$brr);
print_r($cha);
写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function my_scandir($dir){
$files = array();
if ( $handle = opendir($dir) ){
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
指出以下代码片段中的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);
写出以下php代码的运行结果:
function foo($i) {
$i++;
echo $i ;
}
function bar(&$i) {
}
$i = 10 ;
echo $i++ , ++$i; 输出:10,12
foo($i); 输出:13
bar($i); 输出:无输出
$readcontents = fopen(“http://www.phpres.com/index.html”, “rb”); $contents = stream_get_contents($readcontents); fclose($readcontents); echo $contents;
方法2:
echo file_get_contents(“http://www.phpres.com/index.html”);
写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答案1:
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(“.”,$file);
return $ext[1];
}
答案2:
function getExt($url) { $url = basename($url); $pos1 = strpos($url,”.”); $pos2 = strpos($url,”?”); if(strstr($url,”?”)){ Return substr($url,$pos1 + 1,$pos2 – $pos1 – 1); } else { return substr($url,$pos1); } }
使用五种以上方式获取一个文件的扩展名
要求: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), ‘.’)));
}
$str1 = null;
$str2 = false;
echo $str1==$str2 ? ‘相等’ : ‘不相等’;
$str3 = ”;
$str4 = 0;
echo $str3==$str4 ? ‘相等’ : ‘不相等’;
$str5 = 0;
$str6 = ’0′;
echo $str5===$str6 ? ‘相等’ : ‘不相等’;
?>
相等 相等 不相等
求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
方法一:
class Dtime{
function get_days($date1, $date2){
$time1 = strtotime($date1);
$time2 = strtotime($date2);
return ($time2-$time1)/86400;
}
}
$Dtime = new Dtime;
echo $Dtime->get_days(’2007-2-5′, ’2007-3-6′);
?>
方法二:
$temp = explode(‘-’, ’2007-2-5′);
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode(‘-’, ’2007-3-6′);
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;
方法三:
echo abs(strtotime(“2007-2-1″)-strtotime(“2007-3-1″))/60/60/24//计算时间差
请写一个函数,实现以下功能:
字符串“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_implode; } $strexplode=str_explode(“make_by_id”);print_r($strexplode);
方法二:
$str=”make_by_id!”; $expStr=explode(“_”,$str); for($i=0;$i($expStr) ;$i++){ echo ucwords($expStr[$i]); }
方法三:
echo str_replace(‘ ‘,”,ucwords(str_replace(‘_’,’ ‘,’open_door’)));
有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)
function BubbleSort(&$arr){
$cnt=count($arr);
$flag=1;
for($i=0;$i<$cnt;$i++){
if($flag==0){
return;
}
$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]=$tmp;
$flag=1;
}
}
}
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);
31、.以下的代码会产生什么?为什么?
$num =10;
function multiply(){
$num =$num *10;
}
multiply();
echo $num;
由于函式 multiply() 没有指定 num为全域变量(例如global num 或者 GLOBALS[′num′]),所以 num 的值是 10。
下面的类是否正确,如果正确请补全方法输入类属性 a;错误请修改并输出属性 _a
Class A{
protected$a=1;
publicfunction test(){
echo$this->a;
}
}
答:
$a=new A;
$a->test();
请取出数组中的最大值?
$a=array(1,9,3,5,6,8);
$a=array(1,2,3,4,5,9);
答:
$b=max($a);
echo $b;
or
$a=array(1,9,3,5,6,8);
rsort($a);
Echo array_shift($a);
Class A{
Static $a=array('11'=>'1111');
}
Print_r(A::$a);
从表login中选出name字段包含admin的前10条结果所有信息的sql语句
Select *from login where name like '%admin%' limit 0,10;
写出发贴数最多的十个人名字的SQL,利用下表:
members(id,username,posts,pass,email)
SELECT * FROM `members` ORDER BY posts DESC limit 0,10;
使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来
表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
请根据上面的题目完成代码:
$mysql_db=mysql_connect("local","root","pass"); @mysql_select_db("DB",$mysql_db); $result = mysql_query("SELECT * FROM `user` WHERE name='张三'"); while($rs = mysql_fetch_array($result)){ echo $rs["tel"].$rs["content"].$rs["date"]; }
PDO写法:
Try{ $dsn = "mysql:host=localhost;dbname=user"; $pdo = new PDO($dsn,'root','123456'); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $pdo->query('set names utf8'); $sql = "SELECT * FROM user WHERE name='张三'"; $result = $pdo->query($sql); Foreach($result as $v){ Echo $v['tel'].$v['content'].$v['date']; } }catch(PDOException $e){ Echo $e->getCode().':'.$e->getMessage(); }
Mysqli写法:
$mysqli = new mysqli('localhost','root','123456','user');
If(mysqli_connect_errno()){
Die('连接数据库失败,'.mysqli_connect_error());
}
$mysqli->set_charset('utf8');
$result = $mysqli->query("SELECT * FROM user WHERE name='张三'");
If($result && $result->affected_row()){
While($row = $result->fetch_object()){
Echo $row->tel.$row->content.$row->date;
}
}
如何使用下面的类,并解释下面什么意思?
class test{
function Get_test($num){
$num=md5(md5($num)."En");
return $num;
}
}
答:$testnum = "123";
$object = new test();
$encrypt = $object->Get_test($testnum);
echo $encrypt;
类test里面包含Get_test方法,实例化类调用方法多字符串加密
写出以下程序的输出结果
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
答:4
检测一个变量是否有设置的函数是否?是否为空的函数
是?
isset($str),empty($str);
CREATE TABLE 'message'(
'id' int(10) NOT NULL auto_increment,
'title' varchar(200) default NULL,
'content' text,
'category_id' int(10) NOT NULL,
'hits' int(20),
PRIMARY KEY('id');
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
(二)同样上述新闻发布系统:表comment记录用户回复内容,字段如下
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
SELECT message.id id,message.title title,IF(message.`hits` IS NULL,0,message.`hits`) hits,
IF(comment.`id` is NULL,0,count(*)) number FROM message LEFT JOIN
comment ON message.id=comment.id GROUP BY message.`id`;
(三)上述内容管理系统,表category保存分类信息,字段如下
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单
function categoryList(){
$result=mysql_query("select category_id,categroy_name from category")
or die("Invalid query: " . mysql_error());
print(" ... ");
}
写一个函数,算出两个文件的相对路径
如 a=‘/a/b/c/d/e.php′; b = ‘/a/b/12/34/c.php’;
计算出 b相对于 a 的相对路径应该是 http://www.cnblogs.com/c/d将()添上
function getRelativePath($a, $b) {
$returnPath = array(dirname($b));
$arrA = explode('/', $a);
$arrB = explode('/', $returnPath[0]);
for ($n = 1, $len = count($arrB); $n < $len; $n++){
if ($arrA[$n] != $arrB[$n]) {
break;
}
}
if ($len - $n > 0) {
$returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..'));
}
$returnPath = array_merge($returnPath, array_slice($arrA, $n));
return implode('/', $returnPath);
}
echo getRelativePath($a, $b);
1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量 SERVER[′PHPSELF′]∗∗中;而链接到当前页面的URL记录在预定义变量∗∗ _SERVER[‘HTTP_REFERER’]中
2.执行程序段将输出0。
4.数组函数 arsort 的作用是对数组进行逆向排序并保持索引关系;语句 error_reporting(2047)的作用是报告所有错误和警告。
6.7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句_动态装载PHP模块,然后再用语句_使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
10.一个函数的参数不能是对变量的引用,除非在php.ini中把allow_call_time_pass_reference boolean设为on.
11.SQL中LEFT JOIN的含义是自然左外链接。
7.
编写一个在线留言本,实现用户的在线留言功能,留言信息存储到数据库?
假设现在有数据库:test表:mess字段:id,name,message
1、html页面,填写留言:
2、post.php页面,处理留言:
$name = $_POST['name'];
$message = $_POST['message'];
Try{
$dsn = ''mysql:host=localhost;dbname=test;
$pdo = new PDO($dsn,'root','112233');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$pdo->query('set names utf8');
$sql = "insert into test(name,message) values('$name','$message')";
$result = $pdo->exec($sql);
If($result){
Echo ‘留言成功’;
}else{
Echo '留言失败';
}
}catch(PDOException $e){
Echo $e->getCode().' : '.$e->getMessage();
}
实现不使用第3个变量,交换 a、 b的值, a、 b的初始值自己定。
$a=4; $b=5;
$a=explode(‘,’,$a.’,’.$b); //把用逗号把4,5分开。
$b=$a[0];
$a=$a[1];
echo $a,$b;
$conn=mysql_connect(‘localhost’,'root’,’12345′);
Mysql_select_db(‘test’);
$sql=”";
$result=Mysql_query($sql);
Mysql_close();
有两张数据表,表user(id, name)记录了用户的ID和昵称,表article(id, title, content, time)记录了用户发表的文章标题、内容和时间,写一个SQL语句打印出每个用户的昵称及其发表的文章总数。
Select user.name,A.id,A.总数 from user,(select id,count(*) as ’总数‘ from article group by id) as A where user.id=A.id;
Function str($a){
$len=strlen($a);
$b=”";
For($i=$len-1;$i>=0;$i–){
$b.=$a[$i];
}
Return $b;
}
$var1 = 5;
$var2 = 10;
function foo(&$my_var){
global $var1;
$var1 += 2;
$var2 = 4;
$my_var += 3;
return $var2;
}
$my_var = 5;
echo foo($my_var) . ”\n”; 4
echo $my_var . ”\n”; 8
echo $var1 . ”\n”; 7
echo $var2 . ”\n”; 10
$bar = ’foo’;
$my_var = 10;
echo $bar($my_var) . ”\n”; 4
不断在文件hello.txt头部写入一行“Hello World”字符串,要求代码完整
$fp=fopen(‘hello.txt’,'r’);
$str=’hello!’.”\n”;
$str.=fread($fp,filesize(‘hello.txt’));
fclose($fp);
$fp1=fopen(‘hello.txt’,'w’);
fwrite($fp1,$str);
输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100 — 192.168.1.150之间
Echo $ip=getenv(‘REMOTE_ADDR’);
$ip=Str_replace(‘.’,”",$ip);
If($ip<1921681150 && $ip>1921681100){
Echo ’ip在192.168.1.100—–192.168.1.150之间‘;
}Else{
Echo ’ip不在192.168.1.100—–192.168.1.150之间‘;
}
请将2维数组按照name的长度进行重新排序,按照顺序将id赋值。
$Tarray = array(
array(‘id’ => 0, ‘name’ => ‘123’),
array(‘id’ => 0, ‘name’ => ‘1234’),
array(‘id’ => 0, ‘name’ => ‘1235’),
array(‘id’ => 0, ‘name’ => ‘12356’),
array(‘id’ => 0, ‘name’ => ‘123abc’)
)
foreach($tarray as $key=>$val){
$c[]=$val['name'];
}
function aa($a,$b){
if(strlen($a)==strlen($b)) return 0;
return strlen($a)>strlen($b)?-1:1;
}
usort($c,’aa’);
$len=count($c);
for($i=0;$i<$len;$i++){
$t[$i]['id']=$i+1;
$t[$i]['name']=$c[$i];
}
echo ’’;
print_r($t);
echo ’
’;
$bool = TRUE;
echo gettype($bool);
echo is_string($bool);
?>
A. boolean
B. boolean0
C. booleanFALSE
D. booleanfalse
$a = 12;
$b = 012;
$c = 0x12;
echo$a,"\n",$b,"\n",$c;
?>
下面代码的执行结果是什么?C
$a =array(1=>5,5=>8,22,2=>'8',81);
echo $a[7];
echo $a[6];
echo $a[3];
?>
A. 空2281 B.空8122C.8122空D.空空空
$a[bar]='hello';
echo $a[bar];
echo $a['bar'];
?>
A. hello B. 空空 C.报错D.hellohello
2. 写出下面代码的结果:C
左移相当于乘2,右移相当于除2
二进制位移后
echo 1>>0; 0001 0001
echo 2>>1; 0010 0001
echo 3<<2; 0011 1100
?>
A. 012 B. 106 C. 1112 D.123
中间的i少个$
for($i=0;i<10;$i++){
print $i;
}
?>
A. 0123456789 B. 012345678910 C. 无输出
D. 死循环
$fruits = array('strawberry'=>'red','banana'=>'yellow');
?>
能够正确得到结果’yellow’的代码是:ACD
A. echo "A banana is{$fruits['banana']}";
B. echo "A banana is$fruits['banana']";
C. echo "A banana is{$fruits[banana]}";
D. echo "A banana is$fruits[banana]";
function change(){
static $i = 0;
$i++;
return $i;
}
print change(); //1
print change(); //2
?>
下面的include语句不正确的是?A
A. include “mms://www.abc.com/a.php”;
B. include”http://www.abc.com/a.php“;
C. include”https://www.abc.com/a.php“;
D. include”ftp://www.abc.com/home/a.php“;
$foo = 'test';
$bar = <<<'EOT'
$foobar
EOT;
echo$bar;
?>
上面的语句输出结果 (a): A
a. foobar;b.‘EOT′ foo bar EOT;
c. test bar;
d. ‘EOT’ test bar EOT;
$a=3;$b=4;
if($a||$b=5){ ||或和|的区别
echo 'todo';
}
$b的值是(a): A
a. 4;
b. 5;
c. 3;
d. False
如何提高php应用的性能
1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
2、 row[′id′]的速度是 row[id]的7倍。
3、echo 比 print快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo str1, str2。
4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
5、注销那些不用的变量尤其是大数组,以便释放内存。
6、尽量避免使用__get,__set,__autoload。
7、require_once()代价昂贵。
8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于 time()。
10、函数代替正则表达式完成相同功能。
11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
14、用@屏蔽错误消息的做法非常低效,极其低效。
15、打开apache的mod_deflate模块,可以提高网页的浏览速度。
16、数据库连接当使用完毕时应关掉,不要用长连接。
17、错误消息代价昂贵。
18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
19、递增一个全局变量要比递增一个局部变量慢2倍。
20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下)
if (strlen( foo)<5)echo“Fooistooshort”$$(与下面的技巧做比较)if(!isset( foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或 Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
36、并非要用类实现所有的数据结构,数组也很有用。
37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
38、当你需要时,你总能把代码分解成方法。
39、尽量采用大量的PHP内置函数。
40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作;
46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
48、多维数组尽量不要循环嵌套赋值;
49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
50、foreach效率更高,尽量用foreach代替while和for循环;
51、用单引号替代双引号引用字符串;
52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
53、对global变量,应该用完就unset()掉。
谈谈asp,php,jsp的优缺点
ASP全名Active Server Pages,是一个WEB服务器端的开发环境, 利用它可以产生和运
行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VB Script(Java script
)作为自己的开发语言。
PHP是一种跨平台的服务器端的嵌入式脚本语言. 它大量地借用C,Java和Perl语言的语法
, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面.它支持目前绝大多数数
据库。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.ne
t)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
JSP 是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病--
脚本级执行(据说PHP4 也已经在Zend 的支持下,实现编译运行).Sun 公司借助自己在Jav
a 上的不凡造诣,将Java 从Java 应用程序 和 Java Applet 之外,又有新的硕果,就是Js
p--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能强大的站点
程序。
三者都提供在 HTML 代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。
但JSP代码被编译成 Servlet 并由 Java 虚拟机解释执行,这种编译操作仅在对 JSP 页面的
第一次请求时发生。在 ASP 、PHP、JSP 环境下, HTML 代码主要负责描述信息的显示样式
,而程序代码则用来描述处理逻辑。普通的 HTML 页面只依赖于 Web 服务器,而 ASP 、PH
P、JSP 页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到
HTML 代码中,然后一起发送给浏览器。 ASP 、PHP、 JSP三者都是面向 Web 服务器的技术
,客户端浏览器不需要任何附加的软件支持。
在quirks mode 和 strict mode中还有一个区别?
在strict mode 中:
table的css属性font-size会继承父级元素的 ,也就是说,table中的字体大小会继承父级元素字体的大小。
在quirks mode 中:
table的css属性font-size不会继承父级元素的 ,需要专门设置一下。也就是说,table中的字体大小不会继承父级元素字体的大小。