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時間函數(Date),針對時差部份

解決PHP時間函數(Date),針對時差部份

PHPDate()出現錯誤對於新手來說是比較頭疼的一件事情。
我們給出了具體的解決方法,希望對大家有所說明。

我們在運用PHPDate()這個函數取得時間資料的時候,經常會遇到不準確等一系列問題。
下面我們將為大家具體講解PHPDate()出現錯誤的關聯解決辦法。

取得系統時間時,發現取得的時間與系統的時間不符。
今天用echo date("Y-m-dH:i:s")取得系統時間時,發現取得的時間與系統的時間不符。

PHP是外國人開發的,所以經常有很多東西不太好用。
研究了一番發現,PHP預設設定的時間是以格林威治時區為標準的,表現是和台灣時間差8個小時,因此我們需要將其+8個小時,原理是我們正好位於時區的東8區,所以我們必須把PHP的時區設定改為台北時間。

寫php data這個函數時時間都會有誤差,解決的方法有三個:

 方法有三:( 以GMT+8台北為例 )
一、修改php.ini:
開啟PHP.ini檔案,一般在PHP的安裝根目錄下
找到其中的:date.timezone
刪掉date.timezone前面的分號,並改成:date.timezone=Asia/Taipei
存檔,並重新啟動Apahce服務(有時用Apache的restart功能會有問題,建議先stop然後再start)
重新檢驗一下echodate("Y-m-dH:i:s")。
是不是時間還原標準了

二、在date()前面增加:
date_default_timezone_set('時區');
例如:
date_default_timezone_set('Asia/Taipei');
echo date("Y-m-d H:i:s");
?>
時區列表:http://www.php.net/manual/en/timezones.php
三、直接打上:
例如:
<?php echo date("Y-m-d H:i:s",mktime (date(H)+8, date(i), date(s), date(m), date(d), date(Y)))?>
   
參考資料:http://www.domain.cn/blog/index.php/16064/action_viewspace_itemid_19492.htm

至於更多的data函數運用請參考http://linux.tnc.edu.tw/techdoc/banic/dateandtime/date.html


date

(PHP3 , PHP4)

date ---  將本地的時間/日期格式化

語法 : string date (string format [, int timestamp])

說明 : 

使用給予的timestamp按照格式化字串傳回一格式化字串,如果沒有給予timestamp則使用本地的時間。

以下是格式化字串中認定的字元

  • a - "am" 或 "pm"

  • A - "AM" 或 "PM"

  • B - 網際網路時間樣本

  • d - 幾日,例如" 01" 到 " 31"

  • D - 幾日,以3個英文字表示例如:" Fri "

  • F - 幾月,以英文全名表示例如:" January "

  • g - 小時,12小時制不足2位數不補0例如:" 1" 到 " 12 "

  • G - 小時,24小時制不足2位數不補0例如:" 0 " 到 " 23 "

  • h - 小時12小時制例如:" 01" 到 " 12 "

  • H - 小時,24小時制例如:" 00 "  " 23 "

  • i - 幾分,例如:" 00 " 到 " 59 "

  • I (大寫的 i) - "1" if Daylight Savings Time, "0" otherwise.

  • j - 幾日,不足2位數不補0例如:" 1"  " 31"

  • l (小寫的 'L') - 幾日,以英文全名表示,例如:"Friday"

  • L - 布林值,判斷是否為閏年,例如:" 0"  " 1"

  • m - 幾月,例如:" 01"  " 12"

  • M - 幾月,以3個英文字表示例如:"Jan"

  • n - 幾月,不足2位數不補0例如:" 1" 到 "12"

  • s - 幾秒,例如:" 01"  " 59"

  • S - 以英文後2個字表示,例如:"th","nd"

  • t - 當月的天數,例如:" 28" 到 " 31"

  • T - 這個機器的時間區域設定,例如 "MDT"

  • U - 總秒數

  • w - 以數字表示星期幾,例如" 0" 到 " 6"

  • Y - 幾年,以4位數表示例如:" 1999"

  • y - 幾年,以2位數表示例如:"99"

  • z - 一年中的第幾天,例如:" 0" 到 " 365"

  • Z - 在短時間內時間區域補償(timezone offset) ,例如"-43200" to "43200"

在格式化字串中未被認出的字元將會被列出來,當使用gmdate( )時"Z"格式將總是傳回"0"

Example :

   print (date ("l dS of F Y h:i:s A")); 

   print ("July 1, 2000 is on a " . date ("l", mktime(0,0,0,7,1,2000)));

?>

它可能會和date( )與mktime( )一起使用,來找出是將來或是過去的日期

Example :

   $tomorrow  = mktime (0,0,0,date("m")  ,date("d")+1,date("Y"));

   $lastmonth = mktime (0,0,0,date("m")-1,date("d"),  date("Y"));

   $nextyear  = mktime (0,0,0,date("m"),  date("d"),  date("Y")+1);

?>

將日期格式化成其它的語言(languages),你應該使用setlocal( )和strftime( )函式

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程式設計問題回覆:
 我想在每個檔最前,最後面都加上一檔.但一個一個添加很麻煩
您可以這樣處理:

1:打開php.ini文件
設置 include_path= "c:"

2:寫兩個文件
auto_prepend_file.php 和 auto_append_file.php 保存在c磁碟,他們將自動依附在每個php檔的頭部和尾部.

3:在php.ini中找到:
Automatically add files before or after any PHP document.
auto_prepend_file = auto_prepend_file.php;依附在頭部
auto_append_file = auto_append_file.php;依附在尾部

以後你每個php檔就相當於
<?php
Include "auto_prepend_file.php" ;

.......//這裏是你的程式


Include "auto_append_file.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

用PHPMaker快速生成PHP網站管理進出貨的好處

學員來函諮詢:
老師您好:
好久不見,有一個問題想請教您,最近有接觸到一個倉儲的業務,是有關於管理進出貨的
不知道有沒有相關PHP的軟體可以處理,詳細的說明請見附檔
謝謝
祝:安康

------------------------------------------------------------------
洪總教頭回覆:
可以用此教學:課程中的PHPMaker快速生成PHP網站
 
 PHP程式設計+MySQL資料庫+Dreamweaver整合教學(PHPMaker運用設計網站教學):

http://por.tw/php/new-E_learning/index.php
 
---------------------------------------------------------------------------------
用PHPMaker快速生成PHP網站管理進出貨的好處:
1.生成管理進出貨是網路網站,只要能上網,有帳號與密碼任何人都可以瀏覽
(有管理者權限者,可以進階新增、修改、搜尋甚至刪除)
2.解決個人電腦版進銷存的缺點
3.快速生成(不用花很多時間設計)更不用花錢購買套裝進銷存軟體
(買軟體萬一日後不能更新或擴增...不合用就變成:垃圾!)
4.獨家系統(依據自己需要設計欄位,不會有一般進銷存用不到的雜七雜八選項或欄位的缺點)
5.可以自由擴增,不會受制於人或被套裝軟體綁死。
PHP程式設計問題諮詢:
要如何使Html/PHP格式的字串不被解釋,而是照原樣顯示?


---------------------------------------------------------
PHP程式設計問題回覆:
使Html/PHP格式的字串不被解釋,你可以這樣處理:

<?PHP
$str="<h1>PHP</h1>";
Echo "被解釋過的: ".$str."<br>經過處理的:";
Echo  htmlentities(nl2br($str));
?>
---------------------------------------------------------

mysql常見錯誤提示及解決方法

mysql常見錯誤提示及解決方法

130 :檔案格式不正確。(還不是很清楚錯誤的狀況)
145  :檔案無法開啟。
1005:建立表失敗。
1006:建立資料庫失敗。
1007:資料庫已存在,建立資料庫失敗。
1008:資料庫不存在,刪除資料庫失敗。
1009:不能刪除資料庫檔案導致刪除資料庫失敗。
1010:不能刪除資料目錄導致刪除資料庫失敗。
1011:刪除資料庫檔案失敗。
1012:不能讀取系統表中的記錄。
1016:檔案無法開啟,使用後台修復或是使用 phpmyadmin 進行修復。
Quote:
開始=>所有程式=>附件=>指令提示符
  輸入 mysql 所在硬碟盤符
    cd mysql 所在目錄
    cd bin
  輸入 myisamchk -f D:usr/local/mysql/data/bbs/PW_members.MYI
  ps : D:usr/local/mysql/data/bbs 是你論壇資料庫的路徑
    -f 根據具體情況選取,一般也可以選取 -r
    注意你的 系統C盤或放資料庫的硬碟空間是否足夠,一般小於 1G 很容易出現錯誤。
或用mysqlcheck指令進行修復。具體的方法:利用指令行進入mysql/bin目錄,執行
mysqlcheck -o -r phpwind -uroot -p                                                      
其中phpwind是你資料庫的名稱,root是你的資料庫使用者名,然後會提示你輸入密碼。然後就會修復你的資料庫。
1017:伺服器非法關機,導致該檔案損壞。
1020:記錄已被其他使用者修改。
1021:硬碟剩餘空間不足,請加大硬碟可用空間。
1022:關鍵字重複,變更記錄失敗。
1023:關閉時發生錯誤。
1024:讀檔案錯誤。
1025:變更名字時發生錯誤。
1026:寫檔案錯誤。
1030:可能是伺服器不穩定。(具體原因不是很清楚)
1032:記錄不存在。
1036:資料表是唯讀的,不能對它進行修改。
1037:系統記憶體不足,請重啟資料庫或重啟伺服器。
1038:用於排序的記憶體不足,請增大排序緩沖區。
1040:已到達資料庫的最大連線數,請加大資料庫可用連線數。
Quote:
在my.ini 修改max_connections=100為max_connections=1000或更大,重啟mysql
1041:系統記憶體不足。
1042:無效的主電腦名。
1043:無效連線。
1044:資料庫使用者權限不足,請聯繫空間商解決。
1045:資料庫伺服器/資料庫使用者名/資料庫名/資料庫密碼錯誤,請聯繫空間商檢查帳戶。
Quote:
方法:確保論壇data目錄下的sql_config.php使用者名與密碼都正確.如果使用者忘記了資料庫的密碼,可以按如下模式進行密碼的修改:
如果 MySQL 正在運行,首先停止。
啟動 MySQL :bin/safe_mysqld --skip-grant-tables &
就可以不需要密碼就進入 MySQL 了。
然後就是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
1046:沒有選取資料庫。
1048:欄位不能為空。
1049:資料庫不存在。
1050:資料表已存在。
1051:資料表不存在。
1054:欄位不存在,自行建立欄位。
1060:欄位重複,導致無法插入這個欄位。
1062:欄位值重複,入庫失敗
Quote:
  1.如果出類似主碼為"65535"的錯誤,可以檢視關聯表的自增欄位,將欄位值改在就可以
  2.確保關聯資料表中主碼重複的欄位是否存在,如果存在刪除這條記錄
  3.備份資料庫,修復關聯表(注:這種情況比較常見,如pw_posts表,對表進行修復的時候不要忘記備份).
1064:MySQL 不支援錯誤提示中的編碼。
1065:無效的 SQL 語句,SQL 語句為空。
1067:MySQL 版本為 5,不支援空的預設值。
1081:不能建立 Socket 連線。
1114:資料表已滿,不能容納任何記錄。
1115:設定的字集在 MySQL 並沒有支援。
1116:開啟的資料表太多。
1129:資料庫出現異常,請重啟資料庫。
1130:連線資料庫失敗,沒有連線資料庫的權限。
1133:資料庫使用者不存在。
1135:可能是記憶體不足夠,請聯繫空間商解決。
1141:現用的使用者無權訪問資料庫。
1142:現用的使用者無權訪問資料表。
1143:現用的使用者無權訪問資料表中的欄位。
1146:資料表缺失,請還原備份資料
1147:未定義使用者對資料表的訪問權限。
1149:SQL 語句語法錯誤。
1158:網路錯誤,出現讀錯誤,請檢查網路連線狀況。
1159:網路錯誤,讀逾時,請檢查網路連線狀況。
1160:網路錯誤,出現寫錯誤,請檢查網路連線狀況。
1161:網路錯誤,寫逾時,請檢查網路連線狀況。
1169:欄位值重複,更新記錄失敗。
1177:開啟資料表失敗。
1180:送出事務失敗。
1181:返回事務失敗。
1193:不支援字集限定(SET NAMES)。
1203:現用的使用者和資料庫建立的連線已到達資料庫的最大連線數,請增大可用的資料庫連線數或重啟資料庫。
1205:加鎖逾時。
1211:現用的使用者沒有建立使用者的權限。
1216:外鍵約束檢查失敗,更新子表記錄失敗。
1217:外鍵約束檢查失敗,刪除或修改主表記錄失敗。
1226:現用的使用者使用的資源已超過所容許的資源,請重啟資料庫或重啟伺服器。
1227:權限不足,您無權進行此操作。
1235:MySQL版本過低,不具有本功能。
1250:用戶端不支援伺服器要求的認證協定,請考慮升級用戶端。
1251:Client 不能支援 authentication protocol 的要求
Client does not support authentication protocol requested by server; consider upgrading MySQL client
Quote:
方法1:mysql> SET PASSWORD FOR
-> ' some_user '@' some_host ' = OLD_PASSWORD(' newpwd ');
結合我們的實際情況,在 MySQL Command Line Client 下運行:
set password for root@localhost = old_password('123456');
方法2:
mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
    -> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;
上面紅色的部分請按自己實際情況修改。
1267:不合法的混合字集。
2002:伺服器埠不對,請咨詢空間商正確的埠。
2003:MySQL 服務沒有啟動,請啟動該服務。
2008:MySQL client ran out of memory
錯誤指向了MySQL客戶mysql。這個錯誤的原因很簡單,客戶沒有足夠的記憶體存儲全部結果。
2013:遠端連線資料庫是有時會有這個問題,MySQL 伺服器在執行一條 SQL 語句的時候失去了連線造成的。
10048:
Quote:
建議在my.ini檔案中修改最大連線數,
  把 mysql_connect() 方法都改成了 mysql_pconnect() 方法.
  要修改mysql_pconnect(),可以在論壇的data目錄的sql_config.php中
  $pconnect = 0; //是否持久連線
  修改成$pconnect = 1;
  開啟防重整,嚴禁重整太快.
10055:沒有快取空間可利用
Quote:
檢視下你的C盤空間是否已經滿,清除一些沒有用的檔案.
  可以在後台的"論壇核心設定","核心功能設定"裡"程式改善"開啟,"GZIP 壓縮輸出"關閉.
搜尋了一下10055(沒有快取空間可利用)出錯的原因,分析了my.ini的配製檔案,在my.ini中如下:
default-storage-engine=INNODB
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=10M
innodb_log_file_size=10M
innodb_thread_concurrency=8
覺得可以把innodb_buffer_pool_size=10M 加大如100M或是1000M
以上是對mysql5的
如果是mysql4可以在my.ini中增加如下:
#innodb_data_file_path = ibdata1:2000M;ibdata2:2000M
#innodb_data_home_dir = c:ibdata
#innodb_log_group_home_dir = c:iblogs
#innodb_log_arch_dir = c:iblogs
#set-variable = innodb_mirrored_log_groups=1
#set-variable = innodb_log_files_in_group=3
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#innodb_log_archive=0
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_file_io_threads=4
#set-variable = innodb_lock_wait_timeout=50
把前面的#去了
10061:
Quote:
啟動這台機器上的MySQL服務
  如服務啟動失敗
  一定是你的my.ini檔案出了差錯,
  MySQL服務不能標準啟動
  你刪除了它後,MySQL就會按其預設配置運行,
  那就沒有問題了
以上資料根據網上各方面資料整合而成。
標籤: mysql

如何避免使用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程式設計問題諮詢:
如何比較兩個日期相差幾天?


---------------------------------------------------------
PHP程式設計問題回覆:
要如何比較兩個日期相差幾天,請看以下的範例:


<?PHP
$Date_1="2003-7-15";//也可以是:$Date_1="2003-6-25 23:29:14";
$Date_2="1982-10-1";
$Date_List_1=explode("-",$Date_1);
$Date_List_2=explode("-",$Date_2);
$d1=mktime(0,0,0,$Date_List_1[1],$Date_List_1[2],$Date_List_1[0]);
$d2=mktime(0,0,0,$Date_List_2[1],$Date_List_2[2],$Date_List_2[0]);
$Days=round(($d1-$d2)/3600/24);
Echo   "我已經奮鬥了 $Days 天^_^";
?>

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

(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資料庫及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!