[转]BSD差在Linux操作系统哪里/BSD与linux比较

很多人喜欢Linux操作系统,你了解Linux操作系统么?你为什么喜欢Linux操作系统呢?说到Free Software的OS,当属Linux,BSD相对来讲是冷门多了.但BSD的风评可不会比Linux差呀?那么是什么原因造成Linux比BSD更受 欢迎呢?

Linux是出现约在BSD官司缠身、以及Internet开始风行之际.Linux的开发者及爱好者正好能透过Internet实时得发布新闻、 发表新点子、提问讨论、递送程序代码及进行错误回报,这种藉由Internet的分布式合作方式带给Linux惊人的活力和无限的生命力,而经由 Internet所带来的这种活力和生命力正是Linux长久以来能和BSD分庭抗礼的主要原因之一.
Linus Torvalds的管理哲学:

也许LinusTorvalds并不是像BillJoy(BSD的开创者)那样是个天纵英才的程序设计师,但他无疑的是超一流的领导者.要知道,能 参与LinuxKernel开发的往往都不是什么泛泛之辈,Linus如何在这些天资聪颖的计算机怪才之间折冲樽俎是非常耐人寻味的.

硬件支持:
在Linux现身之时,刚好是人们开始买得起个人计算机时.但糟糕的是,当时的BSD对于当 时的个人计算机所使用的80386硬件的支持度并不好,而一般老百姓应该不太会为了玩BSD而特地购买高价的服务器设备,因此人们,尤其是穷苦的大学生, 若要玩Unix时只有Linux可供选择,相对来说BSD的吸引力当然就大不如Linux了.不过说起硬件支持,其实Linux和BSD也只是难兄难 弟,Linux是较佳,但有些太新太特殊及特定制造商的硬件Linux还是无法支持!

GNU的大力支援
GNU提供了一个操作系统所需的各式各样必要组件,但最重要的组件-Kernel却迟 迟没有着落.原本计划好要成为GNU官方Kernel的HURD的发展一直很不顺利,而Linux的出现就刚好出现填补了GNU这个拼图上最重要的一个大 洞.另外,虽然GNU的软件质量是毋庸置疑,但BSD却希望他们的开发团队所维护的核心工具都能以BSDL发行,所以因为授权兼容性的关系,很多GNU软 件就被BSD的人们摒除在外了.因此喜爱GNU软件的人们除了Linux之外就似乎别无选择了.Linux和GNU是分不开的:没有GNU,那么没有任何 工具程序的Linux根本无用武之地;而没了Linux,GNU软件就少了一个可以尽情发挥的舞台了.因此,个人可以接受人们说Linux的全名应该是 GNU/Linux.若我们仔细想想Linux的发展成长过程,个人认为如此称呼并不为过.

而Linus也说过其实他并不是很反对GNU/Linux这个名字,饮水思源,毕竟Linux的确是藉助了GNU太多的核心工具才有今天的成就.若 当时没有GNU计划,那么Linux根本不会出现在这个世界上:当初Linux0.0.1发表时,Linus就只完成了以下功能:可用GCC编译,然后它 能做的也只有执行BASH这个Shell而已,而这2个工具恰巧都是GNU的作品.我们可以看到,Linux刚开始就和GNU结下不解之缘了.

教堂与市集:
BSD走的是教堂式的学院派路线,而Linux则是代表了市集式的骇客精神;

多样的版本:
Linux的松散结构也反应在Linux的发行版上.因为Linux并没有什么官方发行版,所以任何人只要有兴趣有能力,都可以自行发行Linux,这使得我们能轻易得在Internet上找到超过200种以上的Linux发行版,而实际数字恐怕远不止如此.

商业公司的支持:
若说Linux为什么能快速得进入商用市场,我想RedHat的成立应该是一个关键性 的因素.对于大型企业而言,或许授权费用的多寡并不是重点,他们要的是能够说服上司及股东的解决方案.透过RedHat所提供的技术支持,信息部门也比较 敢将Linux列入解决方案之中.这项优势是没什么商业支持的BSD所难以匹敌的.

媒体的推波助澜:
若说到自由软件界的代表人物,我想人们脑海中会浮现的名单应该少不了 RichardM.Stallman、EricS.Raymond及LinusTorvalds这几位指标性人物.RichardM.Stallman是 公认的自由软件界的精神领袖,他的意见对于GNU还是具有一定的影响力.EricSteven Raymond则是黑客文化的传道士,他发表了不少像是《教堂与市集》、《提问的智慧》之类对黑客文化影响深远的文章.而Linus Torvalds则是Linux Kernel项目领导人.这几位指标人物彼此之间似乎总是意见不合,但他们却有一个共通点-他们都是Linux的拥护者.

也就是说,当几位自由软件界的代表人物都在努力为Linux宣传的同时,BSD自然从人们的雷达范围中消失了.不管BSD再怎么棒,但人们不晓得的话也是罔然.

GPLvs.BSDL:
RichardM.Stallman之所以是自由软件界的精神领袖,除了他发起 了GNU计划之外,个人认为他为了GNU而撰写的GPL更是决定性的因素.GPL是一种偏向于开发者的回馈条款:使用者可以自由运用GPL程序代码,但所 有修改必须也以GPL开放,让所有人(包括原始程序设计者)都能受益.这是能确保程序代码永远能让所有人自由使用的终极手段.相较之下,BSDL应该是偏 于使用者的一种无偿授权:使用者如何自由运用这些程序代码,程序设计师无权置喙,只要宣告这个软件是BSDL授权即可.因此,BSDL的软件可能有一天会 变成封闭软件,像Microsoft在Windows 2000核心里就采用了一些来自BSD的网络组件,但BSD的人们却没有因而受惠.Microsoft并没有必要回馈那些修改后的程序代码.

软件的支持:
也许这是互为因果关系,因为BSD家族的市占率比Linux低多了,BSD的开发者也相对 较少,因此有不少缺乏资源的开放原始码软件就没有多余的心力能放在BSD上,这导致很多软件对BSD的支持度就没Linux那么好了.以Free BSD为例好了.FreeBSD是针对i386硬件而开发的BSD分支,长久以来Free BSD在功能、稳定、安全、效能等各方面的表现颇受好评,您可以在Google上找到一篇"Yahoo! and FreeBSD"以为佐证.

通过本文你就了解了Linux操作系统比BSD更受到人们的欢迎了。

linux下PHP 激活mbstring扩展及php.ini中相关基本设置

从源码编译安装php,重新编译php,configure参数中加入 --enable-mbstring,如下所示,

./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql\
 --with-apxs=/usr/local/apache/bin/apxs  --with-config-file-path=/usr/local/apache/conf --enable-mbstring

[注] 其它configure参数按你的php相关路径进行配置

redhat/centOS/fedora系列使用yum在线安装

sudo yum install php-mbstring
sudo /sbin/service httpd restart

Mac下可以如下进行

sudo port install php5-mbstring
apachectl restart

php程序中的编码转换

在php中解决字符编码转换,可以编写自定义的php函数进行字符编码解码,但是对性能有一定影响,并且要针对每种字符编码编写专用的函数; 这里介绍在php中有简便易用的专用函数:

1.使用iconv函数转换字符编码,该函数仅能在PHP4.0.5以上版本或PHP5.x版本使用,具体用法如下:

$string=iconv(原字符编码, 字符输出编码, $string);

例如:网页使用gbk编码,字符串使用utf-8编码,将字符转换为网页显示编码。

echo iconv("uft-8", "gbk", "php编码转换");

在实际使用中,iconv函数在转换时存在一点小bug,在转换字符串中含有"—"时会出错,导致字符串无法转换,使用//IGNORE参数可以忽略转换中的字符错误,样例如下:

echo iconv("uft-8", "gbk//IGNORE", "php编码转换");

2.使用mb_convert_encoding函数,该函数仅能在PHP4.0.6以上版本或PHP5.x版本使用,使用之前必须enable mbstring,具体用法如下:

$string=mb_convert_encoding($string, 字符输出编码, 原字符编码);

例如:网页使用gbk编码,字符串使用utf-8编码,将字符转换为网页显示编码。

echo mb_convert_encoding("php编码转换", "gbk", "utf-8");

windows下mbstring安装配置请参看这里 windows下PHP 激活mbstring扩展及php.ini中相关基本设置

总结:推荐使用mb_convert_encoding函数,该函数无iconv转换字符错误问题。

华硕A8笔记本(ati x2300显卡)linux 2.6.33/fedora13显示花屏闪烁

07年底购买的笔记本电脑,华硕A8,ATI x2300独立显卡,从一开始就是多系统,linux当然是必装的,最近默认启动系统已经改成linux了。

大概是从redhat9开始了解linux的原因,对fedora比较好感,从fedora8一直安装到现在最新的fedora13。但fedora12 yum更新,安装过linux 2.6.33内核以后,一启动,还没有进入图形界面就花屏,闪烁个没完。估计是某个驱动与显卡不兼容所致,但并不知道具体是哪个驱动所致,才疏学浅,对linux只限于入门使用。于是fedora12后来的升级,升级后,修改grub,启用之前的2.6.31版的内核。曾经自己编译了一次linux 2.6.33 的内核,但照样是花屏,这问题就不再理会。

fedora13出来了,因为默认是新版本内核,感觉很可能会花屏的,于是一个月都没有下载安装。前些天下载安装到上网本上,感觉跟之前版本改变还是不小的,图形界面好像更细腻一点,firefox F11全屏功能也正常了(fedora12里F11不能真正全屏,仅仅是隐藏菜单,工具栏什么的都没有隐藏)。试了试,果然,一进入fedora13安装过程,就是花屏闪烁。如此安装运行时,一定花屏的。

突发奇想是否可以硬安装f13,然后把fedora12里的内核安装上去,rpm包可以用zip解压缩的,把解压出来的内核文件,驱动文件拷到相应目录下,这样是否可以正常呢?甚至fedora12的rpm可以直接在fedora13里安装?

于是试试,在一直闪烁的屏幕前安装linux,实在不很舒服,眼花。只选一少部分比较重要的包,这样速度比较快,安装完就可以更快的测试旧版本内核的安装。

终于在闪烁中完成了fedora的安装(全新安装),从fedora12里的/Packages/解压出kernel-2.6.31.5-127.fc12.i686.rpm,sa切换到root用户,rpm -ivh kernel-2.6.31.5-127.fc12.i686.rpm。

安装完成后,奇迹还真出现了。重启电脑,选择刚安装的kernel,目录都是好的。

天啊,SSL潜在重大危机:CNNIC CA:最最最严重安全警告!

CNNIC CA:最最最严重安全警告!

转于:http://autoproxy.org/zh-CN/node/66

由 WCM 于 星期一, 2010-02-01 20:00 发表

各位,虽然此事与 AutoProxy 无关,但它对所有(也包括 AutoProxy)用户都是一个非常严重的安全威胁。我,WCM,AutoProxy 作者,以个人名誉强烈建议您认真阅读并采取措施。

背景知识

网上传输的任何信息都有可能被恶意截获。尽管如此,我们仍然在网上保存着很多重要的资料,比如私人邮件、银行交易。这是因为,有一个叫着 SSL/TLS/HTTPS 的东西在保障我们的信息安全,它将我们和网站服务器的通信加密起来。

如果网站觉得它的用户资料很敏感,打算使用 SSL/TLS/HTTPS 加密,必须先向有 CA (Certificate Authority) 权限的公司/组织申请一个证书。有 CA 权限的公司/组织都是经过全球审核,值得信赖的。

发生了什么事

最近,CNNIC——对,就是那个臭名昭著的利用系统漏洞发布流氓软件的、就是那个使劲忽悠 CN 域名又突然停止域名解析的 CNNIC (中国互联网络信息中心),它——偷偷地获得了 CA 权限!在所有中文用户被隐瞒的情况下!

意味着什么

意味着 CNNIC 可以随意造一个假的证书给任何网站,替换网站真正的证书,从而盗取我们的任何资料!

这就是传说中的 SSL MITM 攻击。以前这个攻击不重要是因为攻击的证书是假的,浏览器会告诉我们真相;现在,因为 CNNIC 有了 CA 权限,浏览器对它的证书完全信任,不会给我们任何警告,即使是造假的证书!

你信任 CNNIC (中国互联网络信息中心) 吗?你相信它有了权限,会安守本分,不会偷偷地干坏事吗?
我对此有3个疑问:

  1. 某 party 对 GMail 兴趣浓厚,GFW 苦练 SSL 内功多年,无大进展。如今有了 CA,若 GFW 令下,CNNIC 敢不从否?
  2. CNNIC 当年利用所谓官方头衔,制流氓软件祸害网民。如今有了 CA,如何相信它不会故伎重演?
  3. 为了得到指定网站的合法证书,其它流氓公司抛出钱权交易,面对诱惑,CNNIC 是否有足够的职业操守?

影响范围

基本上所有浏览器的所有用户均受影响!

行动第一步:立即安全防御

在此只介绍 Firefox 浏览器的防御方法,其它浏览器的用户请自行 Google,原理类似。

  • 菜单栏:工具/编辑->首选项->高级->加密->查看证书->证书机构(Authorites)
  • 这是一个很长的列表,按照字母顺序,你应该能找到一个叫着 "CNNIC ROOT" 的记录,就是这个东西,告诉 Firefox,我们不信任它!
  • 选中 CNNIC ROOT,点击下面的“编辑”按钮,弹出一个框,应该有3个选项,把所有选项的勾都去掉!保存。
  • 还没有完,狡兔有三窟。
  • 接着往下找,有一个叫着 Entrust.net 的组,这个组里应该有一个 "CNNIC SSL" (如果没有,访问一下 这个网站 就有了)
  • 别急着下手,这回情况不一样,这个证书是 Entrust 签名的。我们信任 Entrust,Entrust 说它信任 CNNIC,所以我们就被迫信任 CNNIC SSL 了。找到 "Entrust.net Secure Server Certification Authority" 这一条,同上面一样,把3个选项的勾都去掉,保存(提示:取消了对 Entrust 的信任以后,可能会没法打开它签名的某些正常网站。至于哪个网站用了它的签名,随便试了一下,没找到例子)。
  • 最后,让我们验证一下。重启 Firefox,打开 这个这个 网站,如果Firefox 对这两个网站都给出了安全警告,而非正常浏览,恭喜,您已经摆脱了 CNNIC CA 的安全威胁!

行动第二步:治标还需治本

几天前听到这个消息的时候,我简单地、轻蔑地将 CNNIC 删除了事。可是这个周末,我忽然觉得这样很不好。因为只要它存在,始终会有大部分的用户受到威胁。和写 AutoProxy 时同样的想法:如果大部分人都处于安全威胁当中,一个人苟且偷安又有什么意义?如果不能将自由与安全的门槛降低一点点,所谓的技术又有什么好侥幸的?

所以我呼吁大家,贡献一点时间和知识,团结起来说服各浏览器取消 CNNIC 的 CA 权限。这种事不可能有公司来推动,只有我们社区。

首先推荐的是 Firefox,作为一个公益组织 Mozilla 的决策过程更为开放、更愿意听取社区的声音。Bug 476766 记录了事件的全过程。Bug 542689Mozilla.dev.security.policy 进行着现在的讨论(注意,你可以把自己添加到 Bugzilla 的 CC List 以表达你对此事的关切。但是不要随便说一些不靠谱的话,免遭讨厌。强调政治、GFW 的之类的不管用,必须就事论事。比如它在申请过程中采取欺骗、隐瞒的手段,或者申请成功后的某些行为违反了 Mozilla 的 CA 政策;比如它的属性和过往行为表明它不会忠于自己的职责,而(帮助)做出 MITM 这种 CA 共愤的事情)。

其次是 Entrust,它说它信任,导致了我们也被迫信任 CNNIC SSL。不妨 告诉 Entrust 此事很严重,因为它 错误地信任了 CNNIC,大量用户不得不删除它的 CA。如果能找到使用 Entrust 证书的网站更好。给这些网站写信,因为此次事件我们不得不删除了 Entrust 的 CA,请求他们另选别家认证。如果反响强烈,势必给 Entrust 造成很大压力。

除此之外,来 投个票吧结 果统计)!

最后,强烈建议大家,发现证书警告的时候最好直接关掉,不要轻易添加例外。证书的信任体系是一级依赖一级的,一不小心你可能就会连带信任一个不想信 任的 CA。上面用于验证的两个网站,不妨定期(每周/每月)测一测,如果哪天你发现其中的任何一个网站没有证书警告,就要注意了!

各位:
DNS 劫持已然成为常态,不要让 SSL 劫持再次普及!此事刚刚发布,尚有评议空间。待时间流逝,你我皆成温水中之青蛙!

rpmfusion.org:redhat/fedora系列RPM/yum软件包仓库

rpmfusion.org 提供了许多常用但不被包含在 Fedora/Red Hat 默认软件仓库中的软件包,比如 SMPlayer (Linux 下最受欢迎的影音播放器), aMule (Linux 下的电骡) 等等。

RPM Fusion 提供的 RPM 软件包可以供所有的 Fedora 版本及 RHEL5 使用,只需将 rpmfusion 软件包仓库配置到系统中,用户就可以简单的使用 yum 或 PackageKit 执行软件包的管理工作。

RPM Fusion 融合了 Dribble, FreshrpmsLivna 这几个软件包仓库中的内容,因此只使用 RPM Fusion 这一个软件包仓库能够为用户提供足够多的 RPM 软件包。

启用 RPM Fusion 软件包仓库

Fedora 10, 11 or 12

~]$ su -c 'rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm'

Fedora 13

~]$ su -c 'rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-rawhide.noarch.rpm'

RHEL5 及其它发行版,如 CentOS

~]$ su -c 'rpm -Uvh http://download1.rpmfusion.org/free/el/updates/testing/5/i386/rpmfusion-free-release-5-0.1.noarch.rpm'

根据你的 Linux 发行版类型,安装对应的 RPM Fusion 软件包。命令执行完成之后,可以使用使用以下命令验证 rpmfusion 软件包仓库是否安装成功:

~]$ rpm -q rpmfusion-free-release
rpmfusion-free-release-12-1.noarch

结果输出为 rpmfusion-free-releas-x-x.noarch 则说明安装成功了 :D

[来源http://lugir.com/fedora/rpmfusion-org.html]

单位/家庭无线网络安全配置教程

无线网络设备越来越便宜,很多公司和个人都开始架设了无线网络,无线网络给我们带来的便利不言而喻,但是现在最值钱的莫过于硬盘里的文件了,如果没有对无 线网络进行安全保护,那么公司内部的全部资源将暴露在外人面前,试想如果对手窃取了你辛勤劳动的成果将是多么可怕的事情。

由于无线网络先天设计的原因,因此加密一直是一个头痛的问题,不光光是我们个人和公司,我国政府和厂商也面临着这样的问题,近期进行的如火如荼的WAPI争夺战就是在为无线网络安全做的努力。

我们大多数公司的网管人员往往对于有线网络的问题了如指掌,但是对于无线网络来说就差很多了,在无线网络的知识上多数网管人员还很缺乏,若想迅速的为公司 的无线网络保驾护航,还需要学习很多内容,为此我们总结了10条业界常用的安全手段,都是一些不难的方法,但是用次方法绝对能有效的保护公司的无线网络。

1、采用端口访问技术(802.1x)进行控制,防止非授权的非法接入和访问

目前绝大多数AP和无线路由器都带有802.1x认证的功能,而且价格并不高,我们在选购的时候看好产品说明即可。

2、采用128位WEP加密技术,并不使用厂商自带的WEP密钥

目前无线产品对于加密方面做的都算到位,均可提供多种加密认证方式,但提醒用户的是,不要使用厂商自带的WEP密钥,使用128位的WEP加密技术更加安全可靠。

3、对于密度等级高的网络采用VPN进行连接

VPN是指一个公共IP网络平台上通过隧道以及加密技术保证专用数据的网络安全性,他不属于802.11标准定义;但是用户可以借助VPN来抵抗无线网络的不安全因素,同时还可以提供基于Radius的用户认证及计费。

4、对AP和网卡设置复杂的SSID,根据需求确定是否需要漫游,是否需要MAC绑定。

SSID是一个非常重要的无线网络标识,如果您起的名称过于简单诸如abc这种名称是十分不安全的,一定要将SSID名称起的复杂一点,另外根据需要决定是否需要漫游,以及是否需要MAC绑定。

5、禁止AP向外广播其SSID

SSID广播一定要禁止,这样只有知道公司SSID的用户才能进入无线局域网络,禁止广播SSID对于安全性至少增加30%

第2页:进一步增强安全 5步高级操作指南

6、修改缺省的AP密码,比如Admin

随着越来越多的家庭用户的增加,很多无线路由器背面铭牌上都印上了路由器默认的地址和用户名以及密码。有趣的是很多品牌默认的SSID是用自己品牌标识, 比如LinkSys的路由器就是Linksys,而登陆的用户名和密码多数都是admin。如果不根改用户名密码的话,公司网络及容易暴露在攻击者面前。

7、布置AP的时候要在公司办公区域外进行检查,通过调节AP天线角度和发射功率,防止AP的覆盖超出办公区域。

这一点是比较理想话的做法,通常我们无法做到,毕竟标配的都是全向天线,更换定向天线的成本不菲,而且还需要很多经验进行调试,如果有条件的企业可以考虑这点。

8、禁止员工私自安装AP,通过笔记本配置无线网卡和无线扫描软件可以进行扫描。

现在无线设备如此便宜,如果员工擅自安装AP极其容易暴露公司网络,如果私装的AP还没有进行任何加密措施,外人通过无线网络上网进行下载等活动,导致公司花钱买来的宝贵的网络带宽被别人占用。

9、如果网卡支持修改属性需要密码,要开启该功能,防止网卡属性被修改

有些高档的网卡支持属性修改加密功能,开启此功能锁定网卡,对于网关来说绝对是一件好事,网卡属性不被修改很大程度上保护了公司的网络。

10、制定详细的无线网络管理规定,规定员工不得把网络设置信息告诉公司外部人员,禁止设置p2p的Ad hoc网络结构。

无线网络的使用一定要制定一个标准,诸如对ssid的保密,对进入无线网络的密码保密等规定,另外还要禁止设置p2p的Ad hoc网络结构等,有了规定自然对网络的保护有了依据。

[转]Smarty 学习随记,很不错,值得初学参考

(06年的文章,时间比较老了,但信息还不过时)

源于: http://www.jcwcn.com/html/PHP/09_08_22_827.htm

我的个人建议,下边的文字都是SMARTY里经常用到的一些基础概念的东西! 写的非常细致,而且接近中国人的思维了,都是工作中做的总结. 但是更全的资料到SMARTY的官方论坛上去看吧!!!!!
http://www.phpinsider.com/smarty-forum/
虽然是全英文的,但是只要你能看个大概其,相信收益将会非常大,而且上边的管理员也是非常热情,可是因为是美国时间,所以一般他们活跃的时间是半夜3,4点!!

虽然很简单的东西,但是还是共享一下!!

什么是smarty及其安装

Smarty是一个php模板引擎,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法.

Smarty要求web服务器运行php4.0.6和以上版本.

smarty安装需要smarty库文件。可以去官方网站http://smarty.php.net下载。

网上讲了很多安装的教程,但是我都没有成功,所以直接把整个目录名改为smarty直接复制到了网站所在的目录下,然后打开
http://网站路径/smarty/demo/index.php,显示正常,应该算是安装成功了。

基本语法

所有的smarty标签都被加上了定界符.在smarty里,所有定界符以外的内容都是静态的,当smarty遇到了模板标签,将尝试解释他们,然后再以恰当的方式输出.

默认情况下是 {和},但它们是可定制的.定制方法是:
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';

1.注释

模板注释被*号包围,例如 {* this is a comment *}
smarty注释将不被输出.它是模板内在的注释.

2.变量
模板变量以$开头,可以包含数字,字母和下划线。
config_file变量是例外要用#变量名#的方法引用

3.函数
smarty标签输出一个变量或者调用某种函数.
在定界符内函数和其属性将被处理和输出.例如:
{funcname attr1="val" attr2="val"}.
funcname为函数的名称比如:include等,attr1,attr2为属性名,val为属性相应的值。

在模板里无论是内建函数还是自定义函数都有相同的语法.
内建函数将在smarty内部工作,例如 {if}, {section} 和{strip}.他们不能被修改.
自定义函数通过插件机制起作用,它们是附加函数,可以随意修改,自行添加.
例如 {html_options} and {html_select_date}

4.属性
静态数值不需要加引号,布尔值(真或假)也不需要引号,可以是true,on,yes或者false,off,no. 但是字符串例外.变量同样被用到了,它们也不能加引号.

5.在字符串中插入变量
只能识别数字,字母,下划线和[]的组合,如果为复杂的形式需要用``将变量隔起来。比如{func var="test $foo.bar test"} 中只能识别变量$foo,要识别$foo.bar,需要写成{func var="test `$foo.bar` test"}的格式。

6.一些保留字的显示方法
在模板中如果要将smarty的一些保留字作为语言的内容显示出来,比如显示分隔符,默认为{}的方法是: {ldelim},{rdelim} 或者{$smarty.ldelim},{$smarty.rdelim} 或者可以把{}放在{literal} .. {/literal} 中间输出。

smarty的保留变量

{$smarty}保留变量可以被用于访问一些特殊的模板变量.
以下是全部.

页面请求变量
以下是访问页面请求变量诸如get,post,cookies,server,enviroment和session变量的例子. 例如{$smarty.server.SERVER_NAME}取得服务器变量,{$smarty.env.PATH}取得系统环境变量path, {$smarty.request.username}取得get/post/cookies/server/env的复合变量。

{$smarty.now}变量用于访问当前时间戳.
可以用 date_format调节器格式化输出. 例如{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}

{$smarty.const}
你可以直接访问PHP常量. 例如{$smarty.const._MY_CONST_VAL}

{$smarty.capture}
可以通过 {capture}..{/capture}结构 截取的输出可以使用{$smarty} 变量访问.

{$smarty.config}
{$smarty}变量 可以访问已经加载的config变量.
例如 {$smarty.config.foo}就可以表示 {#foo#}.

{$smarty.section}, {$smarty.foreach}
{$smarty} 变量可以访问'section'和'foreach'循环的属性.

{$smarty.template}
显示当前被处理的模板的名字.

{$smarty.version}
显示smarty模板的版本

{$smarty.ldelim}
显示左分隔符

{$smarty.rdelim}
显示右分隔符

变量调节器
变量调节器用于变量,自定义函数和字符串.
可以使用'|'符号和调节器名称应用调节器.
变量调节器由赋予的参数值决定其行为.
参数由':'符号分开.
如果你用变量调节器调节数组变量,结果是数组的每个值都被调节.如果你想要调节器调节整个数组,你必须在调节器名字前加上@符号.
例如: {$articleTitle|@count}(这将会在输出 $articleTitle 数组里的数目)

capitalize
将变量里的所有单词首字大写. 参数值boolean型决定带数字的词是否首字大写。默认不大写

count_characters
计算变量值里的字符数.参数值boolean型决定是否计算空格数。默认不计算空格

cat
将cat里的参数值连接到给定的变量后面.默认为空。

count_paragraphs
计算变量里的段落数量

count_sentences
计算变量里句子的数量

count_words
计算变量里的词数

date_format
日期格式

第一个参数控制日期格式.
如果传给date_format的数据是空的,将使用第二个参数作为默认时间

%a - 星期几的简写

%A - 星期几的全写

%b - 月份的简写

%B - 月份的全写

%c - 日期时间06/12/05 11:15:10

%C - 世纪时间

%d - 一个月的第几号(从 01 到 31)

%D - 同 %m/%d/%y

%e - 一个月的第几号,号为单数则前面加一空格 (从 1 到 31)

%g - 世纪

%G - 世纪 [0000,9999]

%h - 同%b

%H - 24小时形式的小时(从00到23)

%I - 12小时形式的小时(从01到 12)

%j - 一年中的第几天(从 001 到 366)

%k - 24小时形式的小时,单数字前面加空格. (从 0 到 23)

%l - 12小时形式的小时,单数字前面加空格.(range 1 to 12)

%m - 月份 (range 01 to 12)

%M - 分

%n - 换行符

%p - 显示早上还是下午`am' 或 `pm'

%r - a.m. 或 p.m.形式的时间

%R - 24小时形式的时间

%S - 秒

%t - tab符号

%T - 同%H:%M:%S

%u - 用 [1,7],表示星期几

%U - 计算是该年的第几个星期,从该年的第一个星期天开始计算

%V - 计算是该年的第几个星期, 从 01 到 53, 第一个星期必须至少有4天在这一年, 星期天作为这个星期的第一天

%w - 用数字的形式表示是星期的第几天, 星期天 为 0

%W - 用数字的形式是该年的第几个星期,从该年的第一个星期一开始计算

%x - 显示日期:月/日/年

%X - 显示时间:小时:分钟:秒

%y - 不包括世纪的年份

%Y - 包括世纪的年份

%Z - 时区

%% - 输出%

其中有些有时不能正常输出。

default
默认
为空变量设置一个默认值.
当变量为空或者未分配的时候,将由给定的默认值替代输出.

escape
转码
参数值为html,htmlall,url,quotes,hex,hexentity,javascript。默认是html转码

indent
缩进
在每行缩进字符串,第一个参数指定缩进多少个字符,默认是4个字符.第二个参数,指定缩进用什么字符代替。

lower
小写
This is used to lowercase a variable.
将变量字符串小写

nl2br
换行符替换成<br />

regex_replace
正则替换
寻找和替换正则表达式.必须有两个参数,参数1是替换正则表达式. 参数2使用什么文本字串来替换

replace
替换
简单的搜索和替换字符串必须有两个参数,参数1是将被替换的字符串. 参数2是用来替换的文本

spacify
spacify是在字符串的每个字符之间插入空格或者其他的字符串. 参数表示将在两个字符之间插入的字符串,默认为一个空格。

string_format 字符串格式化
是一种格式化浮点数的方法.例如十进制数.使用sprintf语法格式化。参数是必须的,规定使用的格式化方式。%d表示显示整数,%.2f表示截取两个浮点数。

strip 去除(多余空格)
替换所有重复的空格,换行和tab为单个或者指定的字符串. 如果有参数则是指定的字符串。

strip_tags 去除所有html标签

truncate 截取
参数1,规定截取的字符数.默认是80个.
第二个参数指定在截取的那段字符串后加上什么字符.默认为...
第三个参数决定是否精确截取,默认情况下为false,则smarty不会分割单词。

upper 将变量改为大写

wordwrap 行宽约束
第一个参数指定段落的宽度(也就是多少个字符一行,超过这个字符数换行).默认80.
第二个参数指定在约束点使用什么字符(默认是换行符\n).
第三个参数决定是否精确截取字符,默认情况下是不精确截取,就是截取时不能分开单词。

内建函数
内建函数不能擅自修改。
capture
capture函数的作用是收集模板输出的数据到一个变量里,而不是把它们输出到页面.例如任何在 {capture name="foo"}和{/capture}之间的数据都被收到了由函数的名称属性指定的变量{$foo}里,或者{$smarty.capture.foo}里。如果函数没有名字属性,将使用"default".每个{capture}都必须对应{/capture},也不能嵌套使用capture函数。

config_load
引用配置文件
file是必须的,说明要包含进来的配置文件名称,section说明要加载的部分的名称,scope被处理的变量的作用域.必须是local,parent或者global.
local的意思是变量将在本模板里被加载.
parent 的意思是变量将在本模板和上级模板被加载.
global的意思是变量将应用到所有的模板.默认为local。变量是否在上级模板可视,默认为no。如果scope属性已经有了,这个值将被忽略.

foreach,foreachelse
foreach循环是选择性的section循环.用于遍历关联数组.foreach的语法比section简单的多,但是作为一个折中它只能用于简单数组.
foreach必须的参数是from和item. from变量表示需要循环的数组的名称,item表示当前元素的变量名,key表示当前关键字的变量名,name表示访问foreach属性的foreach循环名。循环可以互相嵌套,被嵌套的循环之间的名字必须是独立的.foreachelse 在from变量没有值的时候被执行

include
用来引用其他的模板。
file属性是必须的用来表示所引用模板的名字,assign表示include文件将要分配的输出的变量。你可以自行用属性名="属性值"的方式定义任意个局部变量。

include_php
用来在模板中引入php脚本。file是必须的用来表示php脚本的路径,once确定如果在模板中引用了php脚本多次,是否只装载一次。默认为true。

insert
用来包含php脚本中的函数,name是必须的,表示所插入的脚本的名称,注意如果名称是name,则包含的函数则是insert_name(),所以所有要插入的函数要有前缀insert_ 。如果用了assign属性,则insert的输出将会分配给模板变量而不会显示。 script表示要引用的脚本路径。这个程序产生的内容将不会被缓存,在每次调用该页时重新执行,适用于广告,投票,查询结果等互动的地方。

if,elseif,else
if语句和和条件同php差不多,但每个词之间必须用空格分割开。也有一些新的条件语句,列举如下:eq相等,ne、neq不相等,gt大于,lt小于,gte、ge大于等于,lte、le 小于等于,not非,mod求模。is [not] div by是否能被某数整除,is [not] even是否为偶数,$a is [not] even by $b即($a / $b) % 2 == 0,is [not] odd是否为奇,$a is not odd by $b即($a / $b) % 2 != 0

php
php标记可以让模板中能直接使用php语言。

section,sectionelse
section用来循环显示数组的数据,name和loop是必须的参数。name表示嵌套名. section 可以嵌套使用,但是名字必须各不相同。loop表示循环的次数. sectionelse在loop参数为空的输出。start用来规定循环开始的指针,如果值为负则从数组尾部计算开始的指针,默认为0.step表示循环的步数,为负则反向循环,默认为1.max设定循环的最大步数.show决定是否显示section.
section也有自己的变量处理section属性,用{$smarty.section.sectionname.varname} 来显示.

index
index用来显示当前循环的指针,从0开始.

index_prev
用来显示前一次循环的指针,从-1开始

index_next
用来显示后一次循环的指针.

iteration
显示当前循环的次数,从1开始.

first
如果当前循环为第一个循环,则值为true.

last
如果当前循环为最后一个循环,则值为true.

rownum
同iteration.

loop
显示最后一次循环的指针,可以用在section中间的任何地方,也可以用在section之后.

show
show 决定是否显示section.

total
显示总共循环的次数,可以用在section中间的任何地方,也可以用在section之后.

strip
去掉多余的空格

常规函数
assign
assign用来在执行模板时分配变量值.var,value是必须的参数.var为要分配值的变量名,value为分配的值.

counter
counter用来输出一个计数. 可以用多个计数,但是名字必须各不相同.name表示计数器名,默认为default.start表示计数的初始值,默认为1.skip计数的间隔,默认为1.direction表示计数方向,up或down,默认为up.print表示是否打印该值,默认为true.assign定义模板变量,计数器的输出将被分配到assign定义的变量中.

cycle
Cycle用来循环显示一组数值.name表示cycle名,values("值1","值2",...)表示循环显示的一组数值.print表示是否显示.advance决定是否显示下一个数值. delimiter决定value的分隔符,默认为逗号. assign定义模板变量,cycle的输出将被分配到assign定义的变量中.

debug
debug可以显示所有分配了值的变量,但是不显示模板内容,output属性决定显示的格式html或javascript,默认是html.

eval
eval用来在变量里插入变量。var是插入的变量名,assign把输出分配给一个变量。

fetch
用来取得文件内容,并输出文件内容,可以取得本地文件,http文件和ftp文件,file是取得文件的路径, assign把输出分配给一个变量。

html_checkboxes
html_checkbox用来用给定的数据创建checkbox。name表示checkbox的名称,values表示checkbox的值,output表示checkbox的显示,selected表示被选选项的值,options表示一组checkbox的值和显示,separator表示分割每个checkbox的符号,labels表示给输出添加标签,默认为true。

html_image
html_image用来为一个图片创建html标签,如果height和width不分配值将会自动生成。file是图片的路径,height,width,alt同html标签,basedir是图片相对路径开始的目录的路径,默认为服务器根目录。href定义图片的链接。

html_options
输出下拉列表,参数有name,values,output,selected,options。

html_radios
输出单选框,参数同复选框。

html_select_date
prefix定义各个下拉列表名字的前缀,默认为Date_。time决定使用的时间,默认是当前时间。start_year决定下拉列表开始的年份,可以用年份表示,也可以用与当前年份的相对年数来表示。默认是当前年份。end_year决定下拉列表结束的年份,可以用年份表示,也可以用与当前年份的相对年数来表示。默认是当前年份。display_days决定是否显示日期。display_months决定是否显示月份。display_years决定是否显示年份。month_format决定显示月份的格式,默认为%B。day_format决定显示日期的格式,默认为%02d。day_value_format决定日期值的格式,默认为%d。month_value_format决定月份值的格式,默认为%m。year_as_text决定是否将年份按文本格式输出。reverse_years决定是否反向输出各年份。field_array用来取得一组变量,可以用name[Day],name[Month],name[Year]的方式从form取得获得的值。day_size,month_size,year_size添加大小标签。all_extra,day_extra,month_extra,year_extra添加额外的属性到select或input标签。field_order决定年月日下拉列表的顺序,默认为MDY。field_separator不同下拉列表之间的分隔符,默认是\n。year_empty,month_empty,day_empty是在各下拉列表第一栏显示的内容。

html_select_time
prefix定义各个下拉列表名字的前缀,默认为Time_。time决定使用的时间,默认是当前时间。display_hours决定是否显示小时。display_minutes决定是否显示分钟。display_seconds决定是否显示秒数。display_meridian 决定是否显示上午或下午,即显示am/pm。use_24_hours 决定是否24小时制。minute_interval 决定分钟之间的间隔。second_interval 决定秒数之间的间隔。field_array用来取得一组变量,可以用name[Hour],name[Minute],name[Second]的方式从form取得获得的值。all_extra,hour_extra,minute_extra,second_extra ,meridian_extra添加额外的属性到select或input标签。

html_table
loop定义用于循环的一组数据。cols决定列的数目,rows决定行的数目,如果其中一个为空,另一个有值,则根据元素个数和有值的属性来计算另一个的值,两者的默认值为3。inner决定元素的列举方向cols则列跟着列排列,rows则行跟着行排列,默认为cols。table_attr,tr_attr,td_attr分别为table,tr,td增加标签,如果tr_attr,td_attr是数组,将会循环增加标签。trailpad用来填充最后一行没有值的单元格,默认是 。hdir决定每行元素的排列方向,从左到右right或从右到左left,默认为right。vdir决定每列的排列方向,从上到下down或从下到上up,默认为down。

math
进行数字运算操作。equation和var是必须的。equation定义运算式,可以使用的运算符有+, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt, srans and tan。var给运算变量赋值。format确定结果的格式。assign将输出赋给一个参数。

mailto
使用mailto函数能使网络蜘蛛很难获取你的email地址,但是能在网页上正常显示,因为他把email地址进行了加密处理。address是必须的,定义email地址。text是显示在页面上的文本内容,默认是email地址。encode是加密email地址的方式,可以是none,hex或javascript,默认是none。如果要把邮件发给其他的邮箱,可以用cc抄送,email地址之间用,分割。bcc则为密件抄送。subject是邮件主题。newsgroups是发表内容的新闻组,新闻组之间用,隔开。extra添加附加标签。followupto意思不知。

textformat
textformat用来格式化文本,他会去掉空格和特殊字符,和规定行宽和缩进。style规定当前的格式,indent规定缩进的位数。indent_first规定第一行的缩进。indent_char用来缩进的字符,默认是一个空格。wrap规定行宽,即一行的字符数,默认是80。wrap_char规定每行的分隔符,默认是\n。wrap_cut决定是否分割单词。assign将输出分配给变量。

常量
SMARTY_DIR
是到smarty类目录的完全路径,必须以/结束。如果没有定义,将会自动决定路径.

SMARTY_CORE_DIR
是到smarty类core文件目录的完全路径,必须以/结束。如果没有定义,将会自动定义为smarty_dir路径下面的子目录.

变量

$template_dir
默认的模板目录名,默认为"./templates".
$compile_dir
默认的编译模板目录名,默认为"./templates_c"
$config_dir
默认的config文件目录名,默认为"./configs".
$plugins_dir
默认的插件目录名,默认为"plugins".
$debugging
debugging控制台。即一个显示变量的窗口.
$debug_tpl
debug窗口的模板
$debugging_ctrl
另一种控制debugging的方法。
$autoload_filters
对所有的模板使用过滤程序,这个变量是一个数组,其中关键字是过滤的类型,值是过滤的名字。
$compile_check
每次php执行将是否查看模板的内容是否改变。

$caching
决定是否缓存文件执行生成的文件。
$cache_dir
默认的模板缓存目录名,默认为"./cache".
$cache_lifetime
缓存的模板的过期时间,以秒计算. $caching值为-1则缓存的模板永不过期.

最后我放个我用的例子.大家仅做一个参考吧!!!

<?php
error_reporting(7);

$TurnDot  =  substr(PHP_OS, 0, 3) == 'WIN'  ?  ";"  :  ":"  ;

$doc_root=$_SERVER['DOCUMENT_ROOT'];   //默认获取根路径
//$doc_root="E:/Myweb/an-cool.com/Web" ; //这里是指定路径

$lib_root=".".$TurnDot.$doc_root."/shopadmin".$TurnDot.$doc_root."/shopadmin/inc".$TurnDot.$doc_root."/".$TurnDot.$doc_root."/jpgraph/src/".$TurnDot.$doc_root."/Smarty/libs/".$TurnDot.$doc_root."/Smarty";

ini_set("include_path",$lib_root);

include("conf.global.php");  //这里是装载一个全局配置文件.

$Templates_root = $doc_root."/templates";  //定义摸版根目录
define("Templates",$Templates_root);

$templates  = isset($INFO['templates'])  ?  $INFO['templates']  :  'default'  ;

include_once('Smarty.class.php');

$tpl = new Smarty();                                                                   //建立smarty实例对象$tpl
$tpl->debugging = false;
$tpl->template_dir   = Templates."/".$templates  ;                             //设置模板目录
$tpl->compile_dir    = Templates."/".$templates  ."/templates_c";     //设置编译目录
$tpl->cache_dir      = $doc_root."/cache";                                //设置缓存目录
$tpl->cache_lifetime = 60 * 60 * 24;                                         //设置缓存时间
$tpl->cache_lifetime = 0;                                                          //设置缓存时间
$tpl->caching        = false;                                                        //这里是调试时设为false,发布时请使用true
$tpl->left_delimiter = '<{';
$tpl->right_delimiter= '}>';

$tpl->assign("template_dir",  $INFO['site_url']."/templates/".$templates ); //摸板路径
$tpl->assign("Site_Url",      $INFO['site_url']); //主站URL
$tpl->assign("LanguageIs",    $INFO['IS']); //语言包类型
$tpl->assign("HtmlTitle", $INFO['site_title']);     //TITLE内容
$tpl->assign("HtmlMeta",  $INFO['meta_keyword']);  //META内容
?>

Pages: Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 Next