Category Archives: PHP

ORM到底是用還是不用?

ORM即Object/Relation Mapping的簡寫,一般稱作「對象關係映射」,在Web開發中最常出沒於和關係型數據庫交互的地方。接口、中間件、庫、包,你都可以這麼稱呼它。

我們可以結合PHP和MySQL,從ORM的四個核心理念來認識它:

  • 簡單:ORM以最基本的形式建模數據。比如ORM會將MySQL的一張表映射成一個PHP類(模型),表的字段就是這個類的成員變量
  • 精確:ORM使所有的MySQL數據表都按照統一的標準精確地映射成PHP類,使系統在代碼層面保持準確統一
  • 易懂:ORM使數據庫結構文檔化。比如MySQL數據庫就被ORM轉換為了PHP程序員可以讀懂的PHP類,PHP程序員可以只把注意力放在他擅長的PHP層面(當然能夠熟練掌握MySQL更好)
  • 易用:ORM的避免了不規範、冗餘、風格不統一的SQL語句,可以避免很多人為Bug,方便編碼風格的統一和後期維護 

Read more »

提高PHP編程效率的53個要點

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

Read more »

PHP語言的創始者Rasmus Lerdorf的開發祕訣

PHP語言的創始者Rasmus Lerdorf認為,程式不用寫得完美,而是要簡單有效,這是最重要,也是最困難的事。

PHP之父首度來臺分享如何架構網站擴充性、安全性和效能的祕訣。

Questions:

1. 越來越多Web 2.0網站走向應用平臺,你認為打造這類平臺的關鍵為何?
2. 如何規畫網站架構,才會具有擴充性?
3. 這種規畫網站的方式,什麼是最重要的關鍵?
4. 你是說MVC模式不利於網站擴充性?
5. 你會如何選擇開發框架呢?
6. 難道開發者不需要框架或架構嗎?
7. 網站需要規畫到多久以後的擴充需求?
8. 那麼,有任何準則是架構人員可以遵循的嗎?
9. 切割服務、拆解程式的難度是什麼?
10. 除了擴充性以外,如何提高網站效能呢?
11. 那麼,網站的安全性又需注意哪些原則?
12. 好的架構師需要什麼樣的條件?
13. 臺灣還有不少舊網站使用PHP 4,他們應該現在升級到PHP 5嗎?還是等待PHP 6?

以上是問題,若想知道解答,請看原始報導

來源出自:iThome online

ON DUPLICATE KEY UPDATE的使用

如果您指定了ON DUPLICATE KEY UPDATE,並且插入行後會導致在一個UNIQUE索引或PRIMARY KEY中出現重複值,則執行舊行UPDATE。例如,如果列a被定義為UNIQUE,並且包含值1,則以下兩個語句具有相同的效果:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
mysql> UPDATE table SET c=c+1 WHERE a=1;

如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。
註釋:如果列b也是唯一列,則INSERT與此UPDATE語句相當:

Read more »

Yii 增加 AJAX 加載指示?

使用Yii 你可以非常容易的創建ajax請求和使用ajax更新內容. 但是很多時候你始終希望去顯示ajax裝載的進度指示給你的用戶。
下面是yii裡一個簡單的解決方案, 通常我們會在所有頁面無素內淡出一個80%不透明的DIV層, 同時在後台顯示一個正在裝載指示器.
這個解決方案的優點是,你不需要增加額外的html標籤到你的頁面,在執行這個ajax請求時, 增加.loading CSS樣式類到你的頁面,通常為一個div元素,並且它將在請求完成時移除。
Read more »

php中的危險函數

PHP 危險函數解釋

在編譯 PHP 時,如無特殊需要,一定禁止編譯生成 CLI 命令行模式的 PHP 解析支持。
可在編譯時使用 –disable-cli。一旦編譯生成 CLI 模式的 PHP,則可能會被入侵者
利用該程序建立一個 WEB Shell 後門進程或通過 PHP 執行任意代碼!

phpinfo()
功能描述:輸出 PHP 環境信息以及相關的模塊、WEB 環境等信息。
危險等級:中

passthru()
功能描述:允許執行一個外部程序並回顯輸出,類似於 exec()。
危險等級:高

exec()
功能描述:允許執行一個外部程序(如 UNIX Shell 或 CMD 命令等)。
危險等級:高

system()
功能描述:允許執行一個外部程序並回顯輸出,類似於 passthru()。
危險等級:高

chroot()
功能描述:可改變當前 PHP 進程的工作根目錄,僅當系統支持 CLI 模式
PHP 時才能工作,且該函數不適用於 Windows 系統。
危險等級:高

scandir()
功能描述:列出指定路徑中的文件和目錄。
危險等級:中

chgrp()
功能描述:改變文件或目錄所屬的用戶組。
危險等級:高

chown()
功能描述:改變文件或目錄的所有者。
危險等級:高

shell_exec()
功能描述:通過 Shell 執行命令,並將執行結果作為字符串返回。
危險等級:高

proc_open()
功能描述:執行一個命令並打開文件指針用於讀取以及寫入。
危險等級:高

proc_get_status()
功能描述:獲取使用 proc_open() 所打開進程的信息。
危險等級:高

error_log()
功能描述:將錯誤信息發送到指定位置(文件)。
安全備註:在某些版本的 PHP 中,可使用 error_log() 繞過 PHP safe mode,
執行任意命令。
危險等級:低

ini_alter()
功能描述:是 ini_set() 函數的一個別名函數,功能與 ini_set() 相同。
具體參見 ini_set()。
危險等級:高

ini_set()
功能描述:可用於修改、設置 PHP 環境配置參數。
危險等級:高

ini_restore()
功能描述:可用於恢復 PHP 環境配置參數到其初始值。
危險等級:高

dl()
功能描述:在 PHP 進行運行過程當中(而非啟動時)加載一個 PHP 外部模塊。
危險等級:高

pfsockopen()
功能描述:建立一個 Internet 或 UNIX 域的 socket 持久連接。
危險等級:高

syslog()
功能描述:可調用 UNIX 系統的系統層 syslog() 函數。
危險等級:中

readlink()
功能描述:返回符號連接指向的目標文件內容。
危險等級:中

symlink()
功能描述:在 UNIX 系統中建立一個符號鏈接。
危險等級:高

popen()
功能描述:可通過 popen() 的參數傳遞一條命令,並對 popen() 所打開的文件進行執行。
危險等級:高

stream_socket_server()
功能描述:建立一個 Internet 或 UNIX 服務器連接。
危險等級:中

putenv()
功能描述:用於在 PHP 運行時改變系統字符集環境。在低於 5.2.6 版本的 PHP 中,可利用該函數
修改系統字符集環境後,利用 sendmail 指令發送特殊參數執行系統 SHELL 命令。
危險等級:高

 

國際知名的CMS系統介紹

CMS網站內容管理系統架設服務

Joomla, Drupal, WordPress, OpenCart 是 目前全球建構網站的主流PHP-CMS,專業的網站使用群都相當龐大,各自有不同的設計師支持社群。這三種CMS及一個購物車系統的性能一直是大家比較關 註的對象。為解決客戶有多功能網站的需求,以高安全性、穩定性和降低成本為考量,推出CMS架設服務!以下為簡單介紹:

 

Read more »

一鍵導入所有模塊的翻譯,非常好用。

不用一個個的安裝.po文件了。可以一鍵下載並翻譯安裝的所有模塊的翻譯。

一:開啟Locale 模塊與Content translation模塊。
二:admin/settings/language裡增加一個中文語言。
三:http://drupal.org/project/l10n_update 在這裡下載 Localization update模塊。
四:設置一下 php 的最大執行時間。設置到運行半小時以上。在php.ini裡設置。
五:到站點的 admin/build/translate/update 裡,到最下面的 語言選項那,選中翻譯為中文。更新模式,按自己的想法選一個。然後點更新按鈕。
過一會,它會自己下載並安裝完所有的翻譯。把站點語言設置為中文便可。

到admin/settings/language/update裡面,可以設置po文件下載到哪個文件夾。如果不設置,就會不保存,直接把翻譯導入到數據庫後刪除po文件。
如果模塊很多,會更新很慢的。得花半小時左右。所以php設置的運行很長時間。

另外,http://drupal.org/project/l10n_server 這個模塊好像可自建翻譯服務的站。幾個高手可以共建一個高質量的翻譯版本。然後,可用l10n_update模塊從新建的這個服務器上下載翻譯,從而覆蓋先下載的官方的翻譯。
http://drupal.org/project/l10n_client 模塊,可以設置本地的翻譯即時導入到官網或自建翻譯的服務器上。需要用官網帳號生成一個密碼,粘貼在本地建的站上。

可以自建po漢化文件,並上傳到官網。方法如下:
下載potx 模塊。http://drupal.org/project/potx 可以導出某個模塊或是theme的.pot文件。
然後,用poedit軟件打開這個文件。翻譯其中的內容。導出.po格式的文件。

Drupal 7 Views 3

前不久在 drupal taiwan 上 Kay.L 才談到可能 Views 3.x 會釋出。那時我才剛把 Drupal 6 Views 2.x 課程上架,想說應該不會那麼快吧,也許要半年也說不定,畢竟現在它還在 Sandbox 階段。

沒想到最近到 drupal.org,卻發現 Drupal 7 Views 3.0-beta 已經出現在推薦下載了。

Read more »

主題(Themes)

Magento中的一個主題(Theme)是由佈局(Layout),模板(Template)和皮膚文件(skin文件是控制網店的顯示效果的)組成。Magento被設計成一次可以加載多個主題的功能,因此,通過兩種類型來區分主題:

  • 默認主題(Default theme)
    每個界面都有一個主要的主題,稱之為界面的默認主題。當你為你的網店指定一個界面的時候,系統就會自動地尋找這個默認主題,並按照這個主題來顯示前台。為了自定義網店設計,您可以修改這個主題,或新建一個非默認主題,並加載它。默認的主題必須包含所有必要的佈局,模板和皮膚,以確保網店順利運行,作為主題層次系統中最低級的主題。
  • 非默認主題(Non-default theme)
    非默認主題可以根據你的需要來包含或多或少的主題元素文件(Layout、Template和Skin)。這種類型的主題可以作為網店的臨時季節性的更改,而沒有必要建立一個新的默認主題,通常可以通過創建的幾張圖片和更新一些的CSS來實現,例如:你可以輕鬆地將您的網店從平常的頁面外觀變成有聖誕節氣氛的網店。

讓我們來瞭解一些主題的組件:

  • 佈局(Layout) (在app/design/frontend/your_interface/your_theme/layout/)
    佈局是XML文件,它的作用是定義不同頁面的區塊(Block)結構,以及控制頁面的META信息和網頁的編碼。佈局文件是基於每個模塊分佈的,每一個模塊擁有它自己的佈局文件。要深入瞭解Layout,請閱讀佈局的介紹
  • 模板(Templates) (在app/design/frontend/your_interface/your_theme/template/)
    模板是PHTML文件,它包含(X)HTML標籤和一些用來實現信息和功能顯示的邏輯的PHP代碼。
  • 本地(Locale) (在app/design/frontend/your_interface/your_theme/locale/)
    這些都是在每個語言基礎上組織的簡單的文本文件,包含商店的翻譯副本。
  • 皮膚(Skins) (在skin/frontend/your_interface/your_theme/)
    皮膚是具體區塊(Blocks)中的JavaScript、CSS和圖片文件。你可能會問什麼是區塊?很好的問題,不過不用擔心,Magento已經為這個組件定義好了,看下一節。