设为首页 收藏本站
查看: 653|回复: 0

[经验分享] ECSHOP 源码分析(index.php) (转)

[复制链接]

尚未签到

发表于 2015-8-29 07:49:53 | 显示全部楼层 |阅读模式

  <?php
/***********************************************
define — Defines a named constant
定义常量
bool define ( string name, mixed value [, bool case_insensitive])
参数说明
name :常量名
value:常量值
case_insensitive:大小写区分 true 为不区分,默认为false
例:
<?php
define(&#8221;CONSTANT&#8221;, &#8220;Hello world.&#8221;);
echo CONSTANT; // outputs &#8220;Hello world.&#8221;
echo Constant; // outputs &#8220;Constant&#8221; and issues a notice.
define(&#8221;GREETING&#8221;, &#8220;Hello you.&#8221;, true);
echo GREETING; // outputs &#8220;Hello you.&#8221;
echo Greeting; // outputs &#8220;Hello you.&#8221;
?>
  ******************************************/
define(&#8217;IN_ECS&#8217;, true); //定义一个常量IN_ECS 值为true
/**************************************
require_once()
require_once() 语句在脚本执行期间包括并运行指定文件。此行为和 require() 语句类似,
唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。
require_once() 在 Windows 下不区分大小写
***************************************/
require_once(&#8217;includes/init.php&#8217;);
/***************************
常量DEBUG_MODE是在文件init.php中定义的
****************************/
if (!DEBUG_MODE)
{
/***************************************
Smarty是一个php模板引擎.
更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法
可以描述为应用程序员和美工扮演了不同的角色,因为在大多数情况下 ,他们不可能是同一个人.
例如,你正在创建一个用于浏览新闻的网页,新闻标题,标签栏,作者和内容等都是内容要素,他们并不包含应该怎样去呈现.
在Smarty的程序里,这些被忽略了.模板设计者们编辑模板,组合使用html标签和模板标签去格式化这些要素的输出(html表
格,背景色,字体大小,样式表,等等).
有一天程序员想要改变文章检索的方式(也就是程序逻辑的改变).这个改变不影响模板设计者,内容仍将准确的输出到模板.
同样的,哪天美工吃多了想要完全重做界面,也不会影响到程序逻辑.
因此,程序员可以改变逻辑而不需要重新构建模板,模板设计者可以改变模板而不影响到逻辑.
在init.php中
  require_once(ROOT_PATH.&#8221;includes/smarty/Smarty.class.php&#8221;);
****************************************/
$smarty->caching = TRUE;
}
  /*******************************************
$_GET变量是通过get方法从表单中获取&#8220;值&#8221;的
$_GET变量是一个包含名称[name]何值[value]的数组(这些名称和值是通过HTTP GET方法发送的,且都可以利用)。
$_GET变量使用&#8220;method=get&#8221;来获取表单信息。通过GET方法发送的信息是可见的(它将显示在浏览器的地址栏里),并且
它有长度限制(信息的总长度不能超过100个字符[character])。
********************************************/
  /* Shopex系统地址转换 */
if(!empty($_GET["gOo"]))
{
/* 商品分类。*/
if(!empty($_GET["gcat"]))
{
$Loaction = &#8220;category.php?id=$_GET[gcat]&#8220;;
}
/* 文章分类。*/
elseif(!empty($_GET["acat"]))
{
$Loaction = &#8220;article_cat.php?id=$_GET[acat]&#8220;;
}
/* 商品详情。*/
elseif(!empty($_GET["goodsid"]))
{
$Loaction = &#8220;goods.php?id=$_GET[goodsid]&#8220;;
}
/* 文章详情。*/
elseif(!empty($_GET["articleid"]))
{
$Loaction = &#8220;article.php?id=$_GET[articleid]&#8220;;
}
if(!empty($Loaction))
{
  /***************************************************
header的用法
标头 (header) 是服务器以 HTTP 协议传 HTML 资料到浏览器前所送出的字串,在标头
与 HTML 文件之间尚需空一行分隔。有关 HTTP 的详细说明,可以参 RFC 2068 官方文件
(http://www.w3.org/Protocols/rfc2068/rfc2068)。在 PHP 中送回 HTML 资料前,需先
传完所有的标头。
注意: 传统的标头一定包含下面三种标头之一,并只能出现一次。
Content-Type: xxxx/yyyy
Location: xxxx:yyyy/zzzz
Status: nnn xxxxxx
在新的多型标头规格 (Multipart MIME) 方可以出现二次以上。
使用范例
范例一: 本例使浏览器重定向到 PHP 的官方网站。
<?php
Header(&#8221;Location: http://www.php.net/&#8220;;);
exit;
?>
范例二: 要使用者每次都能得到最新的资料,而不是 Proxy 或 cache 中的资料,可以使用下列的标头
  <?php
header(&#8221;Expires: Mon, 26 Jul 1997 05:00:00 GMT&#8221;);
header(&#8221;Last-Modified: &#8221; . gmdate(&#8221;D, d M Y H:i:s&#8221;) . &#8220;GMT&#8221;);
header(&#8221;Cache-Control: no-cache, must-revalidate&#8221;);
header(&#8221;Pragma: no-cache&#8221;);
?>
  范例三: 让使用者的浏览器出现找不到档案的信息。
<?php
header(&#8221;Status: 404 Not Found&#8221;);
?>
范例四:让使用者下载档案。
  <?php
header(&#8221;Content-type: application/x-gzip&#8221;);
header(&#8221;Content-Disposition: attachment; filename=文件名&#8221;);
header(&#8221;Content-Description: PHP3 Generated Data&#8221;);
?>
***************************************************/
header(&#8221;Location: $Loaction\n&#8221;);
exit;
}
}
  /******************************************************
Session常见函数及用法?
Session_start() :开始一个会话或者返回已经存在的会话。
说明:这个函数没有参数,且返回值均为true。如果你使用基于cookie的session(cookie-based sessions),那么在使用Session_start()之前浏览器不能有任何输出,否则会发生以下错误: Warning: Cannot send session cache limiter - headers already sent
你可以在php.ini里启动session.auto_start=1,这样就无需每次使用session之前都要调用session_start()。
但启用该选项也有一些限制,如果确实启用了 session.auto_start,则不能将对象放入会话中,因为类定义必须在启动会话之前加载以在会话中重建对象。
请求结束后所有注册的变量都会被序列化。已注册但未定义的变量被标记为未定义。在之后的访问中这些变量也未被会话模块定义,除非用户以后定义它们。
警告: 有些类型的数据不能被序列化因此也就不能保存在会话中。包括 resource 变量或者有循环引用的对象(即某对象将一个指向自己的引用传递给另一个对象)。
注册SESSION变量 :
PHP5使用$_SESSION[&#8216;xxx&#8217;]=xxx注册SESSION全局变量。和GET,POST,COOKIE的使用方法相似。
注意:session_register(),session_unregister ,session_is_registered在php5下不再使用,除非在php.ini里把register_globle设为on,
不过出于安全考虑,强烈建议关闭register_globle。HTTP_SESSION_VARS也不提倡使用了,官方建议用$_SESSION代替之。例如:
Page1.php
  <?php
Session_start(); //使用SESSION前必须调用该函数。
$_SESSION[&#8216;name&#8217;]=&#8221;我是黑旋风李逵!&#8221;; //注册一个SESSION变量
$_SESSION[&#8216;passwd&#8217;]=&#8221;mynameislikui&#8221;;
$_SESSION[&#8216;time&#8217;]=time();
echo &#8216;<br /><a href=&#8221;page2.php&#8221;>通过COOKIE传递SESSION</a>&#8217;; //如果客户端支持cookie,可通过该链接传递session到下一页。
echo &#8216;<br /><a href=&#8221;page2.php?&#8217; . SID . &#8216;&#8221;>通过URL传递SESSION</a>&#8217;;//客户端不支持cookie时,使用该办法传递session.
?>
  有两种方法传递一个会话 ID:
cookie
URL 参数
会话模块支持这两种方法。cookie 更优化,但由于不总是可用,也提供替代的方法。第二种方法直接将会话 ID 嵌入到 URL 中间去。
PHP 可以透明地转换连接。除非是使用 PHP 4.2 或更新版本,需要手工在编译 PHP 时激活。在 Unix 下,用 &#8211;enable-trans-sid 配置选项。
如果此配置选项和运行时选项 session.use_trans_sid 都被激活(修改php.ini),相对 URI 将被自动修改为包含会话 ID。
● session_id
session_id() 用于设定或取得当前session_id。php5中既可以使用session_id(),也可以通过附加在url上的SID取得当前会话的session_id和session_name。
如果session_id()有具体指定值的话,将取代当前的session_id值。使用该函数前必须启动会话:session_start();
当我们使用session cookies时,如果指定了一个session_id()值,每次启动session_start()都会往客户端发送一个cookie值。不论当前session_id是否与指定值相等。
session_id()如果没有指定值,则返回当前session_id();当前会话没有启动的话,则返回空字符串。
● 检查session是否存在?
在以往的php版本中通常使用session_is_register()检查session是否存在,如果您使用$_SESSION[&#8216;XXX&#8217;]=XXX来注册会话变量,
则session_is_register()函数不再起作用。你可以使用
isset($_SESSION[&#8216;xxx&#8217;])来替代。
● 更改session_id session_regenerate_id() 更改成功则返回true,失败则返回false。
使用该函数可以为当前session更改session_id,但不改变当前session的其他信息。例如:
  <?php
session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo &#8220;原始 SessionID: $old_sessionid<br />&#8221;;
echo &#8220;新的 SessionID: $new_sessionid<br />&#8221;;
echo&#8221;<pre>&#8221;;
print_r($_SESSION);
echo&#8221;</pre>&#8221;;
?>
  ● session_name() 返回当前session的name或改变当前session的name。如果要改变当前session的name,必须在session_start()之前调用该函数。
注意:session_name不能只由数字组成,它至少包含一个字母。否则会在每时每刻都生成一个新的session id.
session改名示例:
<?php
$previous_name = session_name(&#8221;WebsiteID&#8221;);
echo &#8220;新的session名为: $previous_name<br />&#8221;;
?>
● 如何删除session?
1、unset ($_SESSION['xxx']) 删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。其作用和session_unregister()相同。
session_unregister()在PHP5中不再使用,可将之打入冷宫。
unset($_SESSION) 此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_SESSION变量。
2、$_SESSION=array() 删除多个session
3、session_destroy()结束当前的会话,并清空会话中的所有资源。。该函数不会unset(释放)和当前session相关的全局变量(globalvariables),
也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。
功能说明:这个函数结束当前的session,此函数没有参数,且返回值均为true
session_unset() 如果使用了$_SESSION,则该函数不再起作用。由于PHP5必定要使用$_SESSION,所以此函数可以打入冷宫了。
返回值:布尔值。
******************************************************/
  /* 缓存编号 */
$cache_id = $_SESSION['user_rank'].&#8217;-&#8217;.$_CFG['lang'];
if (!$smarty->is_cached(&#8217;index.html&#8217;, $cache_id))
{
/************************************
在includes/lib_main.php中定义的函数
*************************************/
assign_nav();
assign_ur_here();
assign_categories();
assign_dynamic(&#8217;index&#8217;);
assign_help();
assign_top10();
assign_vote();
assign_invoice_query();
assign_new_articles();
assign_plugins();
$smarty->assign(&#8217;best_goods&#8217;, recommend_goods(&#8217;best&#8217;));
$smarty->assign(&#8217;new_goods&#8217;, recommend_goods(&#8217;new&#8217;));
$smarty->assign(&#8217;hot_goods&#8217;, recommend_goods(&#8217;hot&#8217;));
$smarty->assign(&#8217;promotion_goods&#8217;, recommend_goods(&#8217;promote&#8217;));
/* meta information */
$smarty->assign(&#8217;keywords&#8217;, htmlspecialchars($_CFG['shop_desc']));
$smarty->assign(&#8217;description&#8217;, htmlspecialchars($_CFG['shop_desc']));
/* rss url */
$feed_url = ($_CFG['rewrite'] == 1) ? &#8216;feed.xml&#8217; : &#8216;feed.php&#8217;;
$smarty->assign(&#8217;feed_url&#8217;, $feed_url);
  /**********************************************************************
数据库访问采用ADODB
在init.php
require_once(ROOT_PATH.&#8221;includes/adodb/adodb.inc.php&#8221;);
ADODB 是 Active Data Objects Data Base 的简称,它是一种 PHP 存取数据库的函式组件。
虽然 PHP 是建构 Web 系统强有力的工具,但是 PHP 存取数据库的功能,一直未能标准化,每一种数据库,
都使用另一种不同且不兼容的应用程序接口(API)。为了填补这个缺憾,因此才有 ADODB 的出现。一旦存取数
据库的接口予以标准化,就能隐藏各种数据库的差异,若欲转换至其它不同的数据库,将变得十分容易。
目前 ADODB 支持的数据库种类非常地多,例如:MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7,
Foxpro, Access, ADO, Sybase, DB2 以及一般的 ODBC (其中 PostgreSQL、Informix、Sybase 的driver 是由自
由软件社群发展之后贡献出来的)。
使用 ADODB 最大的优点之一是:不管后端数据库如何,存取数据库的方式都是一致的,开发设计人员不必为了某
一套数据库,而必须再学习另一套不同的存取方法,这大大减轻开发人员的知识负担,过去的知识往后仍可继续
使用,转移数据库平台时,程序代码也不必做太大的更动。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-105689-1-1.html 上篇帖子: php根据ip查询所在地区(非常有用,赶集网就用到) 下篇帖子: PHP中调用move_uploaded_file函数提示failed to open stream和 Unable to move
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表