第一篇:php重要知識點總結(jié)(PHP網(wǎng)絡(luò)開發(fā)必背)
PHP網(wǎng)站開發(fā)必用知識點總結(jié),函數(shù)一覽,開發(fā)必背
魔術(shù)方法
__construct()當實例化一個對象的時候,這個對象的這個方法首先被調(diào)用。
__destruct()當刪除一個對象或?qū)ο蟛僮鹘K止的時候,調(diào)用該方法。
__get()當試圖讀取一個并不存在的屬性的時候被調(diào)用。
__set()當試圖向一個并不存在的屬性寫入值的時候被調(diào)用。
__call()當試圖調(diào)用一個對象并不存在的方法時,調(diào)用該方法。
__toString()當打印一個對象的時候被調(diào)用
__clone()當對象被克隆時,被調(diào)用
__isset()__unset()__autoload($classname)__sleep()__wakeup()
系統(tǒng)常量
__FILE__ 當前文件名
__LINE__ 當前行數(shù)
__FUNCTION__ 當前函數(shù)名
__CLASS__ 當前類名
__METHOD__ 當前對象的方法名
PHP_OS 當前系統(tǒng)
PHP_VERSION php版本
DIRECTORY_SEPARATOR 根據(jù)系統(tǒng)決定目錄的分隔符 /
PATH_SEPARATOR 根據(jù)系統(tǒng)決定環(huán)境變量的目錄列表分隔符;:
E_ERROR 1
E_WARNING 2
E_PARSE 4
E_NOTICE 8
M_PI
3.141592
$_SERVER
$_ENV 執(zhí)行環(huán)境提交至腳本的變量
$_GET
$_POST
$_REQUEST
$_FILES
$_COOKIE
$_SESSION
$_GLOBALS 輸出 echo
//Output one or more strings print
//Output a string print_r()//打印關(guān)于變量的易于理解的信息。
var_dump()//打印變量的相關(guān)信息
var_export()//輸出或返回一個變量的字符串表示
printf(“%.1f”,$num)//Output a formatted string
sprintf()//Return a formatted string
編碼轉(zhuǎn)換
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(“執(zhí)行失敗”);} catch(Exception $ex){
echo $ex;}
字符串處理
string trim(“eee ”)trim('ffffe','e')//ltrim rtrim array explode(“.”, “fff.ff.f”)按指定字符切割
string implode(“.”, $array)別名:join
把數(shù)組值數(shù)據(jù)按指定字符連接起來
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')字符串出現(xiàn)的次數(shù) string strstr($text, 'h')第一次出現(xiàn)h后的字符串
//別名:strchr int strpos($text, 'h')第一次出現(xiàn)h的位置
strrpos();最后一次出現(xiàn)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'轉(zhuǎn)換成'hi' string md5_file('1.txt',false)文件數(shù)據(jù)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))匹配數(shù)據(jù)
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” 把換行轉(zhuǎn)成
string chr(int ascii)
* mixed str_word_count(string string [, int format [, string charlist]])string str_shuffle('abc')打亂字符串順序
string strrev($str)*
翻轉(zhuǎn)一個字符串
string strtolower($str)*
將字符串 $str 的字符全部轉(zhuǎn)換為小寫的string strtoupper($str)*
將字符串 $str 的字符全部轉(zhuǎn)換為大寫的string ucfirst($str)
*
將字符串 $str 的第一個單詞的首字母變?yōu)榇髮憽?/p>
string ucwords($str)
*
將字符串 $str 的每個單詞的首字母變?yōu)榇髮憽?/p>
string addslashes(“I'm”)I'm 使用反斜線引用字符串 這些字符是單引號(')、雙引號(“)、反斜線()與 NUL(NULL 字符)
string stripcslashes(”I'm“)I'm 將用addslashes()函數(shù)處理后的字符串返回原樣
strip_tags(”
tt
“, '')去除html、xml、php標記,第二個參數(shù)用來保留標記
string urlencode(string str)string urldecode(string str)string htmlspecialchars(”Test“, ENT_QUOTES)轉(zhuǎn)換特殊字符為HTML字符編碼
ENT_COMPAT –對雙引號進行編碼,不對單引號進行編碼
ENT_QUOTES –對單引號和雙引號進行編碼
ENT_NOQUOTES –不對單引號或雙引號進行編碼
string htmlentities('
ff
', ENT_QUOTES)轉(zhuǎn)換特殊字符為HTML字符編碼,中文會轉(zhuǎn)成亂碼數(shù)組處理
int count(mixed var [, int mode])別名:sizeof()取數(shù)組長度
string implode(”.“, $array)別名:join
把數(shù)組值數(shù)據(jù)按指定字符連接起來
array explode(”.“, ”fff.ff.f“)按指定字符切割
array range(0, 6, 2)返回數(shù)組 array(0,2,4,6)第一個參數(shù)為起使數(shù),第二個參數(shù)為結(jié)束數(shù),第三個參數(shù)為數(shù)據(jù)增加步長
int array_push($a, ”3“, 1)把'3'、'1'壓入$a,將一個或多個單元壓入數(shù)組的末尾(入棧),第二個參數(shù)開始就是壓入的數(shù)據(jù)
void unset(mixed var [, mixed var [,...]])array array_pad($a, 5, 's')用's'將數(shù)組填補到指定長度
bool shuffle(array $array)將數(shù)組打亂
mixed array_rand(array input [, int num_req])從數(shù)組中隨機取出一個或多個單元的索引或鍵名
array array_count_values(array input)統(tǒng)計數(shù)組中所有的值出現(xiàn)的次數(shù)
array array_combine(array keys, array values)創(chuàng)建一個數(shù)組,用一個數(shù)組的值作為其鍵名,另一個數(shù)組的值作為其值
bool array_key_exists(mixed key, array search)檢查給定的鍵名或索引是否存在于數(shù)組中
mixed array_search(mixed needle, array haystack [, bool strict])在數(shù)組中搜索給定的值,如果成功則返回相應(yīng)的鍵名
bool is_array(mixed var)bool in_array(mixed needle, array haystack [, bool strict])檢查數(shù)組中是否存在某個值
number array_sum(array array)計算數(shù)組中所有值的和
array array_unique(array array)移除數(shù)組中重復的值
mixed reset(array &array)將數(shù)組的內(nèi)部指針指向第一個單元
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]])返回數(shù)組中所有的鍵名
array array_values(array input)返回數(shù)組中所有的值
bool print_r(mixed expression [, bool return])void var_dump(mixed expression [, mixed expression [,...]])int array_unshift(array &array, mixed var [, mixed...])在數(shù)組開頭插入一個或多個單元
mixed array_shift(array &array)將數(shù)組開頭的單元移出數(shù)組
mixed array_pop(array &array)將數(shù)組最后一個單元彈出(出棧)
array array_splice(array $input, int offset [, int length [, array replacement]])把數(shù)組中的一部分去掉并用其它值取代
array array_merge(array array1 [, array array2 [, array...]])合并一個或多個數(shù)組
array array_flip(array trans)交換數(shù)組中的鍵和值
int extract(array var_array [, int extract_type [, string prefix]])從數(shù)組中將變量導入到當前的符號表
array compact(mixed varname [, mixed...])建立一個數(shù)組,包括變量名和它們的值
bool sort(array &array [, int sort_flags])從最低到最高重新安排
bool natsort($a)用“自然排序”算法對數(shù)組排序
bool rsort(array &array [, int sort_flags])對數(shù)組進行逆向排序(最高到最低)
bool asort(array &array [, int sort_flags])對數(shù)組進行排序并保持索引關(guān)系
bool arsort(array &array [, int sort_flags])對數(shù)組進行逆向排序并保持索引關(guān)系
bool ksort(array &array [, int sort_flags])對數(shù)組按照鍵名排序
bool krsort(array &array [, int sort_flags])對數(shù)組按照鍵名逆向排序
array array_filter(array input [, callback callback])用回調(diào)函數(shù)過濾數(shù)組中的單元
bool array_walk(array &array, callback funcname [, mixed userdata])對數(shù)組中的每個成員應(yīng)用用戶函數(shù)
array array_map(callback callback, array arr1 [, array...])將回調(diào)函數(shù)作用到給定數(shù)組的單元上
array array_fill(int start_index, int num, mixed value)用給定的值填充數(shù)組
array_fill(5, 3, 'a')-->array(5=>'a',6=>'a',7=>'a')array array_chunk(array input, int size [, bool preserve_keys])將一個數(shù)組分割成多個
其他
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();獲取數(shù)據(jù)類型
set_magic_quotes_runtime()0 for off, 1 for on 當遇到反斜桿、單引號,將會自動加上一個反斜桿,保護系統(tǒng)和數(shù)據(jù)庫的安全
ini_set();安全
function strReplace($str){
$strResult = $str;
if(!get_magic_quotes_gpc())//判斷設(shè)置是否開啟
{
$strResult = addslashes($strResult);//轉(zhuǎn)換sql語句特殊字符
}
return $strResult;} function quotes($content){
//如果magic_quotes_gpc=Off,那么就開始處理
if(!get_magic_quotes_gpc())
{
//判斷$content是否為數(shù)組
if(is_array($content))
{
//如果$content是數(shù)組,那么就處理它的每一個單無
foreach($content as $key=>$value)
{
$content[$key] = addslashes($value);
}
}
else
{
//如果$content不是數(shù)組,那么就僅處理一次
addslashes($content);
}
}
//返回$content
return $content;}
smarty 模板引擎將不分析
讀取配置文件
引入文件
$trusted_dir 指定目錄下的文件
捕獲模板輸出的數(shù)據(jù)
fffffffff
循環(huán)
<{section name=loop loop=$News_IN}>
<{$News_IN[loop].NewsID}>
<{/section}>
<{foreach from=$newsArray item=newsID key=k}>
新聞編號:<{$newsID.newsID}>
新聞內(nèi)容:<{$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調(diào)用:
---------------------
插入方法
插件文件: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調(diào)用:
php:
function eee($a)
{
return 'ffffffffffffff';
}
html:
if語句
eq相等,ne、neq不相等,gt大于
gte、ge大于等于,lte、le 小于等于,not非,mod求模。
is [not] div by是否能被某數(shù)整除,is [not] even是否為偶數(shù),$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系列的才需要,并且定界符可以自己選擇,只有前后一對就行,比如我們一般使用/符號,但是如果里面有/需要匹配那么就需要使用/來表示,當/需要出現(xiàn)多次的時候,這樣就不方便,我們就可以使用其他的定界符,比如|
正則特殊字符
.+ * ? [ ^ ] $(){ } =!< > | :
由原子(普通字符,如英文字符)、元字符(有特殊功用的字符)
模式修正字符
一個正則表達式中,至少包含一個原子
全部符號解釋
將下一個字符標記為一個特殊字符、或一個原義字符、或一個 向后引用、或一個八進制轉(zhuǎn)義符。例如,'n' 匹配字符 “n”。'n' 匹配一個換行符。序列 '' 匹配 “" 而 ”(“ 則匹配 ”(“。
^ 匹配輸入字符串的開始位置。如果設(shè)置了 RegExp 對象的 Multiline 屬性,^ 也匹配 'n' 或 'r' 之后的位置。
$ 匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp 對象的 Multiline 屬性,$ 也匹配 'n' 或 'r' 之前的位置。
* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 ”z“ 以及 ”zoo“。* 等價于{0,}。
+ 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 ”zo“ 以及 ”zoo“,但不能匹配 ”z“。+ 等價于 {1,}。
? 匹配前面的子表達式零次或一次。例如,”do(es)?“ 可以匹配 ”do“ 或 ”does“ 中的”do“。? 等價于 {0,1}。
{n} n 是一個非負整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 ”Bob“ 中的 'o',但是能匹配 ”food“ 中的兩個 o。
{n,} n 是一個非負整數(shù)。至少匹配n 次。例如,'o{2,}' 不能匹配 ”Bob“ 中的 'o',但能匹配 ”foooood“ 中的所有 o。'o{1,}' 等價于 'o+'。'o{0,}' 則等價于 'o*'。
{n,m} m 和 n 均為非負整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}“ 將匹配 ”fooooood“ 中的前三個 o。'o{0,1}' 等價于 'o?'。請注意在逗號和兩個數(shù)之間不能有空格。
? 當該字符緊跟在任何一個其他限制符(*, +, ?, {n}, {n,}, {n,m})后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串 ”oooo“,'o+?' 將匹配單個 ”o“,而 'o+' 將匹配所有 'o'。
.匹配除 ”n“ 之外的任何單個字符。要匹配包括 'n' 在內(nèi)的任何字符,請使用象 '[.n]' 的模式。
(pattern)匹配 pattern 并獲取這一匹配。所獲取的匹配可以從產(chǎn)生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 $0?$9 屬性。要匹配圓括號字符,請使用 '(' 或 ')'。
(?:pattern)匹配 pattern 但不獲取匹配結(jié)果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用 ”或“ 字符(|)來組合一個模式的各個部分是很有用。例如,'industr(?:y|ies)就是一個比 'industry|industries' 更簡略的表達式。
(?=pattern)正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如,'Windows(?=95|98|NT|2000)' 能匹配 ”Windows 2000“ 中的 ”Windows“,但不能匹配 ”Windows 3.1“ 中的 ”Windows“。預查不消耗字符,也就是說,在一個匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。
(?!pattern)負向預查,在任何不匹配 pattern 的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如'Windows(?!95|98|NT|2000)' 能匹配 ”Windows 3.1“ 中的 ”Windows“,但不能匹配 ”Windows 2000“ 中的 ”Windows“。預查不消耗字符,也就是說,在一個匹配發(fā)生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始
x|y 匹配 x 或 y。例如,'z|food' 能匹配 ”z“ 或 ”food“。'(z|f)ood' 則匹配 ”zood“ 或 ”food“。
[xyz] 字符集合。匹配所包含的任意一個字符。例如,'[abc]' 可以匹配 ”plain“ 中的 'a'。
[^xyz] 負值字符集合。匹配未包含的任意字符。例如,'[^abc]' 可以匹配 ”plain“ 中的'p'。
[a-z] 字符范圍。匹配指定范圍內(nèi)的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫字母字符。
[^a-z] 負值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內(nèi)的任意字符。
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 匹配一個數(shù)字字符。等價于 [0-9]。
D 匹配一個非數(shù)字字符。等價于 [^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 為十六進制轉(zhuǎn)義值。十六進制轉(zhuǎn)義值必須為確定的兩個數(shù)字長。例如,'x41' 匹配 ”A“。'x041' 則等價于 'x04' & ”1“。正則表達式中可以使用 ASCII 編碼。.num 匹配 num,其中 num 是一個正整數(shù)。對所獲取的匹配的引用。例如,'(.)1' 匹配兩個連續(xù)的相同字符。
n 標識一個八進制轉(zhuǎn)義值或一個向后引用。如果 n 之前至少 n 個獲取的子表達式,則 n 為向后引用。否則,如果 n 為八進制數(shù)字(0-7),則 n 為一個八進制轉(zhuǎn)義值。
nm 標識一個八進制轉(zhuǎn)義值或一個向后引用。如果 nm 之前至少有 nm 個獲得子表達式,則 nm 為向后引用。如果 nm 之前至少有 n 個獲取,則 n 為一個后跟文字 m 的向后引用。如果前面的條件都不滿足,若 n 和 m 均為八進制數(shù)字(0-7),則 nm 將匹配八進制轉(zhuǎn)義值 nm。
nml 如果 n 為八進制數(shù)字(0-3),且 m 和 l 均為八進制數(shù)字(0-7),則匹配八進制轉(zhuǎn)義值 nml。
un 匹配 n,其中 n 是一個用四個十六進制數(shù)字表示的 Unicode 字符。例如,u00A9 匹配版權(quán)符號(?)。
例子
/b([a-z]+)b/i 單詞數(shù)量
/(w+)://([^/:]+)(:d*)?([^# ]*)/ 將一個URL解析為協(xié)議、域、端口及相對路徑
/^(?:Chapter|Section)[1-9][0-9]{0,1}$/ 定位章節(jié)的位置
/[-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]+$ 純數(shù)據(jù)檢查
^[0-9a-z]{1}[0-9a-z-]{0,19}$ 用戶名檢查,字母和數(shù)字開始,只能含字母、數(shù)字、橫杠
模式修正符
i 忽略大小寫
s 如果設(shè)定了此修正符,模式中的圓點元字符(.)匹配所有的字符,包括換行符
e 只用在preg_replace(),在替換字符串中對逆向引用作正常的替換,將其作為 PHP 代碼求值,并用其結(jié)果來替換所搜索的字符串。
如:
$p = '/[colorFont](.+?)[/colorFont]/ie';
$t = '”“';
ecoh preg_replace($p,$t,$string);
這里必須加上e修正,才能將匹配到的內(nèi)容用urlencode處理
U 貪婪模式,最大限度匹配
如:/a[w]+?e/U匹配abceadeddd中的abceade而不是abce,如果不加U修正,則匹配abce
A 強制從字符串開頭匹配,即自動在模式開頭加上^
m 當設(shè)定了此修正符,“行起始” ^ 和“行結(jié)束” $ 除了匹配整個字符串開頭和結(jié)束外,還分別匹配其中的換行符的之后和之前。如果目標字符串中沒有“n”字符或者模式中沒有 ^ 或 $,則設(shè)定此修正符沒有任何效果。
D 模式中的美元元字符僅匹配目標字符串的結(jié)尾。沒有此選項時,如果最后一個字符是換行符的話,美元符號也會匹配此字符之前。如果設(shè)定了 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字節(jié),允許字母數(shù)字下劃線)
preg_match('/^[a-zA-Z][a-zA-Z0-9_]{4,5}$/', 'a011a')
匹配數(shù)字
/^-d*$/ 匹配負整數(shù)
/^-?d*$/ 匹配整數(shù)
匹配浮點數(shù)
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()判斷給定文件名是否可執(zhí)行
filectime()獲取文件的創(chuàng)造時間
filemtime()獲取文件的修改時間
fileatime()獲取文件的訪問時間
stat()獲取文件大部分屬性值 解析目錄
basename()返回路徑中的文件名部分
dirname()返回目錄
pathinfo()返回目錄名、基本名和擴展名的關(guān)聯(lián)數(shù)組 遍歷目錄
opendir()打開指定目錄
readdir()關(guān)閉指定目錄
closedir()關(guān)閉指定目錄
rewinddir()倒回目錄句柄
$dir_handle=opendir('.');
while($file=readdir($dir_handle))
{
echo filesize($file).'___'.$file.'
';
}
closedir($dir_handle);建立和刪除目錄
mkdir()創(chuàng)建目錄
rmdir()刪除空目錄 文件操作
fopen()fclose()fwrite()寫入文件
fputs()fwrite的別名
file_put_contents($文件名,$內(nèi)容)把內(nèi)容存成文件
file_get_contents()從文件讀出內(nèi)容 文件讀取
fread()stream_get_contents()fgets()從文件指針中讀取一行
feof()測試文件指針是否到了文件結(jié)束的位置
fgetc()從文件指針中讀取字符
file()readfile()讀入一個文件并寫入到輸出緩沖
ftell()返回文件指針的當前位置
fseek()移動文件指針到指定的位置
rewind()移動文件指針到文件的開頭
flock()文件鎖定
copy()復制文件
unlink()刪除文件
ftruncate()將文件截斷到指定的長度
rename()重命名文件或目錄
文件控制
chgrp
chmod(string $filename , int $mode)
chown 保存讀取文件
-----------把內(nèi)容存成文件
$cache_file = fopen('f:1.txt', 'w+');
fwrite($cache_file, $t);
-----------把內(nèi)容存成文件
$s = ”內(nèi)容“;
file_put_contents('f:/2.txt',$s);
-----------把文件內(nèi)容讀成字符串
$s = file_get_contents('f:/2.txt');
echo $s;
-----------把文件內(nèi)容按行讀成字符串
$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對應(yīng)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“;
//連接的服務(wù)器地址
$db_user=”root“;
//連接數(shù)據(jù)庫的用戶名
$db_psw=”root“;
//連接數(shù)據(jù)庫的密碼
$db_name=”test“;//連接的數(shù)據(jù)庫名稱
$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))//循環(huán)輸出結(jié)果集中的記錄
{
echo($row['id']).”
“;
echo($row['username']).”
“;
echo($row['password']).”
“;
echo ”
“;
}
mysqli_free_result($result);
mysqli_close($mysqli);
對象
$db_host=”localhost“;
//連接的服務(wù)器地址
$db_user=”root“;
//連接數(shù)據(jù)庫的用戶名
$db_psw=”root“;
//連接數(shù)據(jù)庫的密碼
$db_name=”test“;//連接的數(shù)據(jù)庫名稱
$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)//判斷結(jié)果集中行的數(shù)目是否大于0
{
while($row =$result->fetch_array())//循環(huán)輸出結(jié)果集中的記錄
{
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 ”刪除操作執(zhí)行成功“;}else{
echo ”刪除操作執(zhí)行失敗“;} $mysqli->close();綁定結(jié)果
$mysqli=new mysqli(”localhost“,”root“,”root“,”test“);
//實例化mysqli $query=”select * from users“;$result=$mysqli->prepare($query);
//進行預準備語句查詢
$result->execute();
//執(zhí)行預準備語句
$result->bind_result($id,$username,$password);
//綁定結(jié)果
while($result->fetch()){
echo $id.'_';
echo $username.'_';
echo $password;
echo ”
“;} $result->close();
//關(guān)閉預準備語句
$mysqli->close();
//關(guān)閉連接 綁定參數(shù)
$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);
//綁定參數(shù) I:integer D:double S:string B:blob
$username='sy0807';
$password='employee7';
$result->execute();
//執(zhí)行預準備語句
$result->close();
$mysqli->close();
綁定參數(shù)、綁定結(jié)果
$mysqli=new mysqli(”localhost“,”root“,”root“,”test“);
//實例化mysqli
$query=”select * from users where id < ?“;
$result=$mysqli->prepare($query);
$result->bind_param(”i“,$id);
//綁定參數(shù)
$id=10;
$result->execute();
$result->bind_result($id,$username,$password);
//綁定結(jié)果
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)){
//執(zhí)行多個查詢
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();//關(guān)閉連接
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;增、刪、改、事務(wù)開啟
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執(zhí)行失敗“);
}
$b = $db->exec(”insert into users(id, username, password,kkk)values('', 'Joe', 'Bloggs')“);
if($b == false)
{
throw new Exception(”sql2執(zhí)行失敗“);
}
$db->commit();
$db = null;
}
catch(Exception $ex)
{
echo $ex;
$db->rollback();
} 緩存
Memcache
.下載memcached,http://', 'w+');
fwrite($cache_file, $content);
頁面靜態(tài)化-------
ob_start();
$static_file = '1.html';//靜態(tài)頁面
$php_file = basename(__FILE__);//當前動態(tài)頁面
if(!file_exists($static_file)||
((filemtime($static_file)+10)< time())|| //緩存固定時間
filemtime($php_file)> filemtime($static_file))//源文件已修改
{
echo '靜態(tài)頁面示例';
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:關(guān)閉 1:開啟(每次輸出后都自動刷新,而不再需要去調(diào)用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();
偽靜態(tài)
首先:
必須要空間支持 Rewrite 以及對站點目錄中有.htaccess 的文件解析,才有效.如何讓空間支持Rewrite 和.htaccess 的文件解析呢 往下看
第一步:要找到apache安裝目錄下的httpd.cof文件,在里面找到
Options FollowSymLinks
AllowOverride none 把none改all, 第二步:找到以下內(nèi)容:
#LoadModule rewrite_module modules/mod_rewrite.so 改為
LoadModule rewrite_module modules/mod_rewrite.so 第三步:保存重啟apache。
ok。
其次是.htaccess的書寫規(guī)則:
RewriteEngine On
RewriteBase /
#打開允許符號鏈接
Options FollowSymLinks
RewriteRule smarty/([0-9]+)/([0-9]+)smarty/index.php?id=$1&name=$2
.htaccess加入以下內(nèi)容
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 這條是把企業(yè)庫的分類進行偽靜態(tài)處理
原先假設(shè)訪問地址為http://
優(yōu)點:
1、偽靜態(tài)處理加速搜索引擎收入
2、地址映射到根目錄,增加權(quán)重,提高排名
序列化
__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('數(shù)據(jù)添加成功!');
}else{
$this->error('數(shù)據(jù)寫入錯誤');
}
自動驗證
array(驗證字段,驗證規(guī)則,錯誤提示,驗證條件,附加規(guī)則,驗證時間)
驗證規(guī)則:require 字段必須、email 郵箱、url URL地址、currency 貨幣、number 數(shù)字
Model:: MODEL_INSERT 或者1新增數(shù)據(jù)時候驗證
Model:: MODEL_UPDATE 或者2編輯數(shù)據(jù)時候驗證
Model:: MODEL_BOTH 或者3 全部情況下驗證(默認)
protected $_validate = array(array('verify','require','驗證碼必須!'), //默認情況下用正則進行驗證
array('name','','帳號名稱已經(jīng)存在!',0,’unique’,1), // 在新增的時候驗證name字段是否唯一
array('value',array(1,2,3),'值的范圍不正確!',2,’in’), // 當值不為空的時候判斷是否在一個范圍內(nèi)
array('repassword','password','確認密碼不正確',0,’confirm’), // 驗證確認密碼是否和密碼一致
array('password','checkPwd','密碼格式不正確',0,’function’), // 自定義函數(shù)驗證密碼格式);
apache多域名配置
NameVirtualHost *:80 Alias /php/ ”f:/php/“
第二篇:php開發(fā)中常用函數(shù)總結(jié)
php開發(fā)中常用函數(shù)總結(jié)
1.獲取IP2.時間的增加3.檢查日期是否合法日期4.時間比較函數(shù),返回兩個日期相差幾秒、幾分鐘、幾小時或幾天5.PHP重定向6.獲取訪問者瀏覽器7.獲取訪問者操作系統(tǒng)8.文件格式類9.php生成excel文檔10.時間比較問題11.提取頁面和瀏覽器提交的變量,作用相當于使PHP.INI開了全局變量12.讀取文件函數(shù)13.寫入文件函數(shù)14.頁面快速轉(zhuǎn)向15.產(chǎn)生隨機字符串函數(shù)16.截取一定長度的字符串(該函數(shù)對GB2312使用有效)17.取得客戶端IP地址18.判斷郵箱地址19.分頁(兩個函數(shù)配合使用)20.獲取新插入數(shù)據(jù)的ID21.獲得當前的腳本網(wǎng)址22.把全角數(shù)字轉(zhuǎn)為半角數(shù)字23.去除HTML標記24.相對路徑轉(zhuǎn)化成絕對路徑26.取得所有鏈接27.HTML表格的每行轉(zhuǎn)為CSV格式數(shù)組28.將HTML表格的每行每列轉(zhuǎn)為數(shù)組,采集表格數(shù)據(jù)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 = “"){ //時間比較函數(shù),返回兩個日期相差幾秒、幾分鐘、幾小時或幾天
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}截取一定長度的字符串(該函數(shù)對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}分頁(兩個函數(shù)配合使用)
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}獲取新插入數(shù)據(jù)的ID{downsource}//獲得當前的腳本網(wǎng)址
if(empty($_SERVER[”QUERY_STRING“]))$nowurl = $scriptName;else $nowurl = $scriptName.”?“.$_SERVER[”QUERY_STRING“];} return $nowurl;}?>{downsource}//把全角數(shù)字轉(zhuǎn)為半角數(shù)字{downsource}//去除HTML標記“,”>“,$txt);$txt = preg_replace(”/[rn]{1,}/isU“,”rn“,$txt);return $txt;}?>{downsource}//相對路徑轉(zhuǎn)化成絕對路徑
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表格的每行轉(zhuǎn)為CSV格式數(shù)組]*?>'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表格的每行每列轉(zhuǎn)為數(shù)組,采集表格數(shù)據(jù)]*?>'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){//用來產(chǎn)生密碼的字符串$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789';$password=”";while(strlen($password)<$len)
$password.=substr($chars,(mt_rand()%strlen($chars)),1);return $password;
}
第三篇:開發(fā)技術(shù)(PHP)測試題
1、簡述靜態(tài)網(wǎng)頁和動態(tài)網(wǎng)頁的區(qū)別,從文件擴展名、使用技術(shù)、表現(xiàn)形式、執(zhí)行位置等進行闡述
答案:
2、簡述如何搭建PHP程序的環(huán)境
答案:
3、簡述PHP語言中,流程控制的分類,及幾種代表語句。
答案:
4、簡述表單提交過程中,get和post方式的區(qū)別
答案:
5、簡述session機制的原理
答案:
6、如何在php程序中啟動session
答案:
7、代碼如下
$arr=array(“I”,“am”,“a”,“student”);
$whole=implode(_,$arr);
echo $whole;
代碼輸出的結(jié)果是:
答案:
8、代碼如下
$color=imagecolorallocate($img,0,0,255);
代碼實現(xiàn)的功能:
答案:
9、代碼如下:
echo “今天是 ”.date(Y年n月j日);
$w=date(w);
$week=array(星期日,星期一,星期二,星期三,星期四,星期五,星期六);
echo $week[$w];
代碼實現(xiàn)的功能:
輸出今天的日期和是周幾
輸出的內(nèi)容是(按考試的日期來輸出即可):
2021/12/21 星期二
答案:
10、代碼如下:
$pageno=isset($_GET[pageno])?$_GET[pageno]:1;
代碼實現(xiàn)的功能:
答案:
11、php的源碼是
A、開放的
B、封閉的C、需購買的D、完全不可見的答案: A12、靜態(tài)網(wǎng)頁的執(zhí)行在瀏覽器端完成,動態(tài)網(wǎng)頁的執(zhí)行在服務(wù)器端完成答案: 正確
13、動態(tài)頁面中不可以出現(xiàn)html、css和javaScript的代碼
答案: 錯誤
14、服務(wù)器收到客戶發(fā)出的靜態(tài)頁面請求之后,只把該頁面文件發(fā)送給客戶瀏覽器來執(zhí)行
答案: 錯誤
15、存放在任意文件夾中的php文件都可以通過localhost/…方式來執(zhí)行
答案: 錯誤
16、搭建PHP環(huán)境時要先安裝php,再安裝apache服務(wù)器
答案: 錯誤
17、apache服務(wù)默認占用80號端口,不可更改
答案: 錯誤
18、下面哪項不屬于靜態(tài)網(wǎng)頁設(shè)計中使用的核心技術(shù)
A、HTML
B、DreamWeaver
C、CSS
D、Javascript
答案: B19、下面哪組中列舉的技術(shù)都屬于動態(tài)網(wǎng)頁設(shè)計時使用的核心技術(shù)
A、ASP、JSP、SSP
B、JSP、XHTML、PHP
C、JSP、PHP、ASP
D、PHP、ASP、Javascript
答案: C20、動態(tài)網(wǎng)頁與靜態(tài)網(wǎng)頁的本質(zhì)區(qū)別是
A、靜態(tài)頁面運行后能夠查看所有的源代碼,動態(tài)頁面中動態(tài)部分源代碼則無法查看
B、靜態(tài)網(wǎng)頁任何時候運行內(nèi)容都相同,動態(tài)頁面則不然
C、動態(tài)頁面是在服務(wù)器端執(zhí)行的,而靜態(tài)頁面是在瀏覽器端執(zhí)行的D、靜態(tài)頁面中可以包含各種小動畫,動態(tài)頁面不可以
答案: C21、下面各種說法中錯誤的是
A、在動態(tài)頁面中可以包含大量的靜態(tài)代碼
B、使用靜態(tài)頁面技術(shù)可以實現(xiàn)動態(tài)變化的時鐘效果
C、動態(tài)頁面的運行過程通常會包含在服務(wù)器端的執(zhí)行過程和在瀏覽器端的執(zhí)行過程兩個階段
D、瀏覽器請求執(zhí)行一個靜態(tài)頁面時,服務(wù)器先把頁面文件執(zhí)行完畢,然后將結(jié)果傳遞到瀏覽器端顯示
答案: D22、下面關(guān)于PHP的說法錯誤的是
A、PHP是一種服務(wù)器端的腳本
B、PHP程序可以在任意環(huán)境中執(zhí)行
C、在PHP文件中可以包含任意的HTML代碼和樣式的應(yīng)用
D、使用PHP可以實現(xiàn)注冊、登錄、在線投票、訪客計數(shù)等動態(tài)頁面中需要的各種功能
答案: B23、若PHP文件中包含html代碼,下面描述中正確的是
A、服務(wù)器將整個php文件發(fā)送給瀏覽器執(zhí)行
B、服務(wù)器將所有代碼執(zhí)行后將結(jié)果送給瀏覽器
C、服務(wù)器執(zhí)行html代碼后將執(zhí)行結(jié)果和php代碼一起送給瀏覽器
D、服務(wù)器執(zhí)行php代碼后,將指向結(jié)果和html代碼一起送給瀏覽器
答案: D24、下面哪組是PHP支持的服務(wù)器環(huán)境
A、Apache和pws
B、Apache、IIS和pws
C、Apache和IIS
D、只有Apache
答案: C25、若是系統(tǒng)中已經(jīng)存在了IIS服務(wù),且占用了80端口號,則下面說法正確的是
A、Apache能夠成功安裝,但是無法啟用,只需要修改端口號即可啟用
B、Apache無法完成安裝過程
C、Apache能夠成功安裝,且能正常啟用
D、以上說法都不正確
答案: A26、下面關(guān)于Apache主目錄說法錯誤的是
A、安裝Apache之后,必須要將頁面文件放在其主目錄下才能正常運行
B、安裝Apache之后,系統(tǒng)會給其指定默認的主目錄
C、Apache的主目錄不能隨意修改
D、用戶可以根據(jù)需要修改Apache主目錄
答案: C27、搭建apache web服務(wù)器(使用phpstduy)之后,默認情況下運行文件時的localhost對應(yīng)哪個文件夾?
A、apache
B、htdocs
C、,需要使用哪個代碼實現(xiàn)
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、要在表單文本框中顯示數(shù)組元素$row[title]的值,則代碼是:
答案:
echo $row[title];;
解析:
186、判斷表單文本框age的數(shù)據(jù)是否提交到服務(wù)器端的方法是______
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、使用函數(shù)move_uploaded_file()時只需提供一個參數(shù)
答案: 錯誤
189、表單中有文件域元素時,下面哪個說法錯誤________
A、中method屬性取值可以是get
B、中enctype屬性取值為multipart/form-data
C、文件域元素需要設(shè)置name屬性
D、可以有多個文件域元素
答案: A190、存在表單文件域元素fname,系統(tǒng)數(shù)組$_FILES[fname]中的內(nèi)容不包括___
A、上傳文件的名稱
B、上傳文件的類型
C、上傳文件的大小
D、上傳文件的內(nèi)容
答案: D191、進行文件上傳時,文件相關(guān)信息存放在系統(tǒng)數(shù)組____中
答案: $_FILES;
192、以下系統(tǒng)數(shù)組中可以使用兩個下標的是___________
A、$_POST
B、$_GET
C、$_FILES
D、$_SESSION
答案: C193、函數(shù)move_uploaded_file()只需要一個參數(shù)()
答案: 錯誤
194、若存在文件域元素名稱為f1,$_FILES[‘F1’]是一個數(shù)組()
答案: 正確
195、進行文件上傳時,需要在form標記中設(shè)置屬性enctype的取值是
A、multipart/form-data
B、text/plain
C、application/x-www-form-urlencoded
D、以上都不是
答案: A196、關(guān)于函數(shù)move_uploaded_file(),下列說法錯誤的是
A、該函數(shù)需要指定兩個參數(shù)
B、第二個參數(shù)需要同時指定文件存儲的位置和要保存文件的名稱
C、第一個參數(shù)需要指定文件的臨時存儲位置和臨時名稱
D、以上說法都是錯誤的答案: D197、關(guān)于系統(tǒng)數(shù)組$_FILES,第二個下標不包含下面哪一項
A、tmpname
B、size
C、name
D、type
答案: A198、關(guān)于多文件上傳功能中,下面說法錯誤的是
A、文件域元素中必須添加multiple屬性
B、可以同時選擇不同文件夾中的文件
C、$_FILES[file1][name]是一個數(shù)組
D、文件域元素的name屬性取值必須帶有[]
答案: B199、$_FILES{“touxiang”][“type”]作用是
A、獲取上傳文件的類型
B、獲取上傳文件的大小
C、獲取上傳文件的名稱
D、獲取上傳文件的臨時存儲信息
答案: A200、完成文件上傳功能,在標簽中使用哪個屬性設(shè)置編碼_____
A、enctype
B、name
C、ID
D、action
答案: A201、在A網(wǎng)頁上創(chuàng)建了一個Session變量:$____SESSION[“user”]=“張三”,在B網(wǎng)頁上要輸出這個Session變量的值,應(yīng)使用。
答案: echo $_SESSION[“user”];
202、在同一個網(wǎng)站的不同文件之間傳遞數(shù)據(jù)的機制是__________
A、session
B、cookie
C、application
D、post
答案: A203、下面哪個系統(tǒng)數(shù)組不用于接收表單提交的數(shù)據(jù)________
A、$_SESSION
B、$_FILES
C、$_POST
D、$_GET
答案: A204、關(guān)于session機制的描述中正確的是_____
A、用戶的session都保存在瀏覽器端
B、一旦某個頁面向session中提供了數(shù)據(jù),當前網(wǎng)站中在該頁面之后執(zhí)行的頁面文件都可以根據(jù)需要從中獲取該數(shù)據(jù)
C、不同網(wǎng)站的頁面之間可以通過session機制來傳遞數(shù)據(jù)
D、session中存放的是所有用戶的共用數(shù)據(jù)
答案: B205、點擊超鏈接可以向服務(wù)器提交數(shù)據(jù)()
答案: 正確
206、鏈接打開文件count.php時使用鍵名uname提交數(shù)據(jù)“l(fā)iuhong”,超鏈接href屬性的取值為
A、href=“count.php”?uname=“l(fā)iuhong”
B、href=“count.php?uname:liuhong”
C、href=“count.php?uname=liuhong”
D、href=“count.php”?uname:“l(fā)iuhong”
答案: C207、關(guān)于session機制的描述中錯誤的是
A、服務(wù)器可通過sessionID來區(qū)分各個不同用戶
B、一旦某個頁面向session管道中提供了數(shù)據(jù),當前網(wǎng)站中在該頁面之后執(zhí)行的頁面文件都可以根據(jù)需要從管道中獲取該數(shù)據(jù)
C、不同網(wǎng)站的頁面之間可以通過session機制來傳遞數(shù)據(jù)
D、要提供數(shù)據(jù)的頁面和要獲取數(shù)據(jù)的頁面都要啟用session
答案: C208、下面說法中錯誤的是
A、變量有生命周期
B、session有生命周期
C、session產(chǎn)生于用戶開始訪問一個網(wǎng)站時
D、一個session中可以保存多個用戶的信息
答案: D209、在PHP中,有兩個函數(shù)與cookie操作有關(guān)。其中____用來設(shè)置cookie變量內(nèi)容, ____用來讀取cookie變量內(nèi)容。
答案: setcookie;$_COOKIE;
210、能夠在同一網(wǎng)站不同頁面之間傳遞數(shù)據(jù)的機制是____,在程序代碼開始處啟用該機制時需要使用的代碼是____
答案: session;session_start();
211、Session可以在不同網(wǎng)站的頁面之間傳遞數(shù)據(jù)()
答案: 錯誤
212、mysql數(shù)據(jù)庫中查詢數(shù)據(jù)用select語句
答案: 正確
213、以下說法不正確的是
A、模糊查詢使用的關(guān)鍵字是like
B、排序查詢asc是降序,desc是升序
C、分頁查詢使用的關(guān)鍵字是limit
D、mysql如果只安裝服務(wù)不安裝界面也可以正常使用
答案: B214、在用瀏覽器查看網(wǎng)頁時出現(xiàn)404錯誤可能的原因是
A、頁面源代碼錯誤
B、文件不存在C、與數(shù)據(jù)庫連接錯誤
D、權(quán)限不足
答案: B215、安裝MySQL數(shù)據(jù)庫之后,默認使用的是根用戶root
答案: 正確
216、卸載MySQL時,說法正確的是
A、只要在控制面板中卸載軟件即可
B、在控制面板中卸載軟件后,清理完注冊表信息即可
C、先刪除系統(tǒng)盤符下的文件夾,再清理注冊表信息,最后卸載軟件
D、先在控制面板中卸載軟件,然后清理注冊表信息,最后刪除系統(tǒng)盤符下的相關(guān)文件夾
答案: D217、MySQL服務(wù)器有一個超級管理員賬號,其名稱是()
A、admin
B、root
C、sa
D、Administrator
答案: B218、mysqli中返回結(jié)果集中記錄總數(shù)的函數(shù)是()
A、fetch_row
B、fetch_assoc
C、num_rows
D、field_count
答案: C219、訪問mysql數(shù)據(jù)庫時,用來選擇并打開指定數(shù)據(jù)庫的方法是_________
A、mysqli_query()
B、mysqli_connect()
C、mysqli_select_db()
D、mysqli_num_rows()
答案: C220、若是在某次訪問數(shù)據(jù)庫的操作中,需要用到如下四個函數(shù)
①mysqli_num_rows()②mysqli_select_db()、③mysqli_connet()④mysqli_query()
則使用這四個函數(shù)的順序是___________
A、①②③④
B、②③①④
C、③②④①
D、③④①②
答案: C221、PHP中選擇打開數(shù)據(jù)庫的方法是______
A、mysqli_connect()
B、mysqli_select_db()
C、mysqli_query()
D、mysqli_num_rows()
答案: B222、查詢用戶名和密碼信息是否存在時,關(guān)于查詢結(jié)果記錄集$result的說法錯誤的是____
A、該記錄集中的記錄數(shù)只能是0或者1
B、該記錄集中的記錄數(shù)無法預知
C、若記錄數(shù)是0,說明用戶輸入的賬號或者密碼信息有誤
D、若記錄數(shù)是1,說明用戶輸入的賬號和密碼信息正確
答案: B223、訪問mysql數(shù)據(jù)庫時,從查詢結(jié)果記錄集中獲取一條記錄的方法是
A、mysql_num_rows()
B、mysql_select_db()
C、mysql_fetch_array()
D、mysql_fetch_Array()
答案: C224、函數(shù)mysql_fetch_array()的作用是
A、獲取一個數(shù)組中的元素
B、從查詢結(jié)果記錄集中獲取一條記錄并以對象方式存儲訪問
C、從查詢結(jié)果記錄集中獲取一條記錄并以數(shù)組方式存儲訪問
D、以上說法都不正確
答案: C225、下面操作MySQL數(shù)據(jù)庫的方法中,哪個返回值可能是false
A、mysql_fetch_array()
B、mysql_select_db()
C、mysql_num_rows()
D、mysql_fetch_Array()
答案: A226、查詢數(shù)據(jù)表時,限制獲取查詢結(jié)果中序號為6、7、8的記錄,需要使用的子句是
A、limit 6,8
B、limit 6,2
C、from 6 to 8
D、start 6 to 8
答案: B227、MySQL數(shù)據(jù)庫操作中,Create New Schema命令的作用是
A、創(chuàng)建數(shù)據(jù)表
B、創(chuàng)建數(shù)據(jù)表中一個列名
C、創(chuàng)建數(shù)據(jù)庫
D、以上說法都不正確
答案: C228、關(guān)于數(shù)據(jù)庫的導入操作,下列說法中錯誤的是
A、使用的命令是Restore
B、導入過程中可以更改原來數(shù)據(jù)庫的名稱
C、導入過程中必須要選擇忽略錯誤選項,否則導入無法完成D、若安裝數(shù)據(jù)庫時選擇的字符集是GBK,則導入過程中,必須要選擇字符集是GBK
答案: D229、關(guān)于PHP訪問MySQL數(shù)據(jù)庫的各種方法,下列說法中正確的是
A、在使用mysql_connect()連接數(shù)據(jù)庫成功之后,就可以直接訪問數(shù)據(jù)表完成各種操作
B、mysql_num_rows()的作用是獲取查詢結(jié)果記錄集中記錄的個數(shù),其參數(shù)可以省略
C、mysql_select_db()的作用是選擇打開指定的數(shù)據(jù)庫,可以只指定一個參數(shù)
D、mysql_query()函數(shù)只能執(zhí)行查詢語句,不能執(zhí)行插入、刪除、更新語句
答案: C230、假設(shè)用戶在登錄時,輸入的用戶名信息保存在變量$emailaddr中,密碼保存在變量$psd中,查詢數(shù)據(jù)表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、查詢用戶名和密碼信息是否存在時,關(guān)于查詢結(jié)果記錄集$result的說法錯誤的是
A、該記錄集中的記錄數(shù)只能是0或者1
B、該記錄集中的記錄數(shù)無法預知
C、若記錄數(shù)是0,說明用戶輸入的賬號或者密碼信息有誤
D、若記錄數(shù)是1,說明用戶輸入的賬號和密碼信息正確
答案: B232、要獲取記錄集$result中的記錄數(shù),需要使用代碼
A、count($result)
B、mysql_num_row($result)
C、mysql_nums_rows($result)
D、mysql_num_rows($result)
答案: D233、MySQL中使用Select語句查詢時,要限制返回的行數(shù)可使用____子句。
答案: limit;
234、訪問mysql數(shù)據(jù)庫時,從查詢結(jié)果記錄集中獲取一條記錄的方法是__________
A、mysqli_num_rows()
B、mysqli_select_db()
C、mysqli_fetch_array()
D、mysqli_query()
答案: C235、在mysql Administrator界面下,Create New Schema命令的作用是_____
A、創(chuàng)建數(shù)據(jù)庫
B、創(chuàng)建數(shù)據(jù)表中一個列名
C、創(chuàng)建數(shù)據(jù)表
D、以上說法都不正確
答案: A236、關(guān)于數(shù)據(jù)庫的導入操作,下列說法中錯誤的是_____
A、使用的命令是Restore
B、導入過程中可以更改原來數(shù)據(jù)庫的名稱
C、導入過程中必須要選擇忽略錯誤選項,否則導入無法完成D、使用的命令是Backup
答案: D237、假設(shè)用戶在登錄時,輸入的用戶名信息保存在變量$uname中,密碼保存在變量$psd中,查詢數(shù)據(jù)表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中的記錄數(shù),需要使用代碼______
A、count($result)
B、mysqli_num_row($result)
C、mysqli_nums_rows($result)
D、mysqli_num_rows($result)
答案: D239、MySQL數(shù)據(jù)庫的根用戶是____
答案: root;
240、下面的程序使用mysqli內(nèi)置函數(shù)連接數(shù)據(jù)庫,并將表lyb中的記錄顯示在網(wǎng)頁中,將1234處填寫完整
241、下面的程序用來刪除記錄,當用戶單擊“刪除”超鏈接時,記錄將被刪除,將下面1234處的代碼補充完整
1.isset 2$_GET[“id”] 3.$id 4.$sql,$conn242、下面的程序是獲取到下面表單發(fā)送來的信息并按以下格式輸出
將下面的服務(wù)器端的程序補充完整,在1234處填寫合適的代碼
$user=$_POST[“user”];
$pwd=$_POST[“pwd”];
$addr=$_POST[“addr”];
echo $user.“您好,您住在”.$addr.”,您的密碼是“.$pwd;
243、1)寫一個函數(shù),函數(shù)名為Trimtit,有兩個參數(shù)$tit,$n,函數(shù)的功能是根據(jù)指定的長度截取原始字符串。
如果原始字符串$tit的長度大于指定長度$n,則返回從左端截取的字符串并加“…”
如果長度未超過指定長度,則返回原始字符串。
2)并編寫測試代碼,使用函數(shù)實現(xiàn)字符串的截取。
答案:
function Trimtit($tit,$n){if(strlen($tit)>$n){
echo ”...“.substr($tit,0,$n);
}
else
echo $tit;
}
Trimtit(”tit664848",5);
解析:
244、編寫一個函數(shù),輸入是5個分數(shù),輸出是去掉一個最高分和去掉一個最低分后的平均分。
答案:
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循環(huán),完成1+2+3+4+…+100求和過程,使用變量$sum表示結(jié)果并輸出。 答案: $num=0; for($i=1;$i<=100;$i++){ $num+=$i; } echo $num; imagecreatetruecolor 輸出真彩色圖像 246、下面哪一個不是函數(shù)imagettftext()的參數(shù)_______ A、輸出字符的坐標 B、輸出字符的角度 C、字號 D、加粗輸出的字符 答案: D247、創(chuàng)建真彩色圖像,使用的函數(shù)是____ 答案: imagecreatetruecolor(); 248、代碼imagecolorallocate($img1,255,255,0)的作用是創(chuàng)建____色 答案: 黃; 249、imageline()函數(shù)能夠在畫布中畫線,需要四個參數(shù)() 答案: 錯誤 250、用于創(chuàng)建一幅真彩色圖像的函數(shù)是 A、imagecreatetruecolor() B、imagecreate() C、imagecolorallocate() D、imagefill() 答案: A251、用于為指定圖像分配顏色的函數(shù)是 A、imagecreatetruecolor() B、imagecreate() C、imagecolorallocate() D、imagefill() 答案: C252、下面哪一個不是函數(shù)imagettftext()的參數(shù) A、字號 B、輸出字符的角度 C、輸出字符的顏色 D、加粗輸出的字符 答案: D253、函數(shù)imagesetpixel()的作用是 A、在指定位置畫一條直線 B、在指定位置設(shè)置一個單一像素 C、使用指定的顏色填充指定的區(qū)域 D、新建一個基于調(diào)色板的圖像 答案: B254、若$color表示藍色,代碼imagefill($img,0,0,$color)作用是 A、設(shè)置畫布$img中坐標0,0的點為藍色 B、為畫布填充藍色 C、在畫布中畫藍色直線 D、輸出畫布 答案: B255、用于為畫布分配顏色的函數(shù)是_____ A、imagefill() B、imagecreate() C、imagecolorallocate() D、imagecolor() 答案: D 1.負責PHP相關(guān)產(chǎn)品模塊開發(fā)工作。 2.負責公司業(yè)務(wù)系統(tǒng)開發(fā)、單元測試、系統(tǒng)對接工作。 3.負責公司已有網(wǎng)絡(luò)管理系統(tǒng)的二次開發(fā)。 4.負責相關(guān)系統(tǒng)的設(shè)計與編碼工作。 5.負責研發(fā)產(chǎn)品技術(shù)文稍的編寫工作。第四篇:PHP開發(fā)工程師崗位職責
第五篇:PHP開發(fā)大型項目經(jīng)驗總結(jié)
PHP開發(fā)大型項目的一點經(jīng)驗
文章摘自我贏職場php在線教育
一、變量
最好是把所有的變量存儲在一個數(shù)組中,這樣在程序的開發(fā)中可以帶來很多的方便,特別是當程序很大的時候。變量的命名就當適合自己的習慣,不管是用拼音還是英語,至少應(yīng)當有一定的意義,以便適合記憶。變量的命名盡量規(guī)范化,不要與PHP中的關(guān)鍵字相沖突。
二、函數(shù)
PHP自帶了很多函數(shù),這給我們程序的編寫帶來了很多的方便。當然,在大型程序中我們往往自己要定義許多個函數(shù),幾十甚至上百個。當然在使用了類的程序中就不叫函數(shù)了,就應(yīng)該叫方法,這里暫且不談類的使用方法。函數(shù)多了,難免就會搞混了。有什么方法可以解決這個問題呢?可以參照上面變量的使用方法一樣,同樣的,我們也可以把自己定義的函數(shù)名全都放在一個數(shù)組中。這樣我們在使用的過程中可以直接在數(shù)組隨時檢查函數(shù)是否有無重復的定義。如果發(fā)現(xiàn)重復的現(xiàn)象,馬上變可以改過來。提高了程序編寫的速度。函數(shù)的使用還有一點要注意的是全局變量,雖然這是一個小問題,但卻不容忽視,要不然當某個變量千呼萬呼出不來的時候,呵呵。這時看看該變量是否在該函數(shù)中已經(jīng)申明成了全局變量。
三、程序的注釋
程序的注釋是很重要的,不管是C還是JAVA,程序的注釋往往可以體現(xiàn)出程序員的良好編程風格。無論是對于它人還是自己對大有好處,當然我們這里說的是大型項目的開發(fā),團體合作精神是很重要的。當你的程序?qū)懗鰜韯e人都很難看懂那還怎么談團體合作精神啊。當然如果這個大型項目是你一個人開發(fā)的那就另當別論了,或者是你時間緊迫,來不及寫注釋。不過一般來說這種情況是很少的。除非真的是非常時刻。一個優(yōu)秀的程序員絕對會為他寫的每個程序加注釋,哪怕是給自己看的。
四、采用何種文本編輯軟件寫源程序
這其實也沒一定的規(guī)定,只要自己喜歡就行了。我比較喜歡PHPEDIT,也許是用慣了,現(xiàn)在感覺一離開PHPEDIT寫PHP就沒感覺,初學PHP的時候用NOTEPAD寫,因為程序比較簡單。所以用NOTEPAD應(yīng)付下就行了,對于有幾百行的程序來講,用NOTEPAD顯然是不合適的。用PHPEDIT工作效率會提高幾倍,哪怕你從來沒用過。
五、數(shù)據(jù)庫的設(shè)計
數(shù)據(jù)庫的設(shè)計在開發(fā)大型項目中是很重要的一點,關(guān)系到整個項目開發(fā)的成敗。具體也就不多說了。大家可以在自己的實踐中積累經(jīng)驗,慢慢去體會??傊跀?shù)據(jù)庫的設(shè)計中最好應(yīng)該一開始就應(yīng)該確定下來。雖然可以在開發(fā)的過程中去改變已經(jīng)設(shè)計好的數(shù)據(jù)庫結(jié)構(gòu),但這對于整個項目的開發(fā)效率來講將大打折扣,有誰會愿意時不時的去改數(shù)據(jù)庫的結(jié)構(gòu)呢?
六、類的使用
類的使用主要是實現(xiàn)了代碼的重復使用,以降低項目開發(fā)的時間,程序員的工作量也會減少許多。只要可以使用類的地方應(yīng)當盡量使用類,使用類應(yīng)該養(yǎng)成一個良好的習慣,這樣才可以在真正使用類的地方得心應(yīng)手??梢哉f一個大型PHP項目就是由類組成的。個中的滋味還是自己慢慢體會吧。
總之,PHP在線學習的平臺我贏職場提醒大家在開發(fā)大型PHP項目的時候,要預算好時間。特別要小心客戶在半途來個回馬槍,那就功虧一簣了。