天啊,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内容
?>

php识别图像类型为image/pjpeg格式,pjpeg是什么?

调试一套php系统,突然发现数据库里记录的jpg格式的图片附件,类型字段显示为附件image/pjpeg,很惊异,之前从来没有见过,还以为 是程序哪里出错了,在源程序里查找image/pjpeg,结果没有这样的字符串,于是google一下,相关的资料不是非常多,就网上查到的信息整理如 下:

image/pjpeg究竟是什么,与image/jpeg有什么区别?

image/pjpeg对应.jfif文件,image/jpeg对应.jpg、.jpe、.jpeg文件。
JFIF文件格式(JPEG文件交换格式,   JPEG   File   Interchonge   Format,是 progressive JPEG 的缩写)。JFIF文件格式只是将一种图像格或环绕JPEG压缩的一种简单方法,它们没有其他的更多功能。
JPEG文件格式(Joint   Photographic   Experts   Group(联合图像专家组))是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。 尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。

英文原文:What is progressive JPEG?

一个错误的说法:

有人说IE下上传jpg 会被服务器端程序识别为image/pjpeg格式,但firefox则显示为正常的jpg,

“原因是ie会把 jpg、jpeg翻译成image/pjpeg,png翻译成image/x-png 。而火狐则很标准:jpg、jpeg翻译成image/jpeg,png翻译成image/png”

其实这种说法不对 的,虽然IE很烂,但这里却不是它的错,这些图片严格的讲确实是image/pjpeg格式的,firefox没有这样识别而已。

PHP与image/pjpeg

PHP GD库对image/pjpeg格式的图片支持不是非常完美,或者说是要求太严格,有时会出现这样的错误

Warning: imagecreatefromjpeg(): ‘/tmp/lalala’ is not a valid JPEG file in /path/upload.php on line 1

出现这个Warning是由于GD函数库检测发现是非标准JPEG图片格式导致。

解决方法,如果PHP版本 > 5.1.3,可以在php.ini中增加:
gd.jpeg_ignore_warning = 1

在 MIME 类型中,图像方面有这样两种: image/jpeg 与 image/pjpeg ,GD库只认识前者的传统格式,后者是 progressive JPEG 的缩写。

php官方BUG讨论区http://bugs.php.net/bug.php?id=29878

[2004-08-28 19:00 UTC] cyleriggs at kc dot rr dot com

Description: ------------ When calling ImageCreateFromJPEG() on a valid jpeg file it fails and i get errors such as the following in my php error log: <code> [28-Aug-2004 05:21:29] PHP Warning: imagecreatefromjpeg() [<a href='function.imagecreatefromjpeg'>function.imagecreatefromjpeg</a>]: '/usr/local/apache2/htdocs/pictures/Before Dad Went to Iraq/IMGP0008.JPG' is not a valid JPEG file in /home/www/pictures/index.php on line 43 </code> however as can be seen through this link the file is a valid jpeg file: http://cyle.dyndns.org/pictures/Before Dad Went to Iraq/IMGP0008.JPG Also i have a memory_limit of 25mb so this cannot be the issue. Something that might help: http://cyle.dyndns.org/phpinfo.php I am writing this code for a picture gallery browser, while most pictures load, about 10% of my pictures cannot be opened through ImageCreateFromJpeg(), however it is always the same pictures that cannot be opened. The only trend i can see is that this does not appear to be happening on small jpegs. The page that I am having problems with is http://cyle.dyndns.org/pictures/index.php. The source code for this is at http://cyle.dyndns.org/pictures/index.phps. Expected result: ---------------- The image would be loaded and code continue to execute and i get the error message described above. Actual result: -------------- Sometimes images load sometimes images cannot be opened.

[2004-08-29 08:22 UTC] pajoye@php.net

Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions. 

Thank you for your interest in PHP.

Your jpeg file is not valid. PHP could not take care of each possible failures in image files. Desktop softwares could. Fix your image and replace it.

--Pierre

[2004-09-30 17:05 UTC] paul at gslip dot com

I disagree. I have used my code successfully on montypics.com until the upgrade to php 5.0.1. I now get exactly the same results as the original poster.
Images that worked fine on previous versions now do not. I have a sample image that can be provided. I also have code I can share with the PHP team although I cannot post it here as it is lengthy and copyrighted.

[2004-10-05 00:34 UTC] cyleriggs at kc dot rr dot com

After playing around with the images themselves i have found that converting them from jpeg to png then back to jpeg fixed the problem and yielded no quality loss. I used the linux tool set called ImageMagick to do this. I wrote a short perl script to go through all my images and fix them. Other than this i have found no other way of stopping this. one interesting fact though is that while converting the images with the imagemagick utility it complained about some corruptions, however it was still able to open them fine and convert them. Maybe PHP is being too picky about the images that it opens as despite a few corrupted bytes EVERYthing was able to open these images except for PHP.

[2004-10-05 05:33 UTC] derick@php.net

PHP only reads non-coprrupted files - there is no bug here.

[2004-10-06 23:18 UTC] cyleriggs at kc dot rr dot com

Okay, so how about a feature suggestion than, i think that there should be the option in GD that allows you to try and open images that have a few corrupted bytes. If other programs can open them just fine what would be the harm in allowing programmers to choose to live with the corruptions?

[2004-10-07 05:12 UTC] derick@php.net

Corrupted files are invalid, and may crash an application if attempted to use. That's why we will not implement that. (Actually, it's not a PHP issue either, it has to do with how libgd handles opening files).

[2004-10-12 13:23 UTC] paul at gslip dot com

Has anyone at php verified that the images are corrupt? In what way are they corrupt?
Here's what I know:
1- These images were supported with no issues whatsoever before I 'upgraded' to php 5.x

2- Every other piece of software I own, including Windows Image Viewer, Photoshop, Paint, IE, Netscape, Imagemagick, etc. open the files with no complaint.

3- A visual inspection of the files on the byte level show nothing out of the ordinary.

That all leads me to believe that the images are not corrupt and that PHP or GD has a bug.

Please, stop being so stubborn and at least look at the problem. I can show you hundreds of examples of where this is happening on the web. Just do a google search for 'is not a valid JPEG file in' to see for yourselves how many sites are having this issue.

I suspect there's some new twist on the JPEG format that new digital cameras are using ,or something along those lines, that GD and PHP just aren't yet up to speed with.

Let's get this solved folks.

[2006-02-05 15:09 UTC] pajoye@php.net

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.

Thank you for the report, and for helping us make PHP better.

You can now allow the jpeg decoder to be more tolerant/weak:

error_reporting(E_ALL);
// 0 is the current behavior
ini_set('gd.jpeg_ignore_warning', 1);
$im = imagecreatefromjpeg($file);

Php 5.1.3+ will contain the fix.

Enable Root login on Fedora 12/fedora 12 下启用root用户登录X

linux fedora 12 下 root用户通过x界面登录默认是禁用的,网上查询启用方法,google中文里搜索,说是修改/etc/pam.d/gdm文件,注释掉一行就可以,但修改过却还不能登录的,于是在google.com里搜索,看老外们怎么讲查到下面一篇文章,里面说要修改两个文件,

/etc/pam.d/gdm

/etc/pam.d/gdm-password

这样才可以,明确指出不像Ubuntu那样。

原文如下,作者说直接修改root为其它随意的字符串,如test,但或许注释会更好。

http://www.linuxreaders.com/2009/11/19/root-login-on-fedora-12/

Root Login on Fedora is not as easy as Ubuntu Root Login, here you need to modify two files to get root access.

You need to modify content of following files

/etc/pam.d/gdm

/etc/pam.d/gdm-password

You’ll find pam_succeed_if.so user != root quiet in above files, replace root with anything e.g test

I replaced root with test & was able to login to system using root.

OR Comment the entire line.

[Comment the entire line recommend!]

php调试利器 xdebug

php调试利器 xdebug

xdebug官方网站http://xdebug.org/

在Linux下编译安装XDebug

引用
tar -xzf xdebug-2.0.0RC3.gz
cd xdebug-2.0.0RC3
/usr/local/php/bin/phpize
./configure --enable-xdebug
cp modules/xdebug.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/

注:/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/不同的PHP版本路径不同,也不一定要放在该路径,可以在zend_extension_ts中自行指定xdebug.so所在位置。

Windows安装:
1. 登录www.xdebug.org,在下载您需要的版本,建议下载Windows binaries,免去手工编译,根据你的php版本选择其中的PHP5.2或5.3的,下载php_xdebug-xxxx.dll文件;建议下载稳定版,而不是beta版,当然beta版一般也不会出问题.
2. 将下载的php_xdebug-xxx.dll放到C:\php5\ext目录,重命名为php_xdebug.dll;路径根据您的php安装路经不同可能有所有同.
3. 编辑php.ini,加入下面几行:
extension=php_xdebug.dll
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir="J:\php_xdebug_output"
xdebug.profiler_output_dir="J:\php_xdebug_output"
后面的目录“J:\php_xdebug_output”为你想要放置Xdebug输出的数据文件的目录,可自由设置。
4. 重启Apache (或iis);
可以专门写几行有错的代码,看看出错信息显示不何不同。
再用var_dump()输出一个数组,看看显示是不是友好多了,至少不用查看html源文件才能看到清晰的数组结构.

linux 下媒体播放器mplayer+kmplayer

在fedora12下安装mplayer总是有很多问题,好几年前就用Linux,但仅仅是安装一下,草草用用,并没真正深入学习,很多地方都是一知半解,最近在fedora12下安装了官方svn最新的mplayer,但总是出一些这样那样的问题,装了kmplayer,设置播放核心为mplayer,很多问题都没有了,而且kmplayer在很多操作方面更容易上手一点,不你mplayer那样让人感觉到怪怪的。

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