Responsive Web Design (響應式網頁設計)
為方便『智慧手機』『平版電腦』上網瀏覽的訪客
本網站即日起增建『響應式.自適應』網站(超連結)
如果你是使用『智慧手機』與『平版電腦』瀏覽的訪客
點擊以下圖片或網址進入新的網站閱讀文章與內容

響應式網頁設計
http://pro369.com/php/
本網站因為具有『歷史意義』我們還是保留原來的設計
兩種模式任君選擇(不然,可能會被誤認:跟不上朝代?)

PHP+MySQL+Dreamweaver整合教學(PHPMaker運用設計網站教學):快速設計網站與網頁
總教頭特別企畫【專業整合課程】比傳統的學習的還要快速與實用!


感謝您造訪 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學)密訓基地。 你可進入教學詳細內容介紹頁面,詳細瞭解PHP程式設計+MySQL資料庫(PHPMaker運用設計網站教學)及相關技術維護影片教學(完整配套措施),馬上可以設計架站程式與PHP網頁,快速建立MySQL資料庫、自動生成PHP網頁。可對資料庫進行瀏覽、修改、查詢、加入和刪除(整合成我們需要的網站)。

要在網路上經營網站賺大錢,不能只會下載現有的程式來架站(自己設計才能完全符合專業的特殊需求),你不用死背PHP語法,更可以完全不用花錢用購買資料庫(PHPMySQL完全免費!)你可以透過技術學習,讓PHP程式網頁+網路資料庫+Dreamweaver整合教學→讓你快速成為:【動態網站程式設計專家→你能因此賺大錢】!

 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學):

http://por.tw/php/new-E_learning/index.php


PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用教學)密訓基地  總教頭  敬上

瀏覽模式: 普通 | 列表
PHP程式設計問題諮詢:
為什麼我升級PHP後,原來的程式出現滿螢幕的 Notice: Undefined variable:


---------------------------------------------------------
PHP程式設計問題回覆:
 Notice: Undefined variable:
這是警告的意思,由於變數未定義引起的.
打開php.ini,找到最下面的error_reporting,修改為error_reporting = E_ALL & ~E_NOTICE

對於Parse error錯誤
error_reporting(0)無法關閉.
如果你想關閉任何錯誤提示,打開php.ini,找到display_errors,設置為display_errors = Off.以後任何錯誤都不會提示.

改善PHP開發模式的方法

改善PHP開發模式的方法
  
關於如何使用PHP語系來開發應用程式,我們每個人都有自己的技巧和方法。
實際上,我們大家都知道,有很多種模式和方法可以讓開發變得更加簡單。
儘管如此,還是有一些方法,尤其是編碼樣式和習慣,是大家公認的。
我們列舉出了可以改善PHP開發模式的方法。

我們不應該輕視代碼的組織,選取的編碼樣式應該是事先約定好的,許多人只是隨機的在做這些事情,這讓他們的代碼變得十分混亂,十分令人難以理解。

你可以在那裡宣稱自己是最好的開發者,但是,如果你的代碼缺乏良好的組織,你是不會走的太遠的。
舉個例子,比如說,在當地的社區大學中,你是一名教師。
如果你決定從初級和進階的資料中隨機地選取一大堆知識,然後按照這種順序把這些知識教授給你的學生
而不是從初級到進階,循序漸進地教授給你的學生,那麼你的學生們會十分困惑,而且,作為一名教師,他們是不會歡迎你的,如果他們不歡迎你,他們就不會上你的課。

我的觀點是,找出一種適合你的組織方法和編碼樣式,並且一直堅持下去,這樣的話,你的代碼的組織和配置會變得十分有條理。

對於獨立的開發者來說,內定檔案並不是很流行,它主要是面向企業項目和開源項目的。
但是,這並不是說,內定檔案對你的項目沒有好處。對於你的項目來說,內定檔案是改善你的編碼和工作模式的重中之重。

許多支援PHP的整合開發環境(IDE)都支援內定檔案,這可以說明你記住你建立那些函數的時候用了哪些參數,或是,那些函數的功能是什麼?

如果你把你的項目移交給另外一個開發者或團隊,他們一定會對這份內定檔案心存感激的,因為它傳遞了和PHP項目(尤其是那些規模較大的PHP項目)有關的大量訊息。
 

MySQL資料庫的安全防護(資料庫安全技術)

MySQL資料庫的安全防護(資料庫安全技術)

資料庫是網站所有資料寫入的存放之處
萬一資料庫被駭客攻擊或盜取資料,那後果會非常嚴重!
所以使用資料庫,安全問題不能不注意。(不止MySQL資料庫,其他資料庫也一樣更該注意)

以下是mysql應該注意的安全防護事項:


1.如果用戶端和伺服器端的連線需要跨越並通過不可信任的網路,那麼就需要使用ssh隧道來加密該連線的通信。

2.用set password語句來修改使用者的密碼,三個步驟,先「mysql -u root」登陸資料庫系統,然後「mysql> update mysql.user set password=password('newpwd')」,最後執行「flush privileges」就可以了。

3.需要提防的攻擊有,防偷聽、篡改、重播、拒絕服務等,不涉及可用性和容錯方面。對所有的連線、查詢、其他操作使用基於acl即訪問控制清單的安全措施來完成。也有一些對ssl連線的支援。

4.除了root使用者外的其他任何使用者不容許訪問mysql主資料庫中的user表;

加密後存放在user表中的加密後的使用者密碼一旦洩露,其他人可以隨意用該使用者名/密碼相應的資料庫;

5.用grant和revoke語句來進行使用者訪問控制的工作;

6.不使用明文密碼,而是使用md5()和sha1()等單向的哈系函數來設定密碼;

7.不選用字典中的字來做密碼;

8.採用防火牆來去掉50%的外部危險,讓資料庫系統躲在防火牆後面工作,或放置在dmz區功能變數中;

9.從網際網路上用nmap來掃瞄3306連接埠,也可用telnet server_host 3306的方法測試,不能容許從非信任網路中訪問資料庫伺服器的3306號tcp連接埠,因此需要在防火牆或路由器上做設定;

10.為了防止被惡意傳入非法參數,例如where id=234,別人卻輸入where id=234 or 1=1導致全部顯示,所以在web的表單中使用''或""來用字串,在動態url中加入%22代表雙引號、%23代表井號、%27代表單引號;傳遞未檢查過的值給mysql資料庫是非常危險的;

11.在傳遞資料給mysql時檢查一下大小;

12.應用程式需要連線到資料庫應該使用一般的使用者帳號,只開放少數必要的權限給該使用者;

13.在各寫程式介面(c c++ php perl java jdbc等)中使用特定『逃脫字元』函數;

在網際網路上使用mysql資料庫時一定少用傳輸明文的資料,而用ssl和ssh的加密模式資料來傳輸;

14.學會使用tcpdump和strings工具來檢視傳輸資料的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 strings。以普通使用者來啟動mysql資料庫服務;

15.不使用到表的聯結符號,選用的參數 --skip-symbolic-links;

16.確信在mysql目錄中只有啟動資料庫服務的使用者才可以對檔案有讀和寫的權限;

17.不許將process或super權限付給非管理使用者,該mysqladmin processlist可以列舉出現用的執行的查詢文字;super權限可用於切斷用戶端連線、改變伺服器運行參數狀態、控制覆制複製資料庫的伺服器;

18.file權限不付給管理員以外的使用者,防止出現load data '/etc/passwd'到表中再用select 顯示出來的問題;

19.如果不相信dns服務公司的服務,可以在主電腦名稱容許表中只設定ip數字位址;

20.使用max_user_connections變量來使mysqld服務程式,對一個指定帳戶限定連線數;

21.grant語句也支援資源控制選項;

22.啟動mysqld服務程式的安全選項開關,--local-infile=0或1 若是0則用戶端程式就無法使用local load data了,賦權的一個例子grant insert(user) on mysql.user to 'user_name'@'host_name';若使用--skip-grant-tables系統將對任何使用者的訪問不做任何訪問控制,但可以用 mysqladmin flush-privileges或mysqladmin reload來開啟訪問控制;預設情況是show databases語句對所有使用者開放,可以用--skip-show-databases來關閉掉。

23.碰到error 1045(28000) access denied for user 'root'@'localhost' (using password:no)錯誤時,你需要重新設定密碼,具體方法是:先用--skip-grant-tables參數啟動mysqld,然後執行 mysql -u root mysql,mysql>update user set password=password('newpassword') where user='root';mysql>flush privileges;,最後重新啟動mysql就可以了。
標籤: mysql

網站發生:Fatal error: Allowed memory size of 錯誤之處理

網站發生:Fatal error: Allowed memory size of 錯誤之處理

網站使用PHP程式去呼叫.dat的資料
在網站輸入搜尋就會有以下訊息產生:

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 4023 bytes) in /var/www/web/data_04/index.php on line 34


你的伺服器上PHP設定的記憶容量太少了, 在php.ini裡將
memory_limit = 8M
改成
memory_limit = 32M

然后重啟apache就可以啦!

也可以通過在php程式申請大一些的記憶容量實現

ini_set( 'memory_limit', '32M' );

----------------------------------------------------------------
PHP程式設計問題諮詢:
我怎麼知道系統預設支援什麼函數?


---------------------------------------------------------
PHP程式設計問題回覆:
要怎麼知道系統預設支援什麼函數,請看以下的範例:


<?php
$arr = get_defined_functions();
Function php() {
}
echo  "<pre>";
Echo  "這裏顯示系統所支援的所有函數,和自定以函數php ";
print_r($arr);
echo  "</pre>";
?>

---------------------------------------------------------

當magic_quotes_gpc=off

當magic_quotes_gpc=off

Pstzine0x03裡"[0x06] 高級PHP代碼審核技術"一文中關於 "5.3.6 變數key與魔術引號" 部分的php原始程式碼分析

author: ryat#www.wolvez.org
team:http://www.80vul.com
date:2009-04-10

一、綜述

magic_quotes_gpc是php中的一個安全選項,在php manual中對此有如下描述:

When on, all ' (single-quote), " (double quote), (backslash) and NULL characters are escaped with a backslash automatically. This is identical to what addslashes() does

雖然magic_quotes_gpc有助於提升程式的安全性並且在php中默認開啟,但同時也帶來了其他的一些問題,因此在php6中將去掉此選項。

二、當magic_quotes_gpc=off

考慮到部分伺服器關閉了magic_quotes_gpc或者其他的一些原因[如影響功能等],很多程式在如magic_quotes_gpc=off下自己實現一個代碼來類比magic_quotes_gpc=on的情況. 如下面的一段代碼:

define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());

...

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {

foreach($$_request as $_key => $_value) {

$_key{0} != '_' && $$_key = daddslashes($_value);

}

}

...

function daddslashes($string, $force = 0) {

!defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());

if(!MAGIC_QUOTES_GPC || $force) {

if(is_array($string)) {

foreach($string as $key => $val) {

$string[$key] = daddslashes($val, $force);

}

} else {

$string = addslashes($string);

}

}

return $string;

}

利用addslashes()函數類比了magic_quotes_gpc=on時的效果,看上去很完美,其實是有缺陷的或者說只是類比了magic_quotes_gpc的部分功能.

三、magic_quotes_gpc的代碼分析

php在註冊$_GET/$_POST等超全域變數時magic_quotes_gpc部分的代碼:

// php_variables.c

PHPAPI void php_register_variable_safe(char *var, char *strval, int str_len, zval *track_vars_array TSRMLS_DC)

{

// 對變數值的處理

...

if (PG(magic_quotes_gpc)) {

Z_STRVAL(new_entry) = php_addslashes(strval, Z_STRLEN(new_entry), &Z_STRLEN(new_entry), 0 TSRMLS_CC);

} else {

Z_STRVAL(new_entry) = estrndup(strval, Z_STRLEN(new_entry));

}

...

PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars_array TSRMLS_DC)

{

// 對變數名的處理

...

zend_bool is_array = 0;

...

for (p = var; *p; p++) {

if (*p == ' ' || *p == '.') {

*p='_';

} else if (*p == '[') {

is_array = 1;

ip = p;

*p = 0;

break;

}

}

var_len = p - var;

// 上面這段代碼沒有考慮變數名的原始長度,所以這裡是not binary safe

// 也就是說,提交 test.php?ryat%00wst=1 將會生成$_GET['ryat']=1

...

if (is_array) {

// 如果變數名是陣列的形式

...

} else {

// php > 5.2.1

if (PG(magic_quotes_gpc)) {

// php = 4.x && php <= 5.2.1

// if (PG(magic_quotes_gpc) && (index!=var)) {

escaped_index = php_addslashes(index, index_len, &index_len, 0 TSRMLS_CC);

} else {

escaped_index = index;

}

...

} else {

// 這部分的magic_quotes_gpc處理和上面一樣

...

由上面的代碼可以看到,magic_quotes_gpc=on時不僅僅用addslashes處理了變數值,而且處理了變數名[既$_GET/$_POST等超全域變數的key,另外要注意的是:[1]在php4和php<5.2.1的版本中,不處理第一維的key:)]

而前面那段模擬magic_quotes_gpc的代碼僅僅處理了陣列的值,因此是存在安全隱患的。

四、實例[ECShop SQL injection 漏洞分析]

文件includes/init.php判斷get_magic_quotes_gpc(),如果為off則調用addslashes_deep():

// includes/init.php

if (!get_magic_quotes_gpc())

{

if (!empty($_GET))

{

$_GET = addslashes_deep($_GET);

}

if (!empty($_POST))

{

$_POST = addslashes_deep($_POST);

}

$_COOKIE = addslashes_deep($_COOKIE);

$_REQUEST = addslashes_deep($_REQUEST);

}

addslashes_deep()在文件includes/lib_base.php裡最後通過addslashes()處理

// includes/lib_base.php

function addslashes_deep($value)

{

if (empty($value))

{

return $value;

}

else

{

return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);

// 只處理了陣列的值:)

}

}

下面看下具體的導致漏洞的代碼,文件 pick_out.php裡:

// pick_out.php

if (!empty($_GET['attr']))

{

foreach($_GET['attr'] as $key => $value)

{

$key = intval($key);

$_GET['attr'][$key] = htmlspecialchars($value);

// foreach處理的是指定陣列的拷貝,所以這裡的處理並不影響陣列原先的key和value

// 因此可以引入任意的key:)

// 程式師的邏輯出了問題?

}

}

...

foreach ($_GET['attr'] AS $key => $value)

{

$attr_url .= '&attr[' . $key . ']=' . $value;

$attr_picks[] = $key;

if ($i > 0)

{

if (empty($goods_result))

{

break;

}

// 利用key進行注射:)

$goods_result = $db->getCol("SELECT goods_id FROM " . $ecs->table("goods_attr") . " WHERE goods_id IN (" . implode(',' , $goods_result) . ") AND attr_id='$key' AND attr_value='$value'");

由於magic_quotes_gpc=off時沒有對$key處理,同時在陣列賦值時存在邏輯問題,最終導致了注射漏洞:)

EXP:

http://www.80vul.com/exp/ecshop-pch-005.txt

五、參考:

http://bugs.php.net/bug.php?id=41093
『將軍』你是武藝高強?膽識過人?精通騎射?您生錯時代啦!
『戰馬』你是汗血寶馬?善奔能越?躍馬中原?此戰場沒有你的舞台!
動態的架站程式時代,要自訂PHP程式頁面有那麼難嗎?
MySQL『資料庫』與『資料表』,用PHP程式有那麼難呼叫嗎?
不用死背『PHP程式』與『MySQL資料庫』語法也能設計嗎?
這是自動化軟體程式的年代(用PHPMaker設計在彈指之間完成)
這不是:神話!程式軟體模組取代了這一切複雜的工程
死背『PHP程式』與『MySQL資料庫』語法,是為學校考試用的!
因為,有些人的技術已經離這個網站的實用性非常遙遠!
------------------------------------------------------------
大家都知道網路創業的好處:
1.初期建置網站金額較低,甚至零成本。
2.初期人事、水電成本較低。
3.網路店面比較沒有曝光的地區限制(除非產品、物流、語言的限制)。
4.消費者可以在任何時間瀏覽與選購商品(24小時營業)。
5.初期可採用眾多的網路平台,免費宣傳、曝光方式,之後再採用付費的方式,提高效益。
6.即使沒有成功,成本損失也較低。


想要網路創業自動賺錢,你應該具備那些專業技能呢?

那座而言不如起而行,如何開始您的第一步行動呢?

1.先評估自己會什麼網路技能?不會那些網路技能?
將自己的優勢寫下來,也將自己需要進修的專業技能逐一記錄下來

2.找到您需要的課程(利用下班時間,努力精研)
最好是影片課程,不要只是一般書店的書籍或網路電子書
(因為圖片與文字根本學習效率不好,無法有效迅速學會,學習中有問題要問誰?)
實際網路經營時發生網站語法錯誤或網站被駭客入侵!
那您最好有個專業『會程式語言與架設主機』的老師可以免費技術諮詢
不然,一發生問題,您的網路事業就停擺了,網站一停就無收入!
(就好像上班放無薪假一樣....悽慘!)。
有甚至網站資料全毀,資料庫也出問題,你要在第一時間內就能快速修護!
這一點你可要小心!網路創業絕對要有:技術諮詢!
迅速回覆的專業老師(或專業技術顧問)。
不然,就像大海裡頭的孤鳥,叫天天不應,叫地地也不靈
(自己閉門造車摸索是網路創業者最悲慘的失敗原因!)。


attachments/201208/5398530876.jpg

2.你的網站要自己架設!
(請人設計網站費用貴,小則三四萬高者也有十幾萬元的,往後網站維護也不方便!)

這方面你可以學習:
1.網站架設與網頁設計教學
詳細介紹:
http://por.tw/Website_Design/E_learning/index.php
長期技術支援網站:
http://por.tw/Website_Design

2.購物網站架站教學
詳細介紹:
http://por.tw/sale/cmmerse-4-all/index.php
長期技術支援網站:
http://por.tw/sale

3.部落格架站、行銷、賺錢術教學
詳細介紹:
http://por.tw/blog/E_learning/index.php
長期技術支援網站:
http://por.tw/blog

4.PHP+MySQL+PHPMaker+Dreamweaver整合教學
(PHPMaker運用設計網站教學)

詳細介紹:
http://por.tw/php/new-E_learning/index.php
長期技術支援網站:
http://por.tw/php

5.Flash-動畫製作教學
詳細介紹:
http://por.tw/flash/new-E_learning/index.php
長期技術支援網站:
http://por.tw/flash
-------------------------------------------------------------------------
3.網站圖片非常重要,你如果不會拍照與修圖,那您就要學習:
商業商品攝影教學
詳細介紹:
http://por.tw/design/photographing_Course/index.php
長期技術支援網站:
http://por.tw/design
-------------------------------------------------------------------------
4.影片能讓您的網站更出色,如果您不會錄影
或影片剪接、編輯、上字幕、做特效,那您就要學習:

【錄影影片製作】技術教學
詳細介紹:
http://por.tw/photo-video/video_Course/index.php
長期技術支援網站:
http://por.tw/photo-video
-------------------------------------------------------------------------
5.有了網站,接下來就是『如何將網站經營的有聲有色?』
這就需要專業的網路行銷技術:
A.搜尋引擎排名SEO教學
詳細介紹:
http://por.tw/seo/new-seo/index.php
長期技術支援網站:
http://por.tw/seo

B.EDM電子報製作教學
詳細介紹:
http://por.tw/edm/edm_Marketing/index.php
長期技術支援網站:
http://por.tw/edm

C.電子書製作賺錢密技教學
詳細介紹:
http://por.tw/ebook/new-ebook/index.php
長期技術支援網站:
http://por.tw/ebook

D.【訂單王】超級網路秒殺成交法-A-page 【一頁定江山】行銷賺錢術
詳細介紹:
http://por.tw/page/new-E_learning/index.php
長期技術支援網站:
http://por.tw/page
-------------------------------------------------------------------------
6.如果您想要學習『專案方式』的專業技能,您可以學習:
A.「網路創業賺錢_如何從網路創業賺錢賺到第一個100萬!」課程
詳細介紹:
http://por.tw/soho/new-E_learning/index.php
長期技術支援網站:
http://por.tw/soho

B.藉助『程式』邁向網路自動賺錢術(Auto Rich -自富課程)
詳細介紹:
http://por.tw/Rich/new-E_learning/index.php
長期技術支援網站:
http://por.tw/Rich

C.【正印家族】授權營運專案‧自動印鈔機賺錢術
詳細介紹:
http://por.tw/money/new-E_learning/index.php
長期技術支援網站:
http://por.tw/money
-------------------------------------------------------------------------
7.您的網站可以用兩種方式經營
1.是租用虛擬主機
(創業初期,如果尚無長遠規劃可租虛擬主機空間架設網站)

2.是自己擁有獨立主機!
如果您有此長遠的規劃,那您可以申購此服務:
替你架設Linux主機伺服器+影片教你維護(還有遠端技術協助)讓你自己當家作主!
http://por.tw/linux/new-E_learning/index.php
長期技術支援網站:
http://por.tw/linux
-------------------------------------------------------------------------
8.此外,如果你對國外軟體感覺不好用,那您可以學習:
軟體中文化實戰教學影片
軟體中文化實戰教學影片教學詳細介紹:
http://por.tw/f2blog/new-E_learning/index.php
長期技術支援網站:
http://por.tw/f2blog

不論是英文、日文、大陸簡體或其他軟體,能透過軟體中文化技術變成:繁體中文版
那在網路事業的經營上,所有要用到的軟體,就能通通變成:繁體中文版啦!
那是業經營起來當然是:得心應手!手到擒來!

-------------------------------------------------------------------------

如何避免使用php程式中的require_once語法?

如何避免使用php程式中的require_once語法?


我們知道,在php中使用require_once/include_once雖然方便,但是代價昂貴,據測試資料來看,require_once比require慢3-4倍,所以在php開發中,我們應該盡量使用require/include。

以下是筆者常用的避免require/include的方法。


使用__autoload

php5可以使用__autoload來避免require,用的好的話,代碼裡頭甚至看不到幾個require,實在是安逸啊。測試結果顯示,使用__autoload之後的new Foo; 比require_once 『foo.php』; new Foo; 大概要快3倍左右。

補充:為了避免autoload衝突,可以考慮使用spl_autoload_register(PHP 5 >= 5.1.2)來改變魔術函數__autoload的行為。

使用defined檢驗是否載入過

在代碼開頭使用defined檢驗是否定義過對應的常量,如果有的話,直接return。

<?php

if(!defined('_MYCLASS_'))

return;

define('_MYCLASS_', 1);

class MyClass { ... }

?>

測試了一下,defined的效能也不是太好…

require前檢查

用class_exists或是function_exists檢查一下,確認沒有載入過再出手,至少比require_once能快上3倍。php4也可以用上。

class_exists('myClass') or require('/path/to/myClass.class.php');

如何用PHP網頁,取得目前Linux主機PHP版本?(phpversion)

如何用PHP網頁,取得目前Linux主機PHP版本?(phpversion)

如果你是租用虛擬主機,如何知道Linux主機PHP版本呢?
----------------------------------------------------------
方法如下:
先用網頁編輯軟體
例如:Dreamweaver 新增一個新的PHP動態空白網頁
切到程式碼
刪除全部字串,再貼入下面語法,存檔並上傳至主機網站下
在瀏覽器網址列輸入該PHP路徑,開啟該網頁
即可以看到該Linux主機PHP版本!

----------------------------------------------------------

<?php

// prints e.g. 'Current PHP version: 3.0rel-dev'

echo "Current PHP version: ".phpversion();

?>

-----------------------------------------------------------
語法 : string phpversion (void)

說明 :

傳回現在所安裝的PHP的版本。

-----------------------------------------------------------
參考 : phpinfo( ) phpcredits( ) php_logo_guid( )

(PHP程式設計)開發提高效率的技巧

【文章內容】:(PHP程式設計)開發提高效率的技巧

0、用單引號代替雙引號來包括字串,這樣做會更快一些。
因為PHP會在雙引號包圍的字串中搜尋變量,單引號則不會,注意:只有echo能這麼做,它是一種可以把多個字串當作參數的「函數」
(譯註:PHP手冊中說echo是語系結構,不是真正的函數,故把函數加上了雙引號)。

1、如果能將類的方法定義成static,就盡量定義成static,它的速度會提升將近4倍。

2、$row['ID']的速度是$row[id]的7倍。

3、echo 比 print 快,並且使用echo的多重參數(譯註:指用逗號而不是句點)代替字串連線,比如echo $str1,$str2。

4、在執行for迴圈之前確定最大迴圈數,不要每迴圈一次都計算最大值,最好運用foreach代替。

5、註銷那些不用的變量尤其是大陣列,以便釋放記憶體。

6、盡量避免使用__get,__set,__autoload。

7、require_once()代價昂貴。

8、include檔案時盡量使用絕對路徑,因為它避免了PHP去include_path裡尋找檔案的速度,解析操作系統路徑所需的時間會更少。

9、如果你想知道腳本開始執行(譯註:即伺服器端收到用戶端請求)的時刻,使用$_SERVER[『REQUEST_TIME』]要好於time()。

10、函數代替正則表達式完成相同功能。

11、str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。

12、如果一個字串取代函數,可接受陣列或字元作為參數,並且參數長度不太長,那麼可以考慮額外寫一段取代代碼,使得每次傳遞參數是一個字元,而不是只寫一行代碼接受陣列作為查詢和取代的參數。

13、使用選取分支語句(譯註:即switch case)好於使用多個if,else if語句。

14、用@屏蔽錯誤訊息的做法非常低效,極其低效。

15、開啟apache的mod_deflate模組,可以提高網頁的瀏覽速度。

16、資料庫連線當使用完畢時應關掉,不要用長連線。

17、錯誤訊息代價昂貴。

18、在方法中遞增局部變量,速度是最快的。幾乎與在函數中呼叫局部變量的速度相當。

19、遞增一個全局變量要比遞增一個局部變量慢2倍。

20、遞增一個物件屬性(如:$this->prop++)要比遞增一個局部變量慢3倍。

21、遞增一個未預定義的局部變量要比遞增一個預定義的局部變量慢9至10倍。

22、僅定義一個局部變量而沒在函數中呼叫它,同樣會減慢速度(其程度相當於遞增一個局部變量)。PHP大概會檢檢視是否存在全局變量。

23、方法呼叫看來與類中定義的方法的數量無關,因為我(在測試方法之前和之後都)加入了10個方法,但效能上沒有變化。

24、派生類中的方法運行起來要快於在基類中定義的同樣的方法。

25、呼叫帶有一個參數的空函數,其花費的時間相當於執行7至8次的局部變量遞增操作。類似的方法呼叫所花費的時間接近於15次的局部變量遞增操作。

attachments/201307/7238334217.jpg

--------------------------------------------------------------------------------
【文章標題】: (PHP程式設計)開發提高效率的技巧
【文章作者】: PHP程式設計+MySQL資料庫+Dreamweaver整合教學密訓基地
【作者信箱】: ster168ster@gmail.com
【作者首頁】: http://por.tw/php/
【PHP程式設計+MySQL資料庫+Dreamweaver整合教學課程】: http://por.tw/php/new-E_learning/index.php
【基地主機】: http://goto1688.com/php/
【版權聲明】: (原創)PHP程式設計+MySQL資料庫+Dreamweaver整合教學密訓基地,轉載必須保留完整標頭。刪除者依法追究!

--------------------------------------------------------------------------------
26、Apache解析一個PHP腳本的時間要比解析一個靜態HTML頁面慢2至10倍。盡量多用靜態HTML頁面,少用腳本。

27、除非腳本可以快取,否則每次呼叫時都會重新編譯一次。引入一套PHP快取機制通常可以提升25%至100%的效能,以免除編譯開銷。

28、盡量做快取,可使用memcached。memcached是一款高效能的記憶體物件快取系統,可用來加速動態Web應用程式,減輕資料庫負載。對操作碼 (OP code)的快取很有用,使得腳本不必為每個請求做重新編譯。

29、當操作字串並需要檢驗其長度是否滿足某種要求時,你想當然地會使用strlen()函數。此函數執行起來相當快,因為它不做任何計算,只返回在zval 結構(C的內建資料結構,用於存儲PHP變量)中存儲的已知字串長度。但是,由於strlen()是函數,多多少少會有些慢,因為函數呼叫會經由諸多步驟,如字母小寫化(譯註:指函數名小寫化,PHP不區分函數名大小寫)、哈希尋找,會跟隨被呼叫的函數一起執行。在某些情況下,你可以使用isset() 技巧加速執行你的代碼。

(舉例如下)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(與下面的技巧做比較)
if (!isset($foo{5})) { echo “Foo is too short”$$ }

呼叫isset()恰巧比strlen()快,因為與後者不同的是,isset()作為一種語系結構,意味著它的執行不需要函數尋找和字母小寫化。也就是說,實際上在檢驗字串長度的頂層代碼中你沒有花太多開銷。

34、當執行變量$i的遞增或遞減時,$i++會比++$i慢一些。這種差異是PHP特有的,並不適用於其他語系,所以請不要修改你的C或Java代碼並指望它們能立即變快,沒用的。++$i更快是因為它只需要3條指令(opcodes),$i++則需要4條指令。後置遞增實際上會產生一個臨時變量,這個臨時變量隨後被遞增。而前置遞增直接在原值上遞增。這是最改善處理的一種,正如Zend的PHP改善器所作的那樣。牢記這個改善處理不失為一個好主意,因為並不是所有的指令改善器都會做同樣的改善處理,並且存在大量沒有裝配指令改善器的網際網路服務提供商(ISPs)和伺服器。

35、並不是事必面向物件(OOP),面向物件往往開銷很大,每個方法和物件呼叫都會消耗很多記憶體。

36、並非要用類實現所有的資料結構,陣列也很有用。

37、不要把方法細分得過多,仔細想想你真正打算重用的是哪些代碼?

38、當你需要時,你總能把代碼分解成方法。

39、盡量採用大量的PHP內建函數。

40、如果在代碼中存在大量耗時的函數,你可以考慮用C延伸的模式實現它們。

41、評估檢驗(profile)你的代碼。檢驗器會告訴你,代碼的哪些部分消耗了多少時間。Xdebug除錯器包括了檢驗程式,評估檢驗總體上可以顯示出代碼的瓶頸。

42、mod_zip可作為Apache模組,用來即時壓縮你的資料,並可讓資料傳輸量降低80%。

43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情況下,盡量用file_get_contents,因為他的效率高得多!但是要注意file_get_contents在開啟一個URL檔案時候的PHP版本問題;

44、盡量的少進行檔案操作,雖然PHP的檔案操作效率也不低的;

45、改善Select SQL語句,在可能的情況下盡量少的進行Insert、Update操作(在update上,我被惡批過);

46、盡可能的使用PHP內定函數(但是我卻為了找個PHP裡面不存在的函數,浪費了本可以寫出一個自訂函數的時間,經驗問題啊!);

47、迴圈內定不要聲明變量,尤其是大變量:物件(這好像不只是PHP裡面要注意的問題吧?);

48、多維陣列盡量不要迴圈嵌套賦值;

49、在可以用PHP內定字串操作函數的情況下,不要用正則表達式;

50、foreach效率更高,盡量用foreach代替while和for迴圈;

51、用單引號替代雙引號引用字串;

52、「用i+=1代替i=i+1。符合c/c++的習慣,效率還高」;

53、對global變量,應該用完就unset()掉;

--------------------------------------------------------------------------------
你在摸索如何PHP程式設計+MySQL資料庫+Dreamweaver整合建構網站嗎?
有【技術顧問服務】可諮詢嗎?
當問題無法解決你要發很多時間處理(或許永遠找出答案)
那是自己摸索 PHP+MySQL+Dreamweaver整合痛苦開始!
購買【PHP程式設計+MySQL資料庫+Dreamweaver整合】DVD課程
就可獲得【PHP+MySQL+Dreamweaver】技術【顧問諮詢服務】!

 

本PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學)密訓基地立志於收集各類PHP程式設計、MySQL資料庫及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!