Heim >Backend-Entwicklung >PHP-Tutorial >php面试题及答案
答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. session与cookie的区别?
(1)、session保存在服务器,客户端不能获取其中的信息;cookie保存在客户端,服务器能够获取其中的信息。
(2)、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。(3)、session需要借助cookie才能正常工作。如果客户端完全禁止cookie且不通过url传值,session将失效。
(4)、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
答:事务(transaction)是一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
答:echo date('Y-m-d H:i:s', strtotime('-1 day'));
答:echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
答:cvs,svn,vss;
答:echo strrev($a);
答:1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM
2、使用连接(JOIN)来代替子查询:
3、使用联合(UNION)来代替手动创建的临时表
4、事务处理:
5、锁定表,优化事务处理:
6、使用外键,优化锁定表
7、建立索引:
8、优化查询语句
答:now(),date()
mb_substr()
function GBsubstr($string, $start, $length) { if(strlen($string)>$length){ $str=null; $len=$start+$length; for($i=$start;$i0xa0){ $str.=substr($string,$i,2); $i++; }else{ $str.=substr($string,$i,1); } } return $str.'...'; }else{ return $string; }}
TortoiseSVN;
答:使用缓存/镜像,确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表, 程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量
答:
方法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);
答:方法1(对于PHP5及更高版本):
$readcontents = fopen("http://www.scutephp.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents); echo $contents;
方法2:
echo file_get_contents("http://www.scutephp.com/index.html");
答:由模型(model),视图(view),控制器(controller)完成的应用程序 由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
答:
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
答:设置错误级别与错误信息回报
答:function checkEmail($email) { $pregEmail = "/([a-z0-9]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?/i"; return preg_match($pregEmail,$email); }
答:$script_name = basename(__file__); print_r($script_name);
答:弹出对话框: alert(),prompt(),confirm() 获得输入焦点 focus()
答:window.location.href,<script></script>
答:@foo()忽略错误输出
答:class myclass{ }
答:new myclass()
答:$object = new myclass(); $newstr = $object->test; $object->test = "info";
答:mysql_fetch_row是从结果集取出1行数组,作为枚举 mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得
答:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,text文本字符串 char的场地固定为创建表设置的长度,varchar为可变长度的字符
答:isset($str),empty($str);
答:mysql_num_rows($result);
答:public(公共),private(私用),protected(继承)
答:__construct , __destruct
id 文章id title 文章标题 content 文章内容 category_id 文章分类id hits 点击量答: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;
答案1:end(explode(‘,’, basename($url)));
2.执行程序段将输出__0__。
PEAR中的数据库连接字符串格式是____。
$dsn = "mysql://root:123@192.168.0.1/testdb";
6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把scrīpt标记及其内容都去掉):
preg_replace("/<script>].*?>.*?</script>/si", "newinfo", $script);
7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
LoadModule php5_module "c:/php/php5apache2.dll" ,
AddType application/x-httpd-php .php,
3、防止SQL注入漏洞可以用哪些函数?
addslashes()
mysql_escape_string()
4、用PHP写出显示客户端IP与服务器IP的代码
echo $_SERVER[‘REMOTE_ADDR’];
echo $_SERVER[‘SERVER_ADDR’];
<p>function dir_recurse($dir) </p><p>{</p><p> $i = 1;</p><p> if($handle = opendir($dir)) {</p><p> while(false !== ($file = readdir($handle))) {</p><p> if($file != "." && $file != ".." ) {</p><p> if(is_dir($dir."/".$file) == true) {</p><p> $fullpath = $dir."/".$file;</p><p> dir_recurse($fullpath);</p><p> echo "$fullpathn";</p><p> $i++;</p><p> }else {</p><p> $fullpath = $dir."/".$file;</p><p> echo "$fullpathn";</p><p> $i++;</p><p> }</p><p> }</p><p> }</p><p> closedir($handle);</p><p> }</p><p>} </p>
7、创建文件exer1,设置访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,写出操作过程的命令
touch exer1
chmod 644 exer1
增加权限
chmod a+x exer1
chmod g+w exer1 或者chmod 775 exer1
Php实现: echo strtoupper(‘to upper case’)
Shell实现:echo "to upper case" | tr 'a-z' 'A-Z'
Js实现:<script></script>
var stmp1 = " to upper case ";
9、用root登陆mysql数据库,如果mydb不存在,则在mysql中创建数据库mydb,给root用户分配所有权限从192.168.1.1 ip来访问mysdb数据库。(root用户密码为空)
CREATE DATABASE IF NOT EXISTS mydb;
grant all on mydb.* to root@’ 192.168.1.1’ identified by '' ;
11.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的URL记录在预定义变量(2)中。
3.在HTTP 1.0中,状态码 401 的含义是(4);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(5)。
答:(4)未授权 (5) header("HTTP/1.0 404 Not Found");
4.数组函数 arsort 的作用是(6);语句 error_reporting(2047)的作用是(7)。
答:(6)对数组进行逆向排序并保持索引关系 (7)All errors and warnings
8.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是(14)。
答:serialize() /unserialize()
答:allow_call_time_pass_reference
strrev($str)<br />{<br /> $len=strlen($str);<br /> $newstr = '';<br /> for($i=$len;$i>=0;$i--)<br /> {<br /> $newstr .= $str{$i};<br /> }<br /> return $newstr;<br />}
1)<br />get_ext1($file_name)<br />{<br /> return strrchr($file_name, '.');<br />}<br /><br />2)<br />get_ext2($file_name)<br />{<br /> return substr($file_name, strrpos($file_name, '.'));<br />}<br /><br />3)<br />get_ext3($file_name)<br />{<br /> return array_pop(explode('.', $file_name));<br />}<br /><br />4)<br />get_ext4($file_name)<br />{<br /> $p = pathinfo($file_name);<br /> return $p['extension'];<br />}<br /><br />5)<br />get_ext5($file_name)<br />{<br /> return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.')));<br /><p>}</p>
$_SERVER[‘REMOTE_ADDR’]
mysql_fetch_row() 把数据库的一列储存在一个以零为基数的阵列中,第一栏在阵列的索引 0,第二栏在索引 1,如此类推。mysql_fetch_assoc() 把数据库的一列储存在一个关联阵列中,阵列的索引就是栏位名称,例如我的数据库查询送回“first_name”、“last_name”、 “email”三个栏位,阵列的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同时送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
29.防止SQL注射漏洞一般用__addslashes___函数。