小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ECSHOP 源碼分析(index.php) (轉(zhuǎn))

 quasiceo 2014-05-03
 

<?php
/***********************************************
define — Defines a named constant
定義常量
bool define ( string name, mixed value [, bool case_insensitive])
參數(shù)說明
name :常量名
value:常量值
case_insensitive:大小寫區(qū)分 true 為不區(qū)分,默認(rèn)為false
例:
<?php
define(”CONSTANT”, “Hello world.”);
echo CONSTANT; // outputs “Hello world.”
echo Constant; // outputs “Constant” and issues a notice.
define(”GREETING”, “Hello you.”, true);
echo GREETING; // outputs “Hello you.”
echo Greeting; // outputs “Hello you.”
?>

******************************************/
define(’IN_ECS’, true); //定義一個(gè)常量IN_ECS 值為true
/**************************************
require_once()
require_once() 語句在腳本執(zhí)行期間包括并運(yùn)行指定文件。此行為和 require() 語句類似,
唯一區(qū)別是如果該文件中的代碼已經(jīng)被包括了,則不會(huì)再次包括。
require_once() 在 Windows 下不區(qū)分大小寫
***************************************/
require_once(’includes/init.php’);
/***************************
常量DEBUG_MODE是在文件init.php中定義的
****************************/
if (!DEBUG_MODE)
{
/***************************************
Smarty是一個(gè)php模板引擎.
更準(zhǔn)確的說,它分開了邏輯程序和外在的內(nèi)容,提供了一種易于管理的方法
可以描述為應(yīng)用程序員和美工扮演了不同的角色,因?yàn)樵诖蠖鄶?shù)情況下 ,他們不可能是同一個(gè)人.
例如,你正在創(chuàng)建一個(gè)用于瀏覽新聞的網(wǎng)頁,新聞標(biāo)題,標(biāo)簽欄,作者和內(nèi)容等都是內(nèi)容要素,他們并不包含應(yīng)該怎樣去呈現(xiàn).
在Smarty的程序里,這些被忽略了.模板設(shè)計(jì)者們編輯模板,組合使用html標(biāo)簽和模板標(biāo)簽去格式化這些要素的輸出(html表
格,背景色,字體大小,樣式表,等等).
有一天程序員想要改變文章檢索的方式(也就是程序邏輯的改變).這個(gè)改變不影響模板設(shè)計(jì)者,內(nèi)容仍將準(zhǔn)確的輸出到模板.
同樣的,哪天美工吃多了想要完全重做界面,也不會(huì)影響到程序邏輯.
因此,程序員可以改變邏輯而不需要重新構(gòu)建模板,模板設(shè)計(jì)者可以改變模板而不影響到邏輯.
在init.php中

require_once(ROOT_PATH.”includes/smarty/Smarty.class.php”);
****************************************/
$smarty->caching = TRUE;
}

/*******************************************
$_GET變量是通過get方法從表單中獲取“值”的
$_GET變量是一個(gè)包含名稱[name]何值[value]的數(shù)組(這些名稱和值是通過HTTP GET方法發(fā)送的,且都可以利用)。
$_GET變量使用“method=get”來獲取表單信息。通過GET方法發(fā)送的信息是可見的(它將顯示在瀏覽器的地址欄里),并且
它有長(zhǎng)度限制(信息的總長(zhǎng)度不能超過100個(gè)字符[character])。
********************************************/

/* Shopex系統(tǒng)地址轉(zhuǎn)換 */
if(!empty($_GET["gOo"]))
{
/* 商品分類。*/
if(!empty($_GET["gcat"]))
{
$Loaction = “category.php?id=$_GET[gcat]“;
}
/* 文章分類。*/
elseif(!empty($_GET["acat"]))
{
$Loaction = “article_cat.php?id=$_GET[acat]“;
}
/* 商品詳情。*/
elseif(!empty($_GET["goodsid"]))
{
$Loaction = “goods.php?id=$_GET[goodsid]“;
}
/* 文章詳情。*/
elseif(!empty($_GET["articleid"]))
{
$Loaction = “article.php?id=$_GET[articleid]“;
}
if(!empty($Loaction))
{

/***************************************************
header的用法
標(biāo)頭 (header) 是服務(wù)器以 HTTP 協(xié)議傳 HTML 資料到瀏覽器前所送出的字串,在標(biāo)頭
與 HTML 文件之間尚需空一行分隔。有關(guān) HTTP 的詳細(xì)說明,可以參 RFC 2068 官方文件
(http://www./Protocols/rfc2068/rfc2068)。在 PHP 中送回 HTML 資料前,需先
傳完所有的標(biāo)頭。
注意: 傳統(tǒng)的標(biāo)頭一定包含下面三種標(biāo)頭之一,并只能出現(xiàn)一次。
Content-Type: xxxx/yyyy
Location: xxxx:yyyy/zzzz
Status: nnn xxxxxx
在新的多型標(biāo)頭規(guī)格 (Multipart MIME) 方可以出現(xiàn)二次以上。
使用范例
范例一: 本例使瀏覽器重定向到 PHP 的官方網(wǎng)站。
<?php
Header(”Location: http://www./“;);
exit;
?>
范例二: 要使用者每次都能得到最新的資料,而不是 Proxy 或 cache 中的資料,可以使用下列的標(biāo)頭

<?php
header(”Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
header(”Last-Modified: ” . gmdate(”D, d M Y H:i:s”) . “GMT”);
header(”Cache-Control: no-cache, must-revalidate”);
header(”Pragma: no-cache”);
?>

范例三: 讓使用者的瀏覽器出現(xiàn)找不到檔案的信息。
<?php
header(”Status: 404 Not Found”);
?>
范例四:讓使用者下載檔案。

<?php
header(”Content-type: application/x-gzip”);
header(”Content-Disposition: attachment; filename=文件名”);
header(”Content-Description: PHP3 Generated Data”);
?>
***************************************************/
header(”Location: $Loaction\n”);
exit;
}
}

/******************************************************
Session常見函數(shù)及用法?
Session_start() :開始一個(gè)會(huì)話或者返回已經(jīng)存在的會(huì)話。
說明:這個(gè)函數(shù)沒有參數(shù),且返回值均為true。如果你使用基于cookie的session(cookie-based sessions),那么在使用Session_start()之前瀏覽器不能有任何輸出,否則會(huì)發(fā)生以下錯(cuò)誤: Warning: Cannot send session cache limiter - headers already sent
你可以在php.ini里啟動(dòng)session.auto_start=1,這樣就無需每次使用session之前都要調(diào)用session_start()。
但啟用該選項(xiàng)也有一些限制,如果確實(shí)啟用了 session.auto_start,則不能將對(duì)象放入會(huì)話中,因?yàn)轭惗x必須在啟動(dòng)會(huì)話之前加載以在會(huì)話中重建對(duì)象。
請(qǐng)求結(jié)束后所有注冊(cè)的變量都會(huì)被序列化。已注冊(cè)但未定義的變量被標(biāo)記為未定義。在之后的訪問中這些變量也未被會(huì)話模塊定義,除非用戶以后定義它們。
警告: 有些類型的數(shù)據(jù)不能被序列化因此也就不能保存在會(huì)話中。包括 resource 變量或者有循環(huán)引用的對(duì)象(即某對(duì)象將一個(gè)指向自己的引用傳遞給另一個(gè)對(duì)象)。
注冊(cè)SESSION變量 :
PHP5使用$_SESSION[‘xxx’]=xxx注冊(cè)SESSION全局變量。和GET,POST,COOKIE的使用方法相似。
注意:session_register(),session_unregister ,session_is_registered在php5下不再使用,除非在php.ini里把register_globle設(shè)為on,
不過出于安全考慮,強(qiáng)烈建議關(guān)閉register_globle。HTTP_SESSION_VARS也不提倡使用了,官方建議用$_SESSION代替之。例如:
Page1.php

<?php
Session_start(); //使用SESSION前必須調(diào)用該函數(shù)。
$_SESSION[‘name’]=”我是黑旋風(fēng)李逵!”; //注冊(cè)一個(gè)SESSION變量
$_SESSION[‘passwd’]=”mynameislikui”;
$_SESSION[‘time’]=time();
echo ‘<br /><a href=”page2.php”>通過COOKIE傳遞SESSION</a>’; //如果客戶端支持cookie,可通過該鏈接傳遞session到下一頁。
echo ‘<br /><a href=”page2.php?’ . SID . ‘”>通過URL傳遞SESSION</a>’;//客戶端不支持cookie時(shí),使用該辦法傳遞session.
?>

有兩種方法傳遞一個(gè)會(huì)話 ID:
cookie
URL 參數(shù)
會(huì)話模塊支持這兩種方法。cookie 更優(yōu)化,但由于不總是可用,也提供替代的方法。第二種方法直接將會(huì)話 ID 嵌入到 URL 中間去。
PHP 可以透明地轉(zhuǎn)換連接。除非是使用 PHP 4.2 或更新版本,需要手工在編譯 PHP 時(shí)激活。在 Unix 下,用 –enable-trans-sid 配置選項(xiàng)。
如果此配置選項(xiàng)和運(yùn)行時(shí)選項(xiàng) session.use_trans_sid 都被激活(修改php.ini),相對(duì) URI 將被自動(dòng)修改為包含會(huì)話 ID。
● session_id
session_id() 用于設(shè)定或取得當(dāng)前session_id。php5中既可以使用session_id(),也可以通過附加在url上的SID取得當(dāng)前會(huì)話的session_id和session_name。
如果session_id()有具體指定值的話,將取代當(dāng)前的session_id值。使用該函數(shù)前必須啟動(dòng)會(huì)話:session_start();
當(dāng)我們使用session cookies時(shí),如果指定了一個(gè)session_id()值,每次啟動(dòng)session_start()都會(huì)往客戶端發(fā)送一個(gè)cookie值。不論當(dāng)前session_id是否與指定值相等。
session_id()如果沒有指定值,則返回當(dāng)前session_id();當(dāng)前會(huì)話沒有啟動(dòng)的話,則返回空字符串。
● 檢查session是否存在?
在以往的php版本中通常使用session_is_register()檢查session是否存在,如果您使用$_SESSION[‘XXX’]=XXX來注冊(cè)會(huì)話變量,
則session_is_register()函數(shù)不再起作用。你可以使用
isset($_SESSION[‘xxx’])來替代。
● 更改session_id session_regenerate_id() 更改成功則返回true,失敗則返回false。
使用該函數(shù)可以為當(dāng)前session更改session_id,但不改變當(dāng)前session的其他信息。例如:

<?php
session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo “原始 SessionID: $old_sessionid<br />”;
echo “新的 SessionID: $new_sessionid<br />”;
echo”<pre>”;
print_r($_SESSION);
echo”</pre>”;
?>

● session_name() 返回當(dāng)前session的name或改變當(dāng)前session的name。如果要改變當(dāng)前session的name,必須在session_start()之前調(diào)用該函數(shù)。
注意:session_name不能只由數(shù)字組成,它至少包含一個(gè)字母。否則會(huì)在每時(shí)每刻都生成一個(gè)新的session id.
session改名示例:
<?php
$previous_name = session_name(”WebsiteID”);
echo “新的session名為: $previous_name<br />”;
?>
● 如何刪除session?
1、unset ($_SESSION['xxx']) 刪除單個(gè)session,unset($_SESSION['xxx']) 用來unregister一個(gè)已注冊(cè)的session變量。其作用和session_unregister()相同。
session_unregister()在PHP5中不再使用,可將之打入冷宮。
unset($_SESSION) 此函數(shù)千萬不可使用,它會(huì)將全局變量$_SESSION銷毀,而且還沒有可行的辦法將其恢復(fù)。用戶也不再可以注冊(cè)$_SESSION變量。
2、$_SESSION=array() 刪除多個(gè)session
3、session_destroy()結(jié)束當(dāng)前的會(huì)話,并清空會(huì)話中的所有資源。。該函數(shù)不會(huì)unset(釋放)和當(dāng)前session相關(guān)的全局變量(globalvariables),
也不會(huì)刪除客戶端的session cookie.PHP默認(rèn)的session是基于cookie的,如果要?jiǎng)h除cookie的話,必須借助setcookie()函數(shù)。
功能說明:這個(gè)函數(shù)結(jié)束當(dāng)前的session,此函數(shù)沒有參數(shù),且返回值均為true
session_unset() 如果使用了$_SESSION,則該函數(shù)不再起作用。由于PHP5必定要使用$_SESSION,所以此函數(shù)可以打入冷宮了。
返回值:布爾值。
******************************************************/

/* 緩存編號(hào) */
$cache_id = $_SESSION['user_rank'].’-’.$_CFG['lang'];
if (!$smarty->is_cached(’index.html’, $cache_id))
{
/************************************
在includes/lib_main.php中定義的函數(shù)
*************************************/
assign_nav();
assign_ur_here();
assign_categories();
assign_dynamic(’index’);
assign_help();
assign_top10();
assign_vote();
assign_invoice_query();
assign_new_articles();
assign_plugins();
$smarty->assign(’best_goods’, recommend_goods(’best’));
$smarty->assign(’new_goods’, recommend_goods(’new’));
$smarty->assign(’hot_goods’, recommend_goods(’hot’));
$smarty->assign(’promotion_goods’, recommend_goods(’promote’));
/* meta information */
$smarty->assign(’keywords’, htmlspecialchars($_CFG['shop_desc']));
$smarty->assign(’description’, htmlspecialchars($_CFG['shop_desc']));
/* rss url */
$feed_url = ($_CFG['rewrite'] == 1) ? ‘feed.xml’ : ‘feed.php’;
$smarty->assign(’feed_url’, $feed_url);

/**********************************************************************
數(shù)據(jù)庫(kù)訪問采用ADODB
在init.php
require_once(ROOT_PATH.”includes/adodb/adodb.inc.php”);
ADODB 是 Active Data Objects Data Base 的簡(jiǎn)稱,它是一種 PHP 存取數(shù)據(jù)庫(kù)的函式組件。
雖然 PHP 是建構(gòu) Web 系統(tǒng)強(qiáng)有力的工具,但是 PHP 存取數(shù)據(jù)庫(kù)的功能,一直未能標(biāo)準(zhǔn)化,每一種數(shù)據(jù)庫(kù),
都使用另一種不同且不兼容的應(yīng)用程序接口(API)。為了填補(bǔ)這個(gè)缺憾,因此才有 ADODB 的出現(xiàn)。一旦存取數(shù)
據(jù)庫(kù)的接口予以標(biāo)準(zhǔn)化,就能隱藏各種數(shù)據(jù)庫(kù)的差異,若欲轉(zhuǎn)換至其它不同的數(shù)據(jù)庫(kù),將變得十分容易。
目前 ADODB 支持的數(shù)據(jù)庫(kù)種類非常地多,例如:MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7,
Foxpro, Access, ADO, Sybase, DB2 以及一般的 ODBC (其中 PostgreSQL、Informix、Sybase 的driver 是由自
由軟件社群發(fā)展之后貢獻(xiàn)出來的)。
使用 ADODB 最大的優(yōu)點(diǎn)之一是:不管后端數(shù)據(jù)庫(kù)如何,存取數(shù)據(jù)庫(kù)的方式都是一致的,開發(fā)設(shè)計(jì)人員不必為了某
一套數(shù)據(jù)庫(kù),而必須再學(xué)習(xí)另一套不同的存取方法,這大大減輕開發(fā)人員的知識(shí)負(fù)擔(dān),過去的知識(shí)往后仍可繼續(xù)
使用,轉(zhuǎn)移數(shù)據(jù)庫(kù)平臺(tái)時(shí),程序代碼也不必做太大的更動(dòng)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多