速度快,编译型,缓存技术,插件机制,强大的表现逻辑
safe_mode,PHP安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被完全的禁止,而另一些函数的功能将会受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。 注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性完全去除了。
file_get_contents或者curl
PHP可以自动进行内存管理,清除不再需要的对象。 PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
核心思路:加锁
<?php $fp = fopen("lock.txt","w+"); if (flock($fp,LOCK_EX)) { //获得写锁,写数据 fwrite($fp, "write something"); // 解除锁定 flock($fp, LOCK_UN); } else { echo "file is locking..."; } fclose($fp); ?>创建类别表如下:
CREATE TABLE category( cat_id smallint unsigned not null auto_increment primary key comment'类别ID', cat_name VARCHAR(30)NOT NULL DEFAULT''COMMENT'类别名称', parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT'类别父ID' )engine=MyISAM charset=utf8;编写一个函数,递归遍历,实现无限分类
<?php function tree($arr,$pid=0,$level=0){ static $list = array(); foreach ($arr as $v) { //如果是顶级分类,则将其存到$list中,并以此节点为根节点,遍历其子节点 if ($v['parent_id'] == $pid) { $v['level'] = $level; $list[] = $v; tree($arr,$v['cat_id'],$level+1); } } return $list; } ?>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()的值。
方法1(对于PHP5及更高版本):
$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");由模型(model),视图(view),控制器(controller)完成的应用程序。 model层负责提供数据,和数据库有关的操作都交给模型层来处理,view层则提供交互的界面,并输出数据,而controller层则负责接收请求,并分发给相应的model来处理,然后调用view层来显示。
GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。自从PHP 4.3.0版本后GD便内建在PHP系统中。
A.fget(); B.file_open(); C.fopen(); D.open_file(); 答案:C fget()这不是一个PHP函数,会引致执行错误。 file_open()这不是一个PHP函数,会引致执行错误。 fopen()这是正确答案,fopen()可以用来开启档案以便读写。 open_file()这不是一个PHP函数,会引致执行错误。
smarty是一个模板引擎,使用smarty主要是为了实现逻辑和外在内容的分离,如果不使用模板的话,通常的做法就是php代码和html代码混编。使用了模板之后,则可以将业务逻辑都放到php文件中,而负责显示内容的模板则放到html文件中。 Smarty在执行display方法的时候,读取模板文件,并进行数据替换,生成编译文件,之后每次访问都会直接访问编译文件,读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)。 如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。
smarty,phplib等
Smarty
方法一:php函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。 header("Location:网址");//直接跳转 header("refresh:3;url=http://axgle.za.NET");//三秒后跳转
方法二:利用meta echo"<meta http-equiv=refresh content='0;url=网址'>";
可以
SVN或者CVS
TortoiseSVN-1.2.6
过滤JavaScript脚本参考:
<?php header("content-type:text/html;charset=utf-8"); $script = "以下内容不显示:<script type='text/javascript'>alert('cc');</script>"; $pattern = '/<script[^>]*?>.*?</script>/si'; echo preg_replace($pattern, "脚本内容", $script);//以下内容不显示:脚本内容 ?>方案一,使用PHP内建函数strip_tags()除去HTML标签 方案二,自定义函数,如下:
<?php header("content-type:text/html;charset=utf-8"); function strip_html_tags($str){ $pattern = '/<("[^"]*"|\'[^\']\*\'|[^>"\'])*>/'; return preg_replace($pattern,'',$str); } // 实例 $html = '<p id="">ddddd<br /></p>'; echo strip_html_tags($html); echo "<br />"; $html = '<p id=">">bb<br />aaa<br /></p>'; echo strip_html_tags($html); ?>preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);
主要区别有以下三种:
preg_replace()里面的正则可以写成型如:"/.xxx/"而ereg_replace()里面的正则需写成型如 "xxx"preg_replace()能操作数组,而ereg_replace()不可以在逆向引用用preg_replace()可使用0-99个,而ereg_replace()最多为9个使用Perl兼容正则表达式语法的preg_match()函数通常是比ereg()更快的替代方案。
首先进入php安装目录 php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件 php -r phpinfo(); 其中-r表示直接执行php代码,无需写开始结束标记
编写如下函数:
<?php header("content-type:text/html;charset=utf-8"); function getAttrValue($str,$tagName,$attrName){ $pattern1="/<".$tagName."(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\2))*\\s+".$attrName."\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)(\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i"; $arr=array(); $re=preg_match($pattern1,$str,$arr); if($re){ echo"<br/>\$arr[6]={$arr[6]}"; }else{ echo"<br/>没找到。"; } } // 示例 $str1="<test attr='ddd'>"; getAttrValue($str1,"test","attr");//找test标签中attr属性的值,结果为ddd $str2="<test2 attr='ddd'attr2='ddd2't1=\"t1 value\"t2='t2 value'>"; getAttrValue($str2,"test2","t1");//找test2标签中t1属性的值,结果为t1 value ?>这是把一个日期从MM/DD/YYYY的格式转为DD/MM/YYYY格式。 输出26/08/2003
A.redir() B.header() C.location() D.redirect() 答案:B redir()这不是一个PHP函数,会引致执行错误。 header()这个是正确答案,header()函数发送头信息,可以用来使浏览器转向到另一个页面,例如:header("Location:http://www.search-this.com/")。 location()这不是一个PHP函数,会引致执行错误。 redirect()这不是一个PHP函数,会引致执行错误。
28.When turned on____________will_________your script with different variables from HTML forms and cookies.(腾讯) A.show_errors,enable B.show_errors,show C.register_globals,enhance D.register_globals,inject 答案:C
29.一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on。 allow_call_time_pass_reference 是否启用在函数调用时强制参数被按照引用传递
请注意: (1)需要处理完整的html页面,即不光此meta语句 (2)忽略大小写 (3)'和"在此处是可以互换的 (4)'Content-Type'两侧的引号是可以忽略的,但'text/html;charset=gbk'两侧的不行 (5)注意处理多余空格 编写正则表达式如下: $reg1="/(<meta\\s*http-equiv\\s*=\\s*(['\"]?)Content-Type(\\2)\\s*content\\s*=\\s*(['\"])text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";
使用key()可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。 使用array_keys()则可以得到数组中所有的键名。 使用foreach结构foreach($arr as key=> value)可以通过 key和 value分别获取键名和值。
写出在模板页的代码?若用foreach语句又要怎样显示呢?
用section语句:
<{section name=test loop=$data start=0 step=1}> id:<{$data[test].id}><br/> name:<{$data[test].name}><br/><br/> <{sectionelse}> 数组为空 <{/section}>用foreach语句:
<{foreach from=$data item=test}> id:<{$test.id}><br/> name:<{$test.name}><br/><br/> <{foreachelse}> 数组为空 <{/foreach}>B.*****xyz1 C.******xyz2 D.*xyz 答案:C
A.E_WARNING B.E_USER_ERROR C.E_PARSE D.E_NOTICE 答案:B
A.E_WARNING B.E_USER_ERROR C.E_PARSE D.E_NOTICE 答案:C
匹配以0个或多个空白符开头或者0个或多个空白符结尾的字符串
可以,还可以在需要控制的子目录下创建.htaccess文件,写入访问控制。
从以下几个方面考虑:
数据库中库和表都用utf8编码php连接mysql,指定数据库编码为utf8 mysql_query(“set names utf8”);php文件指定头部编码为utf-8header(“content-type:text/html;charset=utf-8”);网站下所有文件的编码为utf8html文件指定编码为utf-8<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>urlencode()
md5( str);sha1( str);
htmlspecialchars或者htmlentities
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO等
FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
上传文件的表单使用post方式,并且要在form中添加enctype='multipart/form-data'。 一般可以加上隐藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。 value的值是上传文件的客户端字节限制。可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。 使用file文件域来选择要上传的文件,当点击提交按钮之后,文件会被上传到服务器中的临时目录,在脚本运行结束时会被销毁,所以应该在脚本结束之前,将其移动到服务器上的某个目录下,可以通过函数move_uploaded_file()来移动临时文件,要获取临时文件的信息,使用$_FILES。
限制上传文件大小的因素有:
客户端的隐藏域MAX_FILE_SIZE的数值(可以被绕开)。服务器端的upload_max_filesize,post_max_size和memory_limit。这几项不能够用脚本来设置。自定义文件大小限制逻辑。即使服务器的限制是能自己决定,也会有需要个别考虑的情况。所以这个限制方式经常是必要的。UBB代码是HTML的一个变种,通过程序自定义我们的标签,比如“[a]PHP中UBB的使用[/a]”这样的标签,其实质就是查找[a][/a]标签,将其替换成的标准html,说白了,就是将标准的html标记通过技术手段使其简化,其输出出来的结果还是标准的html。 明白了ubb的原理,那么再制作一个简单的ubb编辑器就不难了,和fck之类的编辑器比较起来,ubb代码最大的优点就是代码简单,功能很少,简单的ubb只需要一个文件,而且ubb标签可以自己来定义,更改起来很方便,在php中就是利用替换函数就可以将 html进行标签化,输出时进行标签的转化。
可以自己设置上传文件的保存目录,与文件名拼凑形成一个文件路径,使用move_uploaded_file(),就可以完成将文件保存到指定目录。 可以通过上传的文件名获取到文件后缀,然后使用时间戳+随机数+文件后缀的方式为文件重新命名,这样就避免了重名。
debug_print_backtrace()
使用{$smarty.now}来获取当前时间,得到的是unix系统时间戳 使用变量调节器进行格式化,如下: {$smarty.now|date_format:“%Y-%m-%d%H:%M:%S”}
$smarty.get.变量 #显示通过get方式传过来的指定变量的值 $smarty.post.变量 #显示通过post方式传过来的指定变量的值 $smarty.cookies.变量 #显示通过cookie中指定变量的值 $smarty.server.SERVER_NAME #显示server变量值,$_SERVER系列变量 $smarty.env.PATH #显示系统环境变量值,$_ENV系列变量 $smarty.session.变量 #显示session中指定变量的值 $smarty.request.变量 #显示通过post、get、cookie中指定变量的值
使用模板分隔符包含,传递参数则使用HTML属性的方式,例如: {html_image file="pumpkin.jpg"}
mysql,gd,pdo,XML,zip,filesystem,mail等
utf8_to_gb2312或者utf8togb2312
如果REQUEST_FILENAME文件存在,就直接访问文件,不进行下面的rewrite规则, 如果REQUEST_FILENAME目录存在,就直接访问目录,不进行下面的rewrite规则, RewriteRule./index.php[L]的意思是把所有的请求都给index.php处理。
一般是在header、set_cookie以及session_start函数前面有输出(包括空格)的情况下,会报该警告信息