PHP 附件形式的下载

发表于: PHP, Web |

当下载需要用户登录验证权限、并且可以自定义下载的文件名等情况下需要以附件形式下载文件,代码如下:
(由于 poor IE 的特殊性,需要做特别处理)

header("Content-type: application/octet-stream");
$isIE and $filename = mb_convert_encoding( $filename, 'GBK' , 'UTF-8' ); # IE 不认识UTF-8的中文文件名,所以转换为GBK编码
header('Content-Disposition: attachment; filename="'.$filename.'"'); # 备注: 文件名要做安全过滤,防止跨站攻击
echo file_get_contents($filepath);

WordPress使用固定链接后出现404错误的另一种情况

发表于: WordPress |

在导入网站数据到本地站点测试固定链接时出现了404错误,特点是首页也显示404错误,即使仅使用PATHINFO形式的URL也会出现404错误,和网上查到的大多数情况不同的是这里的mod_rewrite已经是启用的了,经过排查,原来错误很简单,常规选项里面的“”设置没有设置正确(由于是导入的数据),修改该选项为正确的URL后,固定链接就可以正常使用了。

WordPress 的“维护模式”

发表于: WordPress |

不知是什么时候起(似乎是WP2.7+),WP提供了“维护模式”,在一次升级插件失败的时候我才发现了这个维护模式,激活“维护模式”的方法为:在WP根目录创建一个名为“.maintenance”的文件(注意开头的点号),文件内容为:

<?php $upgrading = 1262304000; ?>

其中的的数字为 Unix 时间戳,可以通过 PHP 函数 time() 以及 strtotime() 获得,在这个时间戳所指定的时间以及之后的600秒中之前,WP将处于维护模式,访问任何页面都会显示“Briefly unavailable for scheduled maintenance. Check back in a minute.”。

如果你嫌计算时间太麻烦,并且想自己手工切换到非“维护模式”,可以直接使用以下代码作为“.maintenance”的文件内容:

<?php $upgrading = time(); ?>

我们还可以自定义显示的内容,只要在wp-settings.php中找到这句话的附近并修改为你想要显示的内容即可,WP2.9中,这句话位于139行左右。为“维护模式”专门设计一个页面看起来是个好主意。

彻底隐藏桌面图标

发表于: 杂谈 |

自从用了Lunchy,桌面图标就成了多余的东西,于是想要把这些图标隐藏起来,桌面上右键有一个“显示桌面图标”的选项,去掉前面的√,桌面图标就消失了,但是还是可以通过再次点击切换回来,不够彻底,于是打开组策略编辑器(gpedit.msc),在管理模板中展开到“桌面”→“Active Desktop”(如果没有该选项,可以在管理模板上面点右键→“添加删除模板”,把system.adm等添加进来即可),右侧有一个“禁用Active Desktop”,双击修改为“已启用”即可,再桌面上点右键,“显示桌面图标”菜单选项就看不见了

去除WPS个人版中的文字链接广告

发表于: 杂谈 |

找到WPS的安装目录下的插件目录,比如:

D:\Program Files\Kingsoft\WPS Office Personal\office6\addins\


然后在其中找到ifp.dll并删除即可去掉WPS菜单右侧的文字链接广告
很明显的,该文件的描述为 adplugin Module

Dreamweaver “在onLoad运行_onOpen.htm时……”问题

发表于: 杂谈 |

问题描述:

Dreamweaver 打开时出现如下错误:

在onLoad运行_onOpen.htm时,发生了以下JavaScript错误:
在文件“_onOpen”中:
onOpen is not defined

解决方法:

重新安装DW无法解决该问题,经一番Google,得解决方案如下:

关闭Dreamweaver并删除下面相应的个人配置文件夹中的缓存文件WinFileCache-***.dat或者MacFileCache-***.dat等

个人配置文件夹的位置:

根据操作系统和Dreamweaver的版本,该位置有所不同

Dreamweaver CS4:

  • Vista: C:\Users\<username>\AppData\Roaming\Adobe\Dreamweaver CS4\<language>\Configuration
  • Windows XP: C:\Documents and Settings\<username>\Application Data\Adobe\Dreamweaver CS4\<language>\Configuration
  • Mac OS X: Macintosh HD:<username>:Library:Application Support:Adobe:Dreamweaver CS4:<language>:Configuration

上述各路径中的 <username> 用户在该计算机上的账户名, <language> 指你的操作系统的语言, 该语言通常以两对字母以下划线连接的形式表示, 比如: en_US (英语), es_ES (西班牙语), fr_FR (法语), 中文的语言代码为 zh_CN , 下同

Dreamweaver CS3:

  • Vista: C:\Users\<username>\AppData\Roaming\Adobe\Dreamweaver 9\Configuration
  • Windows XP: C:\Documents and Settings\<username>\Application Data\Adobe\Dreamweaver 9\Configuration
  • Mac OS X: Macintosh HD:Users:<username>:Library:Application Support:Adobe:Dreamweaver 9:Configuration

 
Dreamweaver 8 以及更老的版本中的个人配置文件夹也在相似的位置,只是要用”Macromedia”代替”Adobe”,例如:

Dreamweaver 8 (Window XP):

  • C:\Documents and Settings\<username>\Application Data\Macromedia\Dreamweaver 8\Configuration\WinFileCache\

在 Windows 中,上面文件夹默认为隐藏,无法直接看到,你需要先修改”文件夹选项”设置”显示所有文件和文件夹”

使用 Windows 的环境变量,对于 Windows 中的 Dreamweaver CS4 , 你可以使用下面的地址快速定位到该文件夹,其它版本类同

  • %APPDATE%\Adobe\Dreamweaver CS4\zh_CN\Configuration

找到个人配置文件夹并其中的WinFileCache-***.dat或者MacFileCache-***.dat或者删除WinFileCache文件夹下的所有文件,重新打开Dreamweaver,应该会没问题了

参见:

  1. http://www.pcreview.co.uk/forums/thread-2603698.php
  2. http://forums.adobe.com/thread/429114
  3. http://forums.adobe.com/thread/494811

清理冗余文件的批处理脚本

发表于: 脚本 |

 在一个网站项目在本地做好经过测试准备上传到服务器时经常需要删除一些模版缓存文件和DW生成的_notes文件夹,于是写了如下脚本进行批量处理,tpl_c为Smarty模版缓存目录,保存为clear.bat即可

@echo off
for /D /R %%F in (tpl_c) do if exist %%F del /f /s /q %%F\*.*
for /D /R %%F in (_notes) do if exist %%F rmdir /s /q %%F

清除 tpl_c 目录下的所有文件,以及删除整个 _notes 目录,请根据需要进行修改

一个IE7的页面字符集meta标签设置问题

发表于: Web |

以UTF-8(无BOM格式编码)保存了一个网页,文档类型声明为XHTML1.1,并且添加了Content-Type的meta标签:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

用IE7打开发现空白一片,右键查看了一下原来是字符集编码被设置成默认的GB2312,改成UTF-8就正常了,但是重新打开又会变成空白,用FF3打开显示正常,百思不得其解,后来经过反复调整,发现把字符集设置的meta标签放在title标签前面就显示正常,放在title标签后面就显示空白,秉承了IE一贯的怪异风格

未在其他版本IE中进行测试

逻辑运算杂谈

发表于: 杂谈 |

逻辑运算置位速记口诀:

与0得0,与1不变;(0&0=0,1&0=0,0&1=0,1&1=1)
注:按位与用于置0查1

或1得1,或0不变;(0|1=1,1|1=1;0|0=0,1|0=1)
注:按位或用于置1查0

异1得反,异0不变。(0^1=1,1^1=0;0^0=0,1^0=1)
注:按位异或用于置反

两异不变,非得全反。(0^0^0=0,0^1^1=0,1^0^0=1,1^1^1=1;~0=1,~1=0)

短路求值:

a AND b -> a成立则执行b,相当于if(a) b;(若a则b)
a OR b -> a不成立则执行b,相当于if(!a) b;(若a则不b)

使用 GetText 实现多国语言的基本方法

发表于: C/C++ |

假定你已经安装了GetText库,首先写一个“Hello,GetText”的C程序

#include <stdio.h>

int main(int argc, char **argv)
{
	printf("Hello,GetText!\n");
	return 0;
}

我知道你肯定知道上面的代码会输出什么。

接下来开始使用gettext库,首先要加上要用到的locale.h和libintl.h两个头文件,#define _()是为了方便使用,如果不嫌打字麻烦并且看着不碍你的眼,那么你可以直接使用gettext()。然后在主函数的开始设置locale(设置为”"会使用环境设置,关于setlocale的更多信息可以参见:http://www.cplusplus.com/reference/clibrary/clocale/setlocale.html)并绑定domain,修改以后的程序是下面这个样子:

#include <stdio.h>
#include <locale.h>
#include <libintl.h>

#define _(STRING) gettext(STRING)
#define PACKAGE "HelloGetText"

int main(int argc, char **argv)
{
	setlocale(LC_ALL, "");
	bindtextdomain(PACKAGE, "locale");
	textdomain(PACKAGE);

	printf(_("Hello,GetText!n"));
	return 0;
}

然后可以编译这个程序了,当然,编译前你需要将libintl.h和对应静态库文件所在的位置加入Search Directories,以便于编译和链接,而且你要把libintl.lib(GTK for Windows中是libintl.dll.a)加到链接文件中去。

编译链接成功后运行结果,不出意外的话应该显示:

Hello,GetText!

接下来肯定是要做国际化/本地化的工作了,首先我们要生成一个pot文件:

xgettext main.c -k_ -oHelloGetText.pot

使用选项-k_表示只搜索_关键字,如果你使用的是-a选项,那么任何没有使用_()包围的字符串也会被输出到pot中,更多选项参见 xgettext –help

然后针对某一语言生成po文件,以中文为例:

msginit -lzh_CN -iHelloGetText.pot

这条命令会生成zh_CN.po文件,用你喜欢的文本编辑器编辑这个文件,要翻译的字符串是msgid下面对应的msgstr,比如:

#: main.c:14
#, c-format
msgid "Hello,GetText!n"
msgstr "你好,GetText!n"

当然,用PoEdit之类工具翻译会更方便,翻译完成之后我们需要将其编译为mo文件

msgfmt zh_CN.po -o zh_CN.mo

然后把mo文件复制到相应的LC_MESSAGE目录中,在复制前该目录需要存在,Unix-like的OS一般在/usr/share/locale/zh_CN/LC_MESSAGES/或者相对目录的locale/zh_CN/LC_MESSAGES/下,命令如下(cp的-f选项覆盖现有文件):

cp -f zh_CN.mo /usr/share/locale/zh_CN/LC_MESSAGES/HelloGetText.mo

Windows中一般将目录设置为程序运行时当前工作目录相对的locale\zh_CN\LC_MESSAGES,命令如下(copy的/y选项不提示覆盖现有文件):

copy /y zh_CN.mo locale\zh_CN\LC_MESSAGES\HelloGetText.mo

(注:这里的locale即bindtextdomain中设置的locale)

也可以在编译时就直接编译到对应目录,为防止目录不存在,先尝试创建目录,命令如下:

mkdir locale\zh_CN\LC_MESSAGES
msgfmt zh_CN.po -o locale\zh_CN\LC_MESSAGES\HelloGetText.mo

然后再运行HelloGetText程序,如果你是中文的系统,便会显示“你好,GetText!”了。

较新的文章 »