第一篇:php重要知识点总结(PHP网络开发必背)
PHP网站开发必用知识点总结,函数一览,开发必背
魔术方法
__construct()当实例化一个对象的时候,这个对象的这个方法首先被调用。
__destruct()当删除一个对象或对象操作终止的时候,调用该方法。
__get()当试图读取一个并不存在的属性的时候被调用。
__set()当试图向一个并不存在的属性写入值的时候被调用。
__call()当试图调用一个对象并不存在的方法时,调用该方法。
__toString()当打印一个对象的时候被调用
__clone()当对象被克隆时,被调用
__isset()__unset()__autoload($classname)__sleep()__wakeup()
系统常量
__FILE__ 当前文件名
__LINE__ 当前行数
__FUNCTION__ 当前函数名
__CLASS__ 当前类名
__METHOD__ 当前对象的方法名
PHP_OS 当前系统
PHP_VERSION php版本
DIRECTORY_SEPARATOR 根据系统决定目录的分隔符 /
PATH_SEPARATOR 根据系统决定环境变量的目录列表分隔符;:
E_ERROR 1
E_WARNING 2
E_PARSE 4
E_NOTICE 8
M_PI
3.141592
$_SERVER
$_ENV 执行环境提交至脚本的变量
$_GET
$_POST
$_REQUEST
$_FILES
$_COOKIE
$_SESSION
$_GLOBALS 输出 echo
//Output one or more strings print
//Output a string print_r()//打印关于变量的易于理解的信息。
var_dump()//打印变量的相关信息
var_export()//输出或返回一个变量的字符串表示
printf(“%.1f”,$num)//Output a formatted string
sprintf()//Return a formatted string
编码转换
string mb_convert_encoding(string $str , string $to_encoding [, mixed $from_encoding ])iconv();时间
date_default_timezone_set(“PRC”);date(“Y-m-d H:i:s”);time();date(“Y-m-d H:i:s”,time()+3600)ini_set('date.timezone', 'PRC');msec sec microtime()以秒返回时间戳 explode(' ', microtime())
错误处理
@1/0 error_reporting(E_ALL)显示所有错误
error_reporting(0)trigger_error(“Cannot divide by zero”, E_USER_ERROR);try {
throw new Exception(“执行失败”);} catch(Exception $ex){
echo $ex;}
字符串处理
string trim(“eee ”)trim('ffffe','e')//ltrim rtrim array explode(“.”, “fff.ff.f”)按指定字符切割
string implode(“.”, $array)别名:join
把数组值数据按指定字符连接起来
array str_split(“eeeeeeee”,4)按长度切割字符串
array split(“-”,“fff-ff-f”)按指定字符切割
int strlen('ffffffff')取字符长度
string substr(string $string , int $start [, int $length ])
substr($a,-2, 2)截取字符
int substr_count($text, 'is')字符串出现的次数 string strstr($text, 'h')第一次出现h后的字符串
//别名:strchr int strpos($text, 'h')第一次出现h的位置
strrpos();最后一次出现h的位置
str_replace('a', 'ttt', $t)把$t里的'a'替换为'ttt'
strtr($t,'is','ppp')把$t中'is'替换成'ppp'
strtr(“hi all, I said hello”, array(“hello” => “hi”))把'hello'转换成'hi' string md5_file('1.txt',false)文件数据md5加密
int strcmp(string str1, string str2)字符串比较
int strcasecmp(string str1, string str2)忽略大小写
string str_pad($i, 10, “-=”, STR_PAD_LEFT)在原字符左边补'-=',直到新字符串长度为10
STR_PAD_RIGHT
STR_PAD_BOTH string str_repeat('1', 5)重复5个1
void parse_str('id=11');echo $id;将字串符解析为变量
array preg_grep(“/^(d+)?.d+$/”, array(11.2,11,11.2))匹配数据
array preg_split(“/[s,]+/”, “hypertext language,programming”);按指定的字符切割
array pathinfo(string path [, int options])返回文件路径的信息
string basename(string path [, string suffix])返回路径中的文件名部分
string dirname(string path)$_SERVER[PHP_SELF] 返回路径中的目录部分
string nl2br(“foo isn'tn bar”)“foo isn't
bar” 把换行转成
string chr(int ascii)
* mixed str_word_count(string string [, int format [, string charlist]])string str_shuffle('abc')打乱字符串顺序
string strrev($str)*
翻转一个字符串
string strtolower($str)*
将字符串 $str 的字符全部转换为小写的string strtoupper($str)*
将字符串 $str 的字符全部转换为大写的string ucfirst($str)
*
将字符串 $str 的第一个单词的首字母变为大写。
string ucwords($str)
*
将字符串 $str 的每个单词的首字母变为大写。
string addslashes(“I'm”)I'm 使用反斜线引用字符串 这些字符是单引号(')、双引号(“)、反斜线()与 NUL(NULL 字符)
string stripcslashes(”I'm“)I'm 将用addslashes()函数处理后的字符串返回原样
strip_tags(”
tt
“, '')去除html、xml、php标记,第二个参数用来保留标记
string urlencode(string str)string urldecode(string str)string htmlspecialchars(”Test“, ENT_QUOTES)转换特殊字符为HTML字符编码
ENT_COMPAT –对双引号进行编码,不对单引号进行编码
ENT_QUOTES –对单引号和双引号进行编码
ENT_NOQUOTES –不对单引号或双引号进行编码
string htmlentities('
ff
', ENT_QUOTES)转换特殊字符为HTML字符编码,中文会转成乱码数组处理
int count(mixed var [, int mode])别名:sizeof()取数组长度
string implode(”.“, $array)别名:join
把数组值数据按指定字符连接起来
array explode(”.“, ”fff.ff.f“)按指定字符切割
array range(0, 6, 2)返回数组 array(0,2,4,6)第一个参数为起使数,第二个参数为结束数,第三个参数为数据增加步长
int array_push($a, ”3“, 1)把'3'、'1'压入$a,将一个或多个单元压入数组的末尾(入栈),第二个参数开始就是压入的数据
void unset(mixed var [, mixed var [,...]])array array_pad($a, 5, 's')用's'将数组填补到指定长度
bool shuffle(array $array)将数组打乱
mixed array_rand(array input [, int num_req])从数组中随机取出一个或多个单元的索引或键名
array array_count_values(array input)统计数组中所有的值出现的次数
array array_combine(array keys, array values)创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
bool array_key_exists(mixed key, array search)检查给定的键名或索引是否存在于数组中
mixed array_search(mixed needle, array haystack [, bool strict])在数组中搜索给定的值,如果成功则返回相应的键名
bool is_array(mixed var)bool in_array(mixed needle, array haystack [, bool strict])检查数组中是否存在某个值
number array_sum(array array)计算数组中所有值的和
array array_unique(array array)移除数组中重复的值
mixed reset(array &array)将数组的内部指针指向第一个单元
mixed current(array &array)mixed next(array &array)mixed prev(array &array)mixed end(array &array)mixed key(array &array)array array_keys(array input [, mixed search_value [, bool strict]])返回数组中所有的键名
array array_values(array input)返回数组中所有的值
bool print_r(mixed expression [, bool return])void var_dump(mixed expression [, mixed expression [,...]])int array_unshift(array &array, mixed var [, mixed...])在数组开头插入一个或多个单元
mixed array_shift(array &array)将数组开头的单元移出数组
mixed array_pop(array &array)将数组最后一个单元弹出(出栈)
array array_splice(array $input, int offset [, int length [, array replacement]])把数组中的一部分去掉并用其它值取代
array array_merge(array array1 [, array array2 [, array...]])合并一个或多个数组
array array_flip(array trans)交换数组中的键和值
int extract(array var_array [, int extract_type [, string prefix]])从数组中将变量导入到当前的符号表
array compact(mixed varname [, mixed...])建立一个数组,包括变量名和它们的值
bool sort(array &array [, int sort_flags])从最低到最高重新安排
bool natsort($a)用“自然排序”算法对数组排序
bool rsort(array &array [, int sort_flags])对数组进行逆向排序(最高到最低)
bool asort(array &array [, int sort_flags])对数组进行排序并保持索引关系
bool arsort(array &array [, int sort_flags])对数组进行逆向排序并保持索引关系
bool ksort(array &array [, int sort_flags])对数组按照键名排序
bool krsort(array &array [, int sort_flags])对数组按照键名逆向排序
array array_filter(array input [, callback callback])用回调函数过滤数组中的单元
bool array_walk(array &array, callback funcname [, mixed userdata])对数组中的每个成员应用用户函数
array array_map(callback callback, array arr1 [, array...])将回调函数作用到给定数组的单元上
array array_fill(int start_index, int num, mixed value)用给定的值填充数组
array_fill(5, 3, 'a')-->array(5=>'a',6=>'a',7=>'a')array array_chunk(array input, int size [, bool preserve_keys])将一个数组分割成多个
其他
isset()变量是否存在
boolean empty()检查变量是否存在,并判断值是否为非空或非0
void unset()销毁变量
header('Content-Type: text/html;charset=utf-8');method_exists($obj, $method)判断对象的方法是否可用
file_exists($file)判断文件是否存在function_exists();class_exists($class_name);
gettype();获取数据类型
set_magic_quotes_runtime()0 for off, 1 for on 当遇到反斜杆、单引号,将会自动加上一个反斜杆,保护系统和数据库的安全
ini_set();安全
function strReplace($str){
$strResult = $str;
if(!get_magic_quotes_gpc())//判断设置是否开启
{
$strResult = addslashes($strResult);//转换sql语句特殊字符
}
return $strResult;} function quotes($content){
//如果magic_quotes_gpc=Off,那么就开始处理
if(!get_magic_quotes_gpc())
{
//判断$content是否为数组
if(is_array($content))
{
//如果$content是数组,那么就处理它的每一个单无
foreach($content as $key=>$value)
{
$content[$key] = addslashes($value);
}
}
else
{
//如果$content不是数组,那么就仅处理一次
addslashes($content);
}
}
//返回$content
return $content;}
smarty 模板引擎将不分析
function t(){
}
读取配置文件
引入文件
$trusted_dir 指定目录下的文件
捕获模板输出的数据
fffffffff
循环
<{section name=loop loop=$News_IN}>
<{$News_IN[loop].NewsID}>
<{/section}>
<{foreach from=$newsArray item=newsID key=k}>
新闻编号:<{$newsID.newsID}>
新闻内容:<{$newsID.newsTitle}>
<{/foreach}> 判断
1111
22222222
时间
{$smarty.now|date_format:”%Y-%m-%d %H:%M:%S“}
%Y年%m月%d日 乱码
修改插件:plugins/modifier.date_format.php
$format = mb_convert_encoding($format,'gbk','utf-8');
return mb_convert_encoding(strftime($format, $timestamp),'utf-8','gbk');
局部不缓存
html:
php:
$smarty->register_block('cacheless', 'smarty_block_dynamic', false);//true:缓存,false:不缓存
function smarty_block_dynamic($param, $content, &$smarty)
{
return $content;
}
php:
function insert_kk()//方法名前必须有”insert“
{
return date('Y-m-d H:i:s');
}
html:
自定义方法
注册方法
php
$smarty->register_function('test1', 'test');
function test($p)
{
return 'ffffffffff';
}
html:
-----------------
方法自定义
插件文件方式定义方法
function.test.php 文件存在plugins目录下,smarty_function_test($params, &$smarty)
function smarty_function_test($params, &$smarty)
{
return 'fff';
}
html调用:
---------------------
插入方法
插件文件:insert.kk.php文件存于plugins目录下
function smarty_insert_kk()
{
return date('Y-m-d H:i:s');
}
php:
function insert_kk()//方法名前必须有”insert“
{
return date('Y-m-d H:i:s');
}
html:
------------------
管道符自定义方法
方法名:
插件文件方式定义方法
modifier.test.php 文件存在于plugins目录下,方法名: function smarty_modifier_test($str, $str2)
function smarty_modifier_test($str, $str2)
{
return $str.$str2;
}
html调用:
php:
function eee($a)
{
return 'ffffffffffffff';
}
html:
if语句
eq相等,ne、neq不相等,gt大于
gte、ge大于等于,lte、le 小于等于,not非,mod求模。
is [not] div by是否能被某数整除,is [not] even是否为偶数,$a is [not] even by $b 即($a / $b)% 2 == 0
is [not] odd是否为奇
$a is not odd by $b即($a / $b)% 2!= 0
XML
sax
xml:
<--?xml version=”1.0“ encoding=”utf-8“?-->
O'Reilly
O'Reilly
出版者
php:
$g_books = array();
$g_elem = null;
function startElement($parser, $name, $attrs)
{
global $g_books, $g_elem;
if($name == 'BOOK')$g_books []= array();
$g_elem = $name;
}
function endElement($parser, $name)
{
global $g_elem;
$g_elem = null;
}
function textData($parser, $text)
{
global $g_books, $g_elem;
if($g_elem == 'AUTHOR' ||
$g_elem == 'PUBLISHER' ||
$g_elem == 'TITLE')
{
$g_books[ count($g_books)”.$book['AUTHOR'].“$author-$publisher
”;
}
php生成:
$books = array();
$books [] = array('title' => 'PHP Hacks','author' => 'Jack Herrington','publisher' => “O'Reilly”);
$books [] = array('title' => 'Podcasting Hacks','author' => 'Jack Herrington','publisher' => “O'Reilly”);
$doc = new DOMDocument();
$doc->formatOutput = true;
$r = $doc->createElement(“books”);
$doc->appendChild($r);
foreach($books as $book)
{
$b = $doc->createElement(“book”);
$author = $doc->createElement(“author”);
$author->appendChild($doc->createTextNode($book['author']));
$b->appendChild($author);
$title = $doc->createElement(“title”);
$title->appendChild($doc->createTextNode($book['title']));
$b->appendChild($title);
$publisher = $doc->createElement(“publisher”);
$publisher->appendChild($doc->createTextNode($book['publisher']));
$b->appendChild($publisher);
$r->appendChild($b);
}
echo $doc->saveXML();
echo $doc->save('222.xml');
SimpleXML
xml:
O'Reilly
php:
$xml = new SimpleXMLElement('1.xml', NULL, TRUE);
echo $xml->book[0]->author.“___”.$xml->book[0]->title.“___”.$xml->book[0]->publisher;正则
ereg系列的正则表达式不需要定届符,preg系列的才需要,并且定界符可以自己选择,只有前后一对就行,比如我们一般使用/符号,但是如果里面有/需要匹配那么就需要使用/来表示,当/需要出现多次的时候,这样就不方便,我们就可以使用其他的定界符,比如|
正则特殊字符
.+ * ? [ ^ ] $(){ } =!< > | :
由原子(普通字符,如英文字符)、元字符(有特殊功用的字符)
模式修正字符
一个正则表达式中,至少包含一个原子
全部符号解释
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 “n”。'n' 匹配一个换行符。序列 '' 匹配 “" 而 ”(“ 则匹配 ”(“。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 'n' 或 'r' 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 'n' 或 'r' 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 ”z“ 以及 ”zoo“。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 ”zo“ 以及 ”zoo“,但不能匹配 ”z“。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,”do(es)?“ 可以匹配 ”do“ 或 ”does“ 中的”do“。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 ”Bob“ 中的 'o',但是能匹配 ”food“ 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 ”Bob“ 中的 'o',但能匹配 ”foooood“ 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}“ 将匹配 ”fooooood“ 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 ”oooo“,'o+?' 将匹配单个 ”o“,而 'o+' 将匹配所有 'o'。
.匹配除 ”n“ 之外的任何单个字符。要匹配包括 'n' 在内的任何字符,请使用象 '[.n]' 的模式。
(pattern)匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0„$9 属性。要匹配圆括号字符,请使用 '(' 或 ')'。
(?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 ”或“ 字符(|)来组合一个模式的各个部分是很有用。例如,'industr(?:y|ies)就是一个比 'industry|industries' 更简略的表达式。
(?=pattern)正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows(?=95|98|NT|2000)' 能匹配 ”Windows 2000“ 中的 ”Windows“,但不能匹配 ”Windows 3.1“ 中的 ”Windows“。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows(?!95|98|NT|2000)' 能匹配 ”Windows 3.1“ 中的 ”Windows“,但不能匹配 ”Windows 2000“ 中的 ”Windows“。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配 x 或 y。例如,'z|food' 能匹配 ”z“ 或 ”food“。'(z|f)ood' 则匹配 ”zood“ 或 ”food“。
[xyz] 字符集合。匹配所包含的任意一个字符。例如,'[abc]' 可以匹配 ”plain“ 中的 'a'。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如,'[^abc]' 可以匹配 ”plain“ 中的'p'。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
b 匹配一个单词边界,也就是指单词和空格间的位置。例如,'erb' 可以匹配”never“ 中的 'er',但不能匹配 ”verb“ 中的 'er'。
B 匹配非单词边界。'erB' 能匹配 ”verb“ 中的 'er',但不能匹配 ”never“ 中的 'er'。
cx 匹配由 x 指明的控制字符。例如,cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。
d 匹配一个数字字符。等价于 [0-9]。
D 匹配一个非数字字符。等价于 [^0-9]。
f 匹配一个换页符。等价于 x0c 和 cL。
n 匹配一个换行符。等价于 x0a 和 cJ。
r 匹配一个回车符。等价于 x0d 和 cM。
s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
S 匹配任何非空白字符。等价于 [^ fnrtv]。
t 匹配一个制表符。等价于 x09 和 cI。
v 匹配一个垂直制表符。等价于 x0b 和 cK。
w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'x41' 匹配 ”A“。'x041' 则等价于 'x04' & ”1“。正则表达式中可以使用 ASCII 编码。.num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)1' 匹配两个连续的相同字符。
n 标识一个八进制转义值或一个向后引用。如果 n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字(0-7),则 n 为一个八进制转义值。
nm 标识一个八进制转义值或一个向后引用。如果 nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字(0-7),则 nm 将匹配八进制转义值 nm。
nml 如果 n 为八进制数字(0-3),且 m 和 l 均为八进制数字(0-7),则匹配八进制转义值 nml。
un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如,u00A9 匹配版权符号(?)。
例子
/b([a-z]+)b/i 单词数量
/(w+)://([^/:]+)(:d*)?([^# ]*)/ 将一个URL解析为协议、域、端口及相对路径
/^(?:Chapter|Section)[1-9][0-9]{0,1}$/ 定位章节的位置
/[-a-z]/ A至z共26个字母再加一个-号。
/terb/ 可匹配chapter,而不能terminal
/Bapt/ 可匹配chapter,而不能aptitude
/Windows(?=95 |98 |NT)/ 可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后,从Windows后面开始进行下一次的检索匹配。
^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$ Email 合法格式检查
^[0-9]+$ 纯数据检查
^[0-9a-z]{1}[0-9a-z-]{0,19}$ 用户名检查,字母和数字开始,只能含字母、数字、横杠
模式修正符
i 忽略大小写
s 如果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符
e 只用在preg_replace(),在替换字符串中对逆向引用作正常的替换,将其作为 PHP 代码求值,并用其结果来替换所搜索的字符串。
如:
$p = '/[colorFont](.+?)[/colorFont]/ie';
$t = '”“';
ecoh preg_replace($p,$t,$string);
这里必须加上e修正,才能将匹配到的内容用urlencode处理
U 贪婪模式,最大限度匹配
如:/a[w]+?e/U匹配abceadeddd中的abceade而不是abce,如果不加U修正,则匹配abce
A 强制从字符串开头匹配,即自动在模式开头加上^
m 当设定了此修正符,“行起始” ^ 和“行结束” $ 除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。如果目标字符串中没有“n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。
D 模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前。如果设定了 m 修正符则忽略此选项
例子
匹配中文
preg_match_all('/[^x00-x80]+/', '中华s人s民', $a)
如果你的文件是gb2312的,用/[xa0-xff]{2}/
如果是utf8的,用/[xe0-xef][x80-xbf]{2}/
匹配邮箱地址
preg_match('/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/', 'shao@gmail.com')
替换空白字符
$s = preg_replace('/[sv]+/','',' sss sdd ss ');
替换
$string = ”April 15, 2003“;
$pattern = ”/(w+)(d+),(d+)/i“;
$replacement = ”${1}1,${3}1-$2“;
echo preg_replace($pattern, $replacement, $string);
匹配帐号是否合法(字母开头,允许5-6字节,允许字母数字下划线)
preg_match('/^[a-zA-Z][a-zA-Z0-9_]{4,5}$/', 'a011a')
匹配数字
/^-d*$/ 匹配负整数
/^-?d*$/ 匹配整数
匹配浮点数
preg_match(”/^-?(d*.d*|0.d*|0?.0+|0)$/“, ”11“)
匹配电话号码
preg_match(”/^(0[0-9]{2,3}-)?([2-9][0-9]{6,7}){1,1}(-[0-9]{1,4}){0,1}$/“,”0511-22345678-11“)
匹配手机号码
preg_match(”/^1(3|5)d{9}$/“,”***“)
文件处理
文件属性
file_exists('1.php')文件或目录是否存在 filesize()取得文件大小
is_readable()判断给定文件名是否可读
is_writable()判断给定文件名是否可写
is_executable()判断给定文件名是否可执行
filectime()获取文件的创造时间
filemtime()获取文件的修改时间
fileatime()获取文件的访问时间
stat()获取文件大部分属性值 解析目录
basename()返回路径中的文件名部分
dirname()返回目录
pathinfo()返回目录名、基本名和扩展名的关联数组 遍历目录
opendir()打开指定目录
readdir()关闭指定目录
closedir()关闭指定目录
rewinddir()倒回目录句柄
$dir_handle=opendir('.');
while($file=readdir($dir_handle))
{
echo filesize($file).'___'.$file.'
';
}
closedir($dir_handle);建立和删除目录
mkdir()创建目录
rmdir()删除空目录 文件操作
fopen()fclose()fwrite()写入文件
fputs()fwrite的别名
file_put_contents($文件名,$内容)把内容存成文件
file_get_contents()从文件读出内容 文件读取
fread()stream_get_contents()fgets()从文件指针中读取一行
feof()测试文件指针是否到了文件结束的位置
fgetc()从文件指针中读取字符
file()readfile()读入一个文件并写入到输出缓冲
ftell()返回文件指针的当前位置
fseek()移动文件指针到指定的位置
rewind()移动文件指针到文件的开头
flock()文件锁定
copy()复制文件
unlink()删除文件
ftruncate()将文件截断到指定的长度
rename()重命名文件或目录
文件控制
chgrp
chmod(string $filename , int $mode)
chown 保存读取文件
-----------把内容存成文件
$cache_file = fopen('f:1.txt', 'w+');
fwrite($cache_file, $t);
-----------把内容存成文件
$s = ”内容“;
file_put_contents('f:/2.txt',$s);
-----------把文件内容读成字符串
$s = file_get_contents('f:/2.txt');
echo $s;
-----------把文件内容按行读成字符串
$handle = @fopen(”f:/2.txt“, ”r“);
if($handle)
{
while(!feof($handle))
{
$buffer = fgets($handle, 4096);
echo $buffer.'
';
}
fclose($handle);
}
----------
session/cookie setcookie(”MyCookie[foo]“, 'Testing 1', time()+3600)session_start()ini_set('session.cookie_lifetime',0);session对应cookie存活时间
ini_set('session.save_path', 'dir');ini_set('session.save_path', '2;session');session分两级存放
ini_set('session.name','SNS');客户端禁用Cookie
session.use_trans_sid = 1 开启url传递sessionId php.ini session销毁
mysql $link = mysql_connect('localhost','root','root')or die(mysql_errno());mysql_select_db('test')or die(mysql_errno());mysql_query('SET NAMES gbk');$sql = ”SELECT * FROM test LIMIT 0,20“;$result = mysql_query($sql)or die(mysql_errno());while($msg = mysql_fetch_array($result)){
print_r($msg);} mysql_free_result($result);mysql_close($link);
mysqli 查询
过程
$db_host=”localhost“;
//连接的服务器地址
$db_user=”root“;
//连接数据库的用户名
$db_psw=”root“;
//连接数据库的密码
$db_name=”test“;//连接的数据库名称
$mysqli=mysqli_connect($db_host,$db_user,$db_psw,$db_name);
mysqli_query($mysqli,'SET NAMES utf8');
$query=”select * from users“;
$result=mysqli_query($mysqli,$query);
while($row =mysqli_fetch_array($result))//循环输出结果集中的记录
{
echo($row['id']).”
“;
echo($row['username']).”
“;
echo($row['password']).”
“;
echo ”
“;
}
mysqli_free_result($result);
mysqli_close($mysqli);
对象
$db_host=”localhost“;
//连接的服务器地址
$db_user=”root“;
//连接数据库的用户名
$db_psw=”root“;
//连接数据库的密码
$db_name=”test“;//连接的数据库名称
$mysqli=new mysqli($db_host,$db_user,$db_psw,$db_name);
$mysqli->query('SET NAMES utf8');
$query=”select * from users“;
$result=$mysqli->query($query);
if($result)
{
if($result->num_rows>0)//判断结果集中行的数目是否大于0
{
while($row =$result->fetch_array())//循环输出结果集中的记录
{
echo($row[0]).”
“;
echo($row[1]).”
“;
echo($row[2]).”
“;
echo ”
“;
} } } else { echo ”查询失败“;} $result->free();$mysqli->close();增、删、改
$mysqli=new mysqli(”localhost“,”root“,”root“,”sunyang“);//实例化mysqli $query=”delete from employee where emp_id=2“;$result=$mysqli->query($query);if($result){
echo ”删除操作执行成功“;}else{
echo ”删除操作执行失败“;} $mysqli->close();绑定结果
$mysqli=new mysqli(”localhost“,”root“,”root“,”test“);
//实例化mysqli $query=”select * from users“;$result=$mysqli->prepare($query);
//进行预准备语句查询
$result->execute();
//执行预准备语句
$result->bind_result($id,$username,$password);
//绑定结果
while($result->fetch()){
echo $id.'_';
echo $username.'_';
echo $password;
echo ”
“;} $result->close();
//关闭预准备语句
$mysqli->close();
//关闭连接 绑定参数
$mysqli=new mysqli(”localhost“,”root“,”root“,”test“);
//实例化mysqli $query=”insert into users(id, username, password)
values('',?,?)“;
$result=$mysqli->prepare($query);
$result->bind_param(”ss“,$username,$password);
//绑定参数 I:integer D:double S:string B:blob
$username='sy0807';
$password='employee7';
$result->execute();
//执行预准备语句
$result->close();
$mysqli->close();
绑定参数、绑定结果
$mysqli=new mysqli(”localhost“,”root“,”root“,”test“);
//实例化mysqli
$query=”select * from users where id < ?“;
$result=$mysqli->prepare($query);
$result->bind_param(”i“,$id);
//绑定参数
$id=10;
$result->execute();
$result->bind_result($id,$username,$password);
//绑定结果
while($result->fetch()){
echo $id.”_“;
echo $username.”_“;
echo $password;
echo ”
“;
}
$result->close();
$mysqli->close();
多条查询语句
$mysqli=new mysqli(”localhost“,”root“,”root“,”test“);
//实例化mysqli
$query = ”select id from users;“;
$query.= ”select id from test “;
if($mysqli->multi_query($query)){
//执行多个查询
do {
if($result = $mysqli->store_result()){
while($row = $result->fetch_row()){
echo $row[0];
echo ”
“;
}
$result->close();
}
if($mysqli->more_results()){
echo(”-----------------
“);
//连个查询之间的分割线
}
} while($mysqli->next_result());
}
$mysqli->close();//关闭连接
pdo 查询
$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
$sql=”SELECT * FROM users“;
$result = $db->query($sql);
foreach($result as $row)
{
var_dump($row);
}
$db = null;增、删、改、事务开启
try
{
$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
$db->beginTransaction();
$a = $db->exec(”insert into users(id, username, password)values('', 'Joe', 'Bloggs')“);
if($a == false)
{
throw new Exception(”sql1执行失败“);
}
$b = $db->exec(”insert into users(id, username, password,kkk)values('', 'Joe', 'Bloggs')“);
if($b == false)
{
throw new Exception(”sql2执行失败“);
}
$db->commit();
$db = null;
}
catch(Exception $ex)
{
echo $ex;
$db->rollback();
} 缓存
Memcache
.下载memcached,http://', 'w+');
fwrite($cache_file, $content);
页面静态化-------
ob_start();
$static_file = '1.html';//静态页面
$php_file = basename(__FILE__);//当前动态页面
if(!file_exists($static_file)||
((filemtime($static_file)+10)< time())|| //缓存固定时间
filemtime($php_file)> filemtime($static_file))//源文件已修改
{
echo '静态页面示例';
echo 'erer';
$c = ob_get_contents();
ob_clean();
file_put_contents($static_file, $c);
}
$s = file_get_contents($static_file);
echo $s;
------------------
ob_implicit_flush($p)$p:0:关闭 1:开启(每次输出后都自动刷新,而不再需要去调用flush())
ob_list_handlers 列出所有使用的输出句柄
output_add_rewrite_var
output_add_rewrite_var('var', 'value');
echo 'link';
输出:link
output_reset_rewrite_vars
output_add_rewrite_var('var', 'value');
ob_flush();
output_reset_rewrite_vars();
伪静态
首先:
必须要空间支持 Rewrite 以及对站点目录中有.htaccess 的文件解析,才有效.如何让空间支持Rewrite 和.htaccess 的文件解析呢 往下看
第一步:要找到apache安装目录下的httpd.cof文件,在里面找到
Options FollowSymLinks
AllowOverride none 把none改all, 第二步:找到以下内容:
#LoadModule rewrite_module modules/mod_rewrite.so 改为
LoadModule rewrite_module modules/mod_rewrite.so 第三步:保存重启apache。
ok。
其次是.htaccess的书写规则:
RewriteEngine On
RewriteBase /
#打开允许符号链接
Options FollowSymLinks
RewriteRule smarty/([0-9]+)/([0-9]+)smarty/index.php?id=$1&name=$2
.htaccess加入以下内容
RewriteEngine On RewriteBase / RewriteRule ^(.*)list-id([0-9]+).html$ $1/company/search.php?sectorid2=$2 RewriteRule ^(.*)cominfo-([a-z0-9]+).html$ $1/member/index.php?uid=$2&type=cominfo RewriteRule ^(.*)list-([0-9]+)-([0-9]+).html$ $1/plus/list.php?typeid=$2&PageNo=$3 RewriteCond %{HTTP_HOST} ^[a-z0-9-]+.lujin.com$ RewriteCond %{HTTP_HOST}!^($ $1/company/search.php?sectorid2=$2 这条是把企业库的分类进行伪静态处理
原先假设访问地址为http://
优点:
1、伪静态处理加速搜索引擎收入
2、地址映射到根目录,增加权重,提高排名
序列化
__sleep()__wakeup()-----------------$a = array(”1“=>”a“,”2“=>”b“,”3“=>”c“,”4“=>”d“);$b = serialize($a);/*序列化*/ var_dump($b);$f = unserialize($b);/*解析*/ var_dump($f);---------------------class S {
public $t = 111;
public function t()
{
echo 't function';
} } $s = new S;$t = serialize($s);$e = unserialize($t);echo $e->t();echo $e->t;--------------------class S {
public $id;
public $name;
public function f()
{
echo 'f function';
}
function __sleep()
{
$this->id = uniqid();
return array('id','name');
}
function __wakeup(){
//$this->id = uniqid();} } $s = new S();$s->name = 'name';$e = serialize($s);$t = unserialize($e);echo $t->id.'_',$t->name,' ';echo $t->f();----------------------------class S { public $t = 111;public function t(){
echo 't function';} } $s = new S;$t = serialize($s);$cache_file = fopen('f:/1.txt', 'w+');fwrite($cache_file, $t);/* die;$e = unserialize($t);echo $e->t();echo $e->t;*/ $handle = @fopen(”f:/1.txt“, ”r“);if($handle){ while(!feof($handle)){
$buffer = fgets($handle, 4096);
break;} fclose($handle);} $e = unserialize($buffer);echo $e->t();echo $e->t;----------
ThinkPHP2.0 入口文件配置
define('STRIP_RUNTIME_SPACE', false);生成的~runtime.php文件是否去空白和注释
define('NO_CACHE_RUNTIME', true);不生成核心缓存文件
查询
按照id排序显示前6条记录
$Form = M(”Form“);
$list = $Form->order('id desc')->limit(6)->select();
取得模板显示变量的值
$this->assign('tt', 'vvvvvvvvvvvv');
echo $this->get('tt')
成功失败提示页
if(false!==$Form->add()){
$this->success('数据添加成功!');
}else{
$this->error('数据写入错误');
}
自动验证
array(验证字段,验证规则,错误提示,验证条件,附加规则,验证时间)
验证规则:require 字段必须、email 邮箱、url URL地址、currency 货币、number 数字
Model:: MODEL_INSERT 或者1新增数据时候验证
Model:: MODEL_UPDATE 或者2编辑数据时候验证
Model:: MODEL_BOTH 或者3 全部情况下验证(默认)
protected $_validate = array(array('verify','require','验证码必须!'), //默认情况下用正则进行验证
array('name','','帐号名称已经存在!',0,’unique’,1), // 在新增的时候验证name字段是否唯一
array('value',array(1,2,3),'值的范围不正确!',2,’in’), // 当值不为空的时候判断是否在一个范围内
array('repassword','password','确认密码不正确',0,’confirm’), // 验证确认密码是否和密码一致
array('password','checkPwd','密码格式不正确',0,’function’), // 自定义函数验证密码格式);
apache多域名配置
NameVirtualHost *:80 Alias /php/ ”f:/php/“
第二篇:php开发中常用函数总结
php开发中常用函数总结
1.获取IP2.时间的增加3.检查日期是否合法日期4.时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天5.PHP重定向6.获取访问者浏览器7.获取访问者操作系统8.文件格式类9.php生成excel文档10.时间比较问题11.提取页面和浏览器提交的变量,作用相当于使PHP.INI开了全局变量12.读取文件函数13.写入文件函数14.页面快速转向15.产生随机字符串函数16.截取一定长度的字符串(该函数对GB2312使用有效)17.取得客户端IP地址18.判断邮箱地址19.分页(两个函数配合使用)20.获取新插入数据的ID21.获得当前的脚本网址22.把全角数字转为半角数字23.去除HTML标记24.相对路径转化成绝对路径26.取得所有链接27.HTML表格的每行转为CSV格式数组28.将HTML表格的每行每列转为数组,采集表格数据29.返回字符串中的所有单词 $distinct=true 去除重复30.打印出为本PHP项目做出贡献的人员的清单
function GetIP(){ //获取IP
if($_SERVER[“HTTP_X_FORWARDED_FOR”])
$ip = $_SERVER[“HTTP_X_FORWARDED_FOR”];
else if($_SERVER[“HTTP_CLIENT_IP”])
$ip = $_SERVER[“HTTP_CLIENT_IP”];
else if($_SERVER[“REMOTE_ADDR”])
$ip = $_SERVER[“REMOTE_ADDR”];
else if(getenv(“HTTP_X_FORWARDED_FOR”))
$ip = getenv(“HTTP_X_FORWARDED_FOR”);
else if(getenv(“HTTP_CLIENT_IP”))
$ip = getenv(“HTTP_CLIENT_IP”);
else if(getenv(“REMOTE_ADDR”))
$ip = getenv(“REMOTE_ADDR”);
else
$ip = “Unknown”;
return $ip;}?>{downsource}
$dateArr = explode(“-”, $date);$value[$unit] = $int;return date(“Y-m-d”, mktime(0,0,0, $dateArr[1] + $value['m'], $dateArr[2] + $value['d'], $dateArr[0] + $value['y']));}function GetWeekDay($date){ //计算出给出的日期是星期几
$dateArr = explode(“-”, $date);return date(“w”, mktime(0,0,0,$dateArr[1],$dateArr[2],$dateArr[0]));}?>{downsource}
$dateArr = explode(“-”, $date);if(is_numeric($dateArr[0])&& is_numeric($dateArr[1])&& is_numeric($dateArr[2])){ return checkdate($dateArr[1],$dateArr[2],$dateArr[0]);} return false;}function check_time($time){ //检查时间是否合法时间
$timeArr = explode(“:”, $time);if(is_numeric($timeArr[0])&& is_numeric($timeArr[1])&& is_numeric($timeArr[2])){ if(($timeArr[0] >= 0 && $timeArr[0] <= 23)&&($timeArr[1] >= 0 && $timeArr[1] <= 59)&&($timeArr[2] >= 0 && $timeArr[2] <= 59))return true;else return false;} return false;}function DateDiff($date1, $date2, $unit = “"){ //时间比较函数,返回两个日期相差几秒、几分钟、几小时或几天
switch($unit){ case 's': $dividend = 1;break;case 'i': $dividend = 60;break;case 'h': $dividend = 3600;break;case 'd': $dividend = 86400;break;default: $dividend = 86400;} $time1 = strtotime($date1);$time2 = strtotime($date2);if($time1 && $time2)return(float)($time11;mt_srand((double)microtime()* 1000000);for($i = 0;$i < $length;$i++){ $hash.= $chars[mt_rand(0, $max)];}return $hash;}?>{downsource}截取一定长度的字符串(该函数对GB2312使用有效) $length){ if($sss){ $length=$length-3;$addstr=@#...@#;} for($i = 0;$i < $length;$i++){ if(ord($string[$i])> 127){ $wordscut.= $string[$i].$string[$i + 1];$i++;} else { $wordscut.= $string[$i];} } return $wordscut.$addstr;}return $string;}?>{downsource}取得客户端IP地址{downsource}判断邮箱地址{downsource}分页(两个函数配合使用)
global $page,$totalpage;$out=”共“.$totalpage.”页 “;$linkNum =4;$start =($page-round($linkNum/2))>0 ?($page-round($linkNum/2)): ”1“;$end =($page+round($linkNum/2))<$totalpage ?($page+round($linkNum/2)): $totalpage;$prestart=$start-1;$nextend=$end+1;if($page<>1)$out.= ”第一页 “;if($start>1)$out.=”..<< “;for($t=$start;$t<=$end;$t++){ $out.=($page==$t)? ”[“.$t.”] “ : ”$t “;}if($end<$totalpage)$out.=”>>..“;if($page<>$totalpage)$out.= ” 最后页“;return $out;}?>{downsource}获取新插入数据的ID{downsource}//获得当前的脚本网址
if(empty($_SERVER[”QUERY_STRING“]))$nowurl = $scriptName;else $nowurl = $scriptName.”?“.$_SERVER[”QUERY_STRING“];} return $nowurl;}?>{downsource}//把全角数字转为半角数字{downsource}//去除HTML标记“,”>“,$txt);$txt = preg_replace(”/[rn]{1,}/isU“,”rn“,$txt);return $txt;}?>{downsource}//相对路径转化成绝对路径
preg_match('/(http|https|ftp):///', $feed_url, $protocol);$server_url = preg_replace(”/(http|https|ftp|news):///“, ”“, $feed_url);
$server_url = preg_replace(”//.*/“, ”“, $server_url);
if($server_url == ''){
return $content;
}
if(isset($protocol[0])){
$new_content = preg_replace('/href=”//', 'href=“'.$protocol[0].$server_url.'/', $content);
$new_content = preg_replace('/src=”//', 'src=“'.$protocol[0].$server_url.'/', $new_content);
} else {
$new_content = $content;
}
return $new_content;} ?>{downsource}//取得所有链接
preg_match_all('/
return array('name'=>$arr[2],'url'=>$arr[1]);}?>{downsource}//HTML表格的每行转为CSV格式数组]*?>'si”,'“',$table);$table = str_replace(”“,'”,',$table);$table = str_replace(“”,“{tr}”,$table);//去掉 HTML 标记
$table = preg_replace(“'<[/!]*?[^<>]*?>'si”,“",$table);//去掉空白字符
$table = preg_replace(”'([rn])[s]+'“,”“,$table);$table = str_replace(” “,”“,$table);$table = str_replace(” “,”“,$table);$table = explode(”,{tr}“,$table);
array_pop($table);return $table;}?>{downsource}//将HTML表格的每行每列转为数组,采集表格数据]*?>'si“,”“,$table);$table = preg_replace(”'
$table = preg_replace(”'<[/!]*?[^<>]*?>'si“,”“,$table);//去掉空白字符
$table = preg_replace(”'([rn])[s]+'“,”“,$table);$table = str_replace(” “,”“,$table);$table = str_replace(” “,”“,$table);
$table = explode('{tr}', $table);
array_pop($table);foreach($table as $key=>$tr){ $td = explode('{td}', $tr);array_pop($td);$td_array[] = $td;} return $td_array;}?>{downsource}//返回字符串中的所有单词 $distinct=true 去除重复{downsource}//打印出为本PHP项目做出贡献的人员的清单 //生成随机密码function randStr($len=6){//用来产生密码的字符串$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789';$password=”";while(strlen($password)<$len)
$password.=substr($chars,(mt_rand()%strlen($chars)),1);return $password;
}
第三篇:开发技术(PHP)测试题
1、简述静态网页和动态网页的区别,从文件扩展名、使用技术、表现形式、执行位置等进行阐述
答案:
2、简述如何搭建PHP程序的环境
答案:
3、简述PHP语言中,流程控制的分类,及几种代表语句。
答案:
4、简述表单提交过程中,get和post方式的区别
答案:
5、简述session机制的原理
答案:
6、如何在php程序中启动session
答案:
7、代码如下
$arr=array(“I”,“am”,“a”,“student”);
$whole=implode(_,$arr);
echo $whole;
代码输出的结果是:
答案:
8、代码如下
$color=imagecolorallocate($img,0,0,255);
代码实现的功能:
答案:
9、代码如下:
echo “今天是 ”.date(Y年n月j日);
$w=date(w);
$week=array(星期日,星期一,星期二,星期三,星期四,星期五,星期六);
echo $week[$w];
代码实现的功能:
输出今天的日期和是周几
输出的内容是(按考试的日期来输出即可):
2021/12/21 星期二
答案:
10、代码如下:
$pageno=isset($_GET[pageno])?$_GET[pageno]:1;
代码实现的功能:
答案:
11、php的源码是
A、开放的
B、封闭的C、需购买的D、完全不可见的答案: A12、静态网页的执行在浏览器端完成,动态网页的执行在服务器端完成答案: 正确
13、动态页面中不可以出现html、css和javaScript的代码
答案: 错误
14、服务器收到客户发出的静态页面请求之后,只把该页面文件发送给客户浏览器来执行
答案: 错误
15、存放在任意文件夹中的php文件都可以通过localhost/…方式来执行
答案: 错误
16、搭建PHP环境时要先安装php,再安装apache服务器
答案: 错误
17、apache服务默认占用80号端口,不可更改
答案: 错误
18、下面哪项不属于静态网页设计中使用的核心技术
A、HTML
B、DreamWeaver
C、CSS
D、Javascript
答案: B19、下面哪组中列举的技术都属于动态网页设计时使用的核心技术
A、ASP、JSP、SSP
B、JSP、XHTML、PHP
C、JSP、PHP、ASP
D、PHP、ASP、Javascript
答案: C20、动态网页与静态网页的本质区别是
A、静态页面运行后能够查看所有的源代码,动态页面中动态部分源代码则无法查看
B、静态网页任何时候运行内容都相同,动态页面则不然
C、动态页面是在服务器端执行的,而静态页面是在浏览器端执行的D、静态页面中可以包含各种小动画,动态页面不可以
答案: C21、下面各种说法中错误的是
A、在动态页面中可以包含大量的静态代码
B、使用静态页面技术可以实现动态变化的时钟效果
C、动态页面的运行过程通常会包含在服务器端的执行过程和在浏览器端的执行过程两个阶段
D、浏览器请求执行一个静态页面时,服务器先把页面文件执行完毕,然后将结果传递到浏览器端显示
答案: D22、下面关于PHP的说法错误的是
A、PHP是一种服务器端的脚本
B、PHP程序可以在任意环境中执行
C、在PHP文件中可以包含任意的HTML代码和样式的应用
D、使用PHP可以实现注册、登录、在线投票、访客计数等动态页面中需要的各种功能
答案: B23、若PHP文件中包含html代码,下面描述中正确的是
A、服务器将整个php文件发送给浏览器执行
B、服务器将所有代码执行后将结果送给浏览器
C、服务器执行html代码后将执行结果和php代码一起送给浏览器
D、服务器执行php代码后,将指向结果和html代码一起送给浏览器
答案: D24、下面哪组是PHP支持的服务器环境
A、Apache和pws
B、Apache、IIS和pws
C、Apache和IIS
D、只有Apache
答案: C25、若是系统中已经存在了IIS服务,且占用了80端口号,则下面说法正确的是
A、Apache能够成功安装,但是无法启用,只需要修改端口号即可启用
B、Apache无法完成安装过程
C、Apache能够成功安装,且能正常启用
D、以上说法都不正确
答案: A26、下面关于Apache主目录说法错误的是
A、安装Apache之后,必须要将页面文件放在其主目录下才能正常运行
B、安装Apache之后,系统会给其指定默认的主目录
C、Apache的主目录不能随意修改
D、用户可以根据需要修改Apache主目录
答案: C27、搭建apache web服务器(使用phpstduy)之后,默认情况下运行文件时的localhost对应哪个文件夹?
A、apache
B、htdocs
C、,需要使用哪个代码实现
A、onsubmit=“window.open(zhuce.html);”
B、onsubmit=“window.open(zhuce.html);”
C、onclick=“window.open(zhuce.html);”
D、onclick=“window.open(zhuce.html);”
答案: C185、要在表单文本框中显示数组元素$row[title]的值,则代码是:
答案:
echo $row[title];;
解析:
186、判断表单文本框age的数据是否提交到服务器端的方法是______
A、if($_POST[age]==)
B、if(isset($_POST[age]))
C、if($_POST[age]=)
D、if(isset($_FILES[age]))
答案: A187、代码if(document.getElementById(jieshao).value=)用于判断id为jieshao的表单元素值是否为空
答案: 错误
188、使用函数move_uploaded_file()时只需提供一个参数
答案: 错误
189、表单中有文件域元素时,下面哪个说法错误________
A、中method属性取值可以是get
B、中enctype属性取值为multipart/form-data
C、文件域元素需要设置name属性
D、可以有多个文件域元素
答案: A190、存在表单文件域元素fname,系统数组$_FILES[fname]中的内容不包括___
A、上传文件的名称
B、上传文件的类型
C、上传文件的大小
D、上传文件的内容
答案: D191、进行文件上传时,文件相关信息存放在系统数组____中
答案: $_FILES;
192、以下系统数组中可以使用两个下标的是___________
A、$_POST
B、$_GET
C、$_FILES
D、$_SESSION
答案: C193、函数move_uploaded_file()只需要一个参数()
答案: 错误
194、若存在文件域元素名称为f1,$_FILES[‘F1’]是一个数组()
答案: 正确
195、进行文件上传时,需要在form标记中设置属性enctype的取值是
A、multipart/form-data
B、text/plain
C、application/x-www-form-urlencoded
D、以上都不是
答案: A196、关于函数move_uploaded_file(),下列说法错误的是
A、该函数需要指定两个参数
B、第二个参数需要同时指定文件存储的位置和要保存文件的名称
C、第一个参数需要指定文件的临时存储位置和临时名称
D、以上说法都是错误的答案: D197、关于系统数组$_FILES,第二个下标不包含下面哪一项
A、tmpname
B、size
C、name
D、type
答案: A198、关于多文件上传功能中,下面说法错误的是
A、文件域元素中必须添加multiple属性
B、可以同时选择不同文件夹中的文件
C、$_FILES[file1][name]是一个数组
D、文件域元素的name属性取值必须带有[]
答案: B199、$_FILES{“touxiang”][“type”]作用是
A、获取上传文件的类型
B、获取上传文件的大小
C、获取上传文件的名称
D、获取上传文件的临时存储信息
答案: A200、完成文件上传功能,在标签中使用哪个属性设置编码_____
A、enctype
B、name
C、ID
D、action
答案: A201、在A网页上创建了一个Session变量:$____SESSION[“user”]=“张三”,在B网页上要输出这个Session变量的值,应使用。
答案: echo $_SESSION[“user”];
202、在同一个网站的不同文件之间传递数据的机制是__________
A、session
B、cookie
C、application
D、post
答案: A203、下面哪个系统数组不用于接收表单提交的数据________
A、$_SESSION
B、$_FILES
C、$_POST
D、$_GET
答案: A204、关于session机制的描述中正确的是_____
A、用户的session都保存在浏览器端
B、一旦某个页面向session中提供了数据,当前网站中在该页面之后执行的页面文件都可以根据需要从中获取该数据
C、不同网站的页面之间可以通过session机制来传递数据
D、session中存放的是所有用户的共用数据
答案: B205、点击超链接可以向服务器提交数据()
答案: 正确
206、链接打开文件count.php时使用键名uname提交数据“liuhong”,超链接href属性的取值为
A、href=“count.php”?uname=“liuhong”
B、href=“count.php?uname:liuhong”
C、href=“count.php?uname=liuhong”
D、href=“count.php”?uname:“liuhong”
答案: C207、关于session机制的描述中错误的是
A、服务器可通过sessionID来区分各个不同用户
B、一旦某个页面向session管道中提供了数据,当前网站中在该页面之后执行的页面文件都可以根据需要从管道中获取该数据
C、不同网站的页面之间可以通过session机制来传递数据
D、要提供数据的页面和要获取数据的页面都要启用session
答案: C208、下面说法中错误的是
A、变量有生命周期
B、session有生命周期
C、session产生于用户开始访问一个网站时
D、一个session中可以保存多个用户的信息
答案: D209、在PHP中,有两个函数与cookie操作有关。其中____用来设置cookie变量内容, ____用来读取cookie变量内容。
答案: setcookie;$_COOKIE;
210、能够在同一网站不同页面之间传递数据的机制是____,在程序代码开始处启用该机制时需要使用的代码是____
答案: session;session_start();
211、Session可以在不同网站的页面之间传递数据()
答案: 错误
212、mysql数据库中查询数据用select语句
答案: 正确
213、以下说法不正确的是
A、模糊查询使用的关键字是like
B、排序查询asc是降序,desc是升序
C、分页查询使用的关键字是limit
D、mysql如果只安装服务不安装界面也可以正常使用
答案: B214、在用浏览器查看网页时出现404错误可能的原因是
A、页面源代码错误
B、文件不存在C、与数据库连接错误
D、权限不足
答案: B215、安装MySQL数据库之后,默认使用的是根用户root
答案: 正确
216、卸载MySQL时,说法正确的是
A、只要在控制面板中卸载软件即可
B、在控制面板中卸载软件后,清理完注册表信息即可
C、先删除系统盘符下的文件夹,再清理注册表信息,最后卸载软件
D、先在控制面板中卸载软件,然后清理注册表信息,最后删除系统盘符下的相关文件夹
答案: D217、MySQL服务器有一个超级管理员账号,其名称是()
A、admin
B、root
C、sa
D、Administrator
答案: B218、mysqli中返回结果集中记录总数的函数是()
A、fetch_row
B、fetch_assoc
C、num_rows
D、field_count
答案: C219、访问mysql数据库时,用来选择并打开指定数据库的方法是_________
A、mysqli_query()
B、mysqli_connect()
C、mysqli_select_db()
D、mysqli_num_rows()
答案: C220、若是在某次访问数据库的操作中,需要用到如下四个函数
①mysqli_num_rows()②mysqli_select_db()、③mysqli_connet()④mysqli_query()
则使用这四个函数的顺序是___________
A、①②③④
B、②③①④
C、③②④①
D、③④①②
答案: C221、PHP中选择打开数据库的方法是______
A、mysqli_connect()
B、mysqli_select_db()
C、mysqli_query()
D、mysqli_num_rows()
答案: B222、查询用户名和密码信息是否存在时,关于查询结果记录集$result的说法错误的是____
A、该记录集中的记录数只能是0或者1
B、该记录集中的记录数无法预知
C、若记录数是0,说明用户输入的账号或者密码信息有误
D、若记录数是1,说明用户输入的账号和密码信息正确
答案: B223、访问mysql数据库时,从查询结果记录集中获取一条记录的方法是
A、mysql_num_rows()
B、mysql_select_db()
C、mysql_fetch_array()
D、mysql_fetch_Array()
答案: C224、函数mysql_fetch_array()的作用是
A、获取一个数组中的元素
B、从查询结果记录集中获取一条记录并以对象方式存储访问
C、从查询结果记录集中获取一条记录并以数组方式存储访问
D、以上说法都不正确
答案: C225、下面操作MySQL数据库的方法中,哪个返回值可能是false
A、mysql_fetch_array()
B、mysql_select_db()
C、mysql_num_rows()
D、mysql_fetch_Array()
答案: A226、查询数据表时,限制获取查询结果中序号为6、7、8的记录,需要使用的子句是
A、limit 6,8
B、limit 6,2
C、from 6 to 8
D、start 6 to 8
答案: B227、MySQL数据库操作中,Create New Schema命令的作用是
A、创建数据表
B、创建数据表中一个列名
C、创建数据库
D、以上说法都不正确
答案: C228、关于数据库的导入操作,下列说法中错误的是
A、使用的命令是Restore
B、导入过程中可以更改原来数据库的名称
C、导入过程中必须要选择忽略错误选项,否则导入无法完成D、若安装数据库时选择的字符集是GBK,则导入过程中,必须要选择字符集是GBK
答案: D229、关于PHP访问MySQL数据库的各种方法,下列说法中正确的是
A、在使用mysql_connect()连接数据库成功之后,就可以直接访问数据表完成各种操作
B、mysql_num_rows()的作用是获取查询结果记录集中记录的个数,其参数可以省略
C、mysql_select_db()的作用是选择打开指定的数据库,可以只指定一个参数
D、mysql_query()函数只能执行查询语句,不能执行插入、删除、更新语句
答案: C230、假设用户在登录时,输入的用户名信息保存在变量$emailaddr中,密码保存在变量$psd中,查询数据表usermsg中是否存在该用户名和密码信息,需要定义的查询语句是
A、select * from usermsg where emailaddr=$emailaddr or psd=$psd
B、select * from usermsg where emailaddr=$emailaddr and psd=$psd
C、select * from usermsg where emailaddr=$emailaddr and psd=$psd
D、select * from usermsg where emailaddr=$emailaddr or psd=$psd
答案: B231、查询用户名和密码信息是否存在时,关于查询结果记录集$result的说法错误的是
A、该记录集中的记录数只能是0或者1
B、该记录集中的记录数无法预知
C、若记录数是0,说明用户输入的账号或者密码信息有误
D、若记录数是1,说明用户输入的账号和密码信息正确
答案: B232、要获取记录集$result中的记录数,需要使用代码
A、count($result)
B、mysql_num_row($result)
C、mysql_nums_rows($result)
D、mysql_num_rows($result)
答案: D233、MySQL中使用Select语句查询时,要限制返回的行数可使用____子句。
答案: limit;
234、访问mysql数据库时,从查询结果记录集中获取一条记录的方法是__________
A、mysqli_num_rows()
B、mysqli_select_db()
C、mysqli_fetch_array()
D、mysqli_query()
答案: C235、在mysql Administrator界面下,Create New Schema命令的作用是_____
A、创建数据库
B、创建数据表中一个列名
C、创建数据表
D、以上说法都不正确
答案: A236、关于数据库的导入操作,下列说法中错误的是_____
A、使用的命令是Restore
B、导入过程中可以更改原来数据库的名称
C、导入过程中必须要选择忽略错误选项,否则导入无法完成D、使用的命令是Backup
答案: D237、假设用户在登录时,输入的用户名信息保存在变量$uname中,密码保存在变量$psd中,查询数据表user中是否存在该用户名和密码信息,需要定义的查询语句是_______
A、select * from user where uname=$uname or psd=$psd
B、select * from user where uname=$uname and psd=$psd
C、select * from user where uname=$uname and psd=$psd
D、select * from user where uname=$uname or psd=$psd
答案: B238、要获取记录集$result中的记录数,需要使用代码______
A、count($result)
B、mysqli_num_row($result)
C、mysqli_nums_rows($result)
D、mysqli_num_rows($result)
答案: D239、MySQL数据库的根用户是____
答案: root;
240、下面的程序使用mysqli内置函数连接数据库,并将表lyb中的记录显示在网页中,将1234处填写完整
241、下面的程序用来删除记录,当用户单击“删除”超链接时,记录将被删除,将下面1234处的代码补充完整
1.isset 2$_GET[“id”] 3.$id 4.$sql,$conn242、下面的程序是获取到下面表单发送来的信息并按以下格式输出
将下面的服务器端的程序补充完整,在1234处填写合适的代码
$user=$_POST[“user”];
$pwd=$_POST[“pwd”];
$addr=$_POST[“addr”];
echo $user.“您好,您住在”.$addr.”,您的密码是“.$pwd;
243、1)写一个函数,函数名为Trimtit,有两个参数$tit,$n,函数的功能是根据指定的长度截取原始字符串。
如果原始字符串$tit的长度大于指定长度$n,则返回从左端截取的字符串并加“…”
如果长度未超过指定长度,则返回原始字符串。
2)并编写测试代码,使用函数实现字符串的截取。
答案:
function Trimtit($tit,$n){if(strlen($tit)>$n){
echo ”...“.substr($tit,0,$n);
}
else
echo $tit;
}
Trimtit(”tit664848",5);
解析:
244、编写一个函数,输入是5个分数,输出是去掉一个最高分和去掉一个最低分后的平均分。
答案:
function num($a,$b,$c,$d,$e){
$s=array($a,$b,$c,$d,$e);
$max=0;
$min=$s[0];
$abc=0;
for($i=0;$i if($max<=$s[$i]){ $max=$s[$i]; } if($min>=$s[$i]){ $min=$s[$i]; } $abc+=$s[$i]; } $abc=($abc-$min-$max)/5; echo $abc; } num(11,22,33,44,55); 解析: 245、使用for循环,完成1+2+3+4+…+100求和过程,使用变量$sum表示结果并输出。 答案: $num=0; for($i=1;$i<=100;$i++){ $num+=$i; } echo $num; imagecreatetruecolor 输出真彩色图像 246、下面哪一个不是函数imagettftext()的参数_______ A、输出字符的坐标 B、输出字符的角度 C、字号 D、加粗输出的字符 答案: D247、创建真彩色图像,使用的函数是____ 答案: imagecreatetruecolor(); 248、代码imagecolorallocate($img1,255,255,0)的作用是创建____色 答案: 黄; 249、imageline()函数能够在画布中画线,需要四个参数() 答案: 错误 250、用于创建一幅真彩色图像的函数是 A、imagecreatetruecolor() B、imagecreate() C、imagecolorallocate() D、imagefill() 答案: A251、用于为指定图像分配颜色的函数是 A、imagecreatetruecolor() B、imagecreate() C、imagecolorallocate() D、imagefill() 答案: C252、下面哪一个不是函数imagettftext()的参数 A、字号 B、输出字符的角度 C、输出字符的颜色 D、加粗输出的字符 答案: D253、函数imagesetpixel()的作用是 A、在指定位置画一条直线 B、在指定位置设置一个单一像素 C、使用指定的颜色填充指定的区域 D、新建一个基于调色板的图像 答案: B254、若$color表示蓝色,代码imagefill($img,0,0,$color)作用是 A、设置画布$img中坐标0,0的点为蓝色 B、为画布填充蓝色 C、在画布中画蓝色直线 D、输出画布 答案: B255、用于为画布分配颜色的函数是_____ A、imagefill() B、imagecreate() C、imagecolorallocate() D、imagecolor() 答案: D 1.负责PHP相关产品模块开发工作。 2.负责公司业务系统开发、单元测试、系统对接工作。 3.负责公司已有网络管理系统的二次开发。 4.负责相关系统的设计与编码工作。 5.负责研发产品技术文稍的编写工作。第四篇:PHP开发工程师岗位职责
第五篇:PHP开发大型项目经验总结
PHP开发大型项目的一点经验
文章摘自我赢职场php在线教育
一、变量
最好是把所有的变量存储在一个数组中,这样在程序的开发中可以带来很多的方便,特别是当程序很大的时候。变量的命名就当适合自己的习惯,不管是用拼音还是英语,至少应当有一定的意义,以便适合记忆。变量的命名尽量规范化,不要与PHP中的关键字相冲突。
二、函数
PHP自带了很多函数,这给我们程序的编写带来了很多的方便。当然,在大型程序中我们往往自己要定义许多个函数,几十甚至上百个。当然在使用了类的程序中就不叫函数了,就应该叫方法,这里暂且不谈类的使用方法。函数多了,难免就会搞混了。有什么方法可以解决这个问题呢?可以参照上面变量的使用方法一样,同样的,我们也可以把自己定义的函数名全都放在一个数组中。这样我们在使用的过程中可以直接在数组随时检查函数是否有无重复的定义。如果发现重复的现象,马上变可以改过来。提高了程序编写的速度。函数的使用还有一点要注意的是全局变量,虽然这是一个小问题,但却不容忽视,要不然当某个变量千呼万呼出不来的时候,呵呵。这时看看该变量是否在该函数中已经申明成了全局变量。
三、程序的注释
程序的注释是很重要的,不管是C还是JAVA,程序的注释往往可以体现出程序员的良好编程风格。无论是对于它人还是自己对大有好处,当然我们这里说的是大型项目的开发,团体合作精神是很重要的。当你的程序写出来别人都很难看懂那还怎么谈团体合作精神啊。当然如果这个大型项目是你一个人开发的那就另当别论了,或者是你时间紧迫,来不及写注释。不过一般来说这种情况是很少的。除非真的是非常时刻。一个优秀的程序员绝对会为他写的每个程序加注释,哪怕是给自己看的。
四、采用何种文本编辑软件写源程序
这其实也没一定的规定,只要自己喜欢就行了。我比较喜欢PHPEDIT,也许是用惯了,现在感觉一离开PHPEDIT写PHP就没感觉,初学PHP的时候用NOTEPAD写,因为程序比较简单。所以用NOTEPAD应付下就行了,对于有几百行的程序来讲,用NOTEPAD显然是不合适的。用PHPEDIT工作效率会提高几倍,哪怕你从来没用过。
五、数据库的设计
数据库的设计在开发大型项目中是很重要的一点,关系到整个项目开发的成败。具体也就不多说了。大家可以在自己的实践中积累经验,慢慢去体会。总之在数据库的设计中最好应该一开始就应该确定下来。虽然可以在开发的过程中去改变已经设计好的数据库结构,但这对于整个项目的开发效率来讲将大打折扣,有谁会愿意时不时的去改数据库的结构呢?
六、类的使用
类的使用主要是实现了代码的重复使用,以降低项目开发的时间,程序员的工作量也会减少许多。只要可以使用类的地方应当尽量使用类,使用类应该养成一个良好的习惯,这样才可以在真正使用类的地方得心应手。可以说一个大型PHP项目就是由类组成的。个中的滋味还是自己慢慢体会吧。
总之,PHP在线学习的平台我赢职场提醒大家在开发大型PHP项目的时候,要预算好时间。特别要小心客户在半途来个回马枪,那就功亏一篑了。