不同文件構(gòu)建PHP程序的方式_PHP教程
推薦:PHP集成百度Ueditor 1.4.3最近很多群友都來(lái)問(wèn)我怎么集成百度UE(ueditor 1.4.3),實(shí)在回答不過(guò)來(lái),所以在這寫(xiě)一下集成百度UE的思路,本文內(nèi)使用的最新版的UE1.4.3。 下載安裝 1.首先到官網(wǎng)下載最新版的UE1.4.3 UE官方下載地址:http://ueditor.baidu.com/website/download.html#ueditor 這里我下
以下為引用的內(nèi)容:
如果計(jì)劃讓其他人或公司可以使用您的 php 應(yīng)用程序,需要確保該程序是可配置的。至少,要允許用戶以一種安全的方式設(shè)置數(shù)據(jù)庫(kù)登錄及密碼,從而使其中的材料不會(huì)對(duì)外公開(kāi)。
本文展示了幾種用于存儲(chǔ)配置設(shè)置及編輯這些設(shè)置的技術(shù)。另外,文中也為哪些元素需要設(shè)為可配置以及如何避免陷入配置過(guò)度或者配置不足的困境提供了指導(dǎo)。
使用 INI 文件進(jìn)行配置
PHP 內(nèi)建了對(duì)配置文件的支持。這是通過(guò) php.ini 文件這樣的初始化文件(INI)機(jī)制實(shí)現(xiàn)的,在 php.ini 文件中定義了數(shù)據(jù)庫(kù)連接超時(shí)或會(huì)話如何存儲(chǔ)等常量。如果愿意的話,可以在這個(gè) php.ini 文件中為應(yīng)用程序定制配置。為了說(shuō)明,我將下列代碼行添加到 php.ini 文件中。
myapptempdir=foo
然后,我編寫(xiě)了一個(gè)小 PHP 腳本來(lái)讀取這個(gè)配置項(xiàng),如清單 1 所示。
清單 1. ini1.php
function get_template_directory()
{
$v = get_cfg_var( “myapptempdir” );
return ( $v == null ) ? “tempdir” : $v;
}
echo( get_template_directory().” ” );
?>
當(dāng)在命令行中運(yùn)行這段代碼時(shí),得到如下結(jié)果:
% php ini1.php
foo
%
太棒了。但為什么不能用標(biāo)準(zhǔn)的 INI 函數(shù)來(lái)獲取 myapptempdir 配置項(xiàng)的值呢?我研究了一下,發(fā)現(xiàn)在大多數(shù)情況下,定制配置項(xiàng)不能使用這些方法來(lái)獲取。然而,使用 get_cfg_var 函數(shù)卻是可以訪問(wèn)的。
為使這個(gè)方法更加簡(jiǎn)單,將對(duì)變量的訪問(wèn)封裝在第二個(gè)函數(shù)中,該函數(shù)使用配置鍵名及一個(gè)缺省值作為參數(shù),如下所示。
清單 2. ini2.php
function get_ini_value( $n, $dv )
{
$c = get_cfg_var( $n );
return ( $c == null ) ? $dv : $c;
}
function get_template_directory()
{
return get_ini_value( “myapptempdir”, “tempdir” );
}
這是對(duì)如何訪問(wèn) INI 文件的一個(gè)很好的概括,所以,如果要使用一個(gè)不同的機(jī)制或?qū)⑦@個(gè) INI 文件存儲(chǔ)到其他位置,就不需要為更改大量的函數(shù)而大費(fèi)周折。
我不推薦使用 INI 文件作為應(yīng)用程序的配置,這有兩個(gè)理由。首先,雖然這樣做較容易讀取 INI 文件,但卻幾乎不可能安全地寫(xiě) INI 文件。所以這樣做只適合于只讀配置項(xiàng)。第二,php.ini 文件在服務(wù)器的所有應(yīng)用程序上共享,所以我認(rèn)為特定于應(yīng)用程序的配置項(xiàng)不應(yīng)該寫(xiě)在該文件中。
需要對(duì) INI 文件了解什么呢?最重要的是如何重置 include 路徑來(lái)添加配置項(xiàng),如下所示。
清單 3. ini3.php
echo( ini_get(”include_path”).” ” );
ini_set(”include_path”,
ini_get(”include_path”).”:./mylib” );
echo( ini_get(”include_path”).” ” );
?>
在本例中,我將我的本地 mylib 目錄添加到了 include 路徑中,所以能夠從該目錄中 require PHP 文件,而不需要將該路徑添加到 require 語(yǔ)句中。
PHP 中的配置
通常對(duì)于在 INI 文件中存儲(chǔ)配置條目的一個(gè)替代辦法是使用一個(gè)簡(jiǎn)單的 PHP 腳本來(lái)保持?jǐn)?shù)據(jù)。如下是一個(gè)樣例。
清單 4. config.php
# Specify the location of the temporary directory
#
$TEMPLATE_DIRECTORY = “tempdir”;
?>
使用該常量的代碼如下所示。
清單 5. php.php
require_once ‘config.php’;
function get_template_directory()
{
global $TEMPLATE_DIRECTORY;
return $TEMPLATE_DIRECTORY;
}
echo( get_template_directory().” ” );
?>
該代碼首先包含配置文件(config.php),接著就可以直接使用這些常量了。
使用這項(xiàng)技術(shù)有很多優(yōu)勢(shì)。首先,如果某些人僅僅瀏覽 config.php 文件,該頁(yè)面是空白的。所以可以將 config.php 放到相同的文件中,并作為 Web 應(yīng)用程序的根。第二,在任何編輯器中都可編輯,并且在一些編輯器中甚至具備語(yǔ)法著色及語(yǔ)法檢查功能。
這項(xiàng)技術(shù)的缺點(diǎn)是,這是一個(gè)像 INI 文件一樣的只讀技術(shù)。將數(shù)據(jù)從此文件中提取出來(lái)是輕而易舉的,但在該 PHP 文件中調(diào)整數(shù)據(jù)卻很困難,在一些情況下甚至是不可能的。
下面的替代方法顯示了如何編寫(xiě)在本質(zhì)上既可讀又可寫(xiě)的配置系統(tǒng)。
文本文件
前面的兩個(gè)例子對(duì)于只讀配置條目都是合適的,但對(duì)于既讀又寫(xiě)的配置參數(shù)來(lái)說(shuō)又如何呢?首先,看看清單 6 中的文本配置文件。
清單 6. config.txt
# My application’s configuration file
Title=My App
TemplateDirectory=tempdir
這是同 INI 文件相同的文件格式,但我自己編寫(xiě)了輔助工具。為此,我創(chuàng)建了自己的 Configuration 類,如下所示。
清單 7. text1.php
class Configuration
{
PRivate $configFile = ‘config.txt’;
private $items = array();
function __construct() { $this->parse(); }
function __get($id) { return $this->items[ $id ]; }
function parse()
{
$fh = fopen( $this->configFile, ‘r’ );
while( $l = fgets( $fh ) )
{
if ( preg_match( ‘/^#/’, $l ) == false )
{
preg_match( ‘/^(.*?)=(.*?)$/’, $l, $found );
$this->items[ $found[1] ] = $found[2];
}
}
fclose( $fh );
}
}
$c = new Configuration();
echo( $c->TemplateDirectory.” ” );
?>
該代碼首先創(chuàng)建了一個(gè) Configuration 對(duì)象。該構(gòu)造函數(shù)接下來(lái)讀取 config.txt 并用解析過(guò)的文件內(nèi)容來(lái)設(shè)置局部變量 $items。
該腳本隨后尋找 TemplateDirectory,這并沒(méi)有在對(duì)象中直接定義。因此,使用設(shè)置成 ‘TemplateDirectory’ 的 $id 來(lái)調(diào)用神奇的 __get 方法,__get 方法針對(duì)該鍵返回 $items 數(shù)組中的值。
這個(gè) __get 方法特定于 PHP V5 環(huán)境,所以此腳本必須在 PHP V5 下運(yùn)行。實(shí)際上,本文中所有的腳本都需要在 PHP V5 下運(yùn)行。
當(dāng)在命令行運(yùn)行此腳本時(shí),能看到下列結(jié)果:
http://www.knowsky.com/php.asp
% php text1.php
tempdir
%
一切都在預(yù)料之中,該對(duì)象讀取 config.txt 文件,然后為 TemplateDirectory 配置項(xiàng)獲得正確的值。
但對(duì)于設(shè)置一個(gè)配置值,應(yīng)該怎么做呢?在此類中建立一個(gè)新方法及一些新的測(cè)試代碼,就能夠得到這個(gè)功能,如下所示。
清單 8. text2.php
class Configuration
{
…
function __get($id) { return $this->items[ $id ]; }
function __set($id,$v) { $this->items[ $id ] = $v; }
function parse() { … }
}
$c = new Configuration();
echo( $c->TemplateDirectory.” ” );
$c->TemplateDirectory = ‘foobar’;
echo( $c->TemplateDirectory.” ” );
?>
現(xiàn)在,有了一個(gè) __set 函數(shù),它是 __get 函數(shù)的 “堂兄弟”。該函數(shù)并不為一個(gè)成員變量獲取值,當(dāng)要設(shè)置一個(gè)成員變量時(shí),才調(diào)用這個(gè)函數(shù)。底部的測(cè)試代碼設(shè)置值并打印出新值。
下面是在命令行中運(yùn)行此代碼時(shí)出現(xiàn)的結(jié)果:
% php text2.php
tempdir
foobar
%
太好了!但如何能將它存儲(chǔ)到文件中,從而將使這個(gè)改動(dòng)固定下來(lái)呢?為此,需要寫(xiě)文件并讀取它。用于寫(xiě)文件的新函數(shù),如下所示。
清單 9. text3.php
class Configuration
{
…
function save()
{
$nf = ”;
$fh = fopen( $this->configFile, ‘r’ );
while( $l = fgets( $fh ) )
{
if ( preg_match( ‘/^#/’, $l ) == false )
{
preg_match( ‘/^(.*?)=(.*?)$/’, $l, $found );
$nf .= $found[1].”=”.$this->items[$found[1]].” ”;
}
else
{
$nf .= $l;
}
}
fclose( $fh );
copy( $this->configFile, $this->configFile.’.bak’ );
$fh = fopen( $this->configFile, ‘w’ );
fwrite( $fh, $nf );
fclose( $fh );
}
}
$c = new Configuration();
echo( $c->TemplateDirectory.” ” );
$c->TemplateDirectory = ‘foobar’;
echo( $c->TemplateDirectory.” ” );
$c->save();
?>
新的 save 函數(shù)巧妙地操作 config.txt。我并沒(méi)有僅用更新過(guò)的配置項(xiàng)重寫(xiě)文件(這樣會(huì)移除掉注釋),而是讀取了這個(gè)文件并靈活地重寫(xiě)了 $items 數(shù)組中的內(nèi)容。這樣的話,就保留了文件中的注釋。
在命令行運(yùn)行該腳本并輸出文本配置文件中的內(nèi)容,能夠看到下列輸出。
清單 10. 保存函數(shù)輸出
% php text3.php
tempdir
foobar
% cat config.txt
# My application’s configuration file
Title=My App
TemplateDirectory=foobar
%
原始的 config.txt 文件現(xiàn)在被新值更新了。
xml 配置文件
分享:PHP間隔一段時(shí)間執(zhí)行代碼的方法本文實(shí)例講述了PHP間隔一段時(shí)間執(zhí)行代碼的方法。分享給大家供大家參考。具體分析如下: PHP如何設(shè)置每隔一段時(shí)間自動(dòng)執(zhí)行某段代碼?例如定時(shí)生成靜態(tài)文件之類的,這就需要設(shè)置休眠時(shí)間,即每隔一段時(shí)間程序就會(huì)調(diào)用某段代碼. 代碼如下: 復(fù)制代碼代碼如下:ignore_user_abor
- PHP集成百度Ueditor 1.4.3
- PHP間隔一段時(shí)間執(zhí)行代碼的方法
- C#應(yīng)該知道的簡(jiǎn)單的知識(shí)點(diǎn)
- WEB項(xiàng)目后端跨域請(qǐng)求
- php簡(jiǎn)單防刷計(jì)數(shù)器-PHP實(shí)例
- PHP下載google相冊(cè)到本地-PHP實(shí)例
- 如何用php連接mysql實(shí)例詳解
- 通過(guò)php刪除xml文檔內(nèi)容的方法
- php操作xml入門(mén)之xml基本介紹及xml標(biāo)簽元素
- 通過(guò)php添加xml文檔內(nèi)容的方法
- DOM基礎(chǔ)及php讀取xml內(nèi)容操作的方法
- php使用正則表達(dá)式獲取圖片url的方法
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- php實(shí)現(xiàn)單鏈表的實(shí)例代碼
- 解答網(wǎng)頁(yè)中PHP腳本中include文件報(bào)錯(cuò)的方法
- 動(dòng)態(tài)網(wǎng)頁(yè)P(yáng)HP中引用
- 用動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)PHP生成驗(yàn)證碼圖片的源代碼
- 淺談開(kāi)發(fā)框架的選擇和設(shè)計(jì)經(jīng)驗(yàn)
- PHP實(shí)例:從數(shù)組里篩選出重復(fù)的數(shù)據(jù)
- 解讀PHP數(shù)組讀取的操作
- php驗(yàn)證用戶名是否以字母開(kāi)頭與驗(yàn)證密碼實(shí)例
- 解析php中rename()函數(shù)的妙用
- 如何用PHP實(shí)現(xiàn)插入排序?
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-不同文件構(gòu)建PHP程序的方式
。