Glossword WAMP source code (NSIS)

[不指定 2007/12/29 00:05 | by ipaddr ]
// NSIS (http://nsis.sourceforge.net/)
// Glossword WAMP (http://sourceforge.net/projects/glossword/)
// Apache, MySQL and PHP are stored in archive usr.exe, directory /usr/local
// phpMyAdmin is in archive htdocs.exe, directory /htdocs/phpmyadmin
// Additionaly you need files with phrases: English.nsh and Russian.nsh
// ------------------------------------------
// English.nsh:
// LangString SECT_01 ${LANG_ENGLISH} "Glossword ${PRODUCT_VERSION}"
// LangString TXT_02 ${LANG_ENGLISH} "Thank you for installing Glossword.\r\nFor news and updates go to http://sourceforge.net/projects/glossword/"
// LangString DESC_SecGw ${LANG_ENGLISH} "Glossword program core files."
// ------------------------------------------
// install.bat
// @echo on
// cls
// SET ipath=%1
// cd "%ipath%/usr/local/apache2/bin"
// httpd.exe -k install -n Apache2_GW
// httpd.exe -k start -n Apache2_GW
// cd "%ipath%/usr/local/mysql5/bin"
// mysqld-nt.exe --install MySQL50_GW --defaults-file="%ipath%/usr/local/mysql5/bin/my-custom.cnf"
// net start MySQL50_GW
// ------------------------------------------
// uninstall.bat
// @echo off
// cls
// SET ipath=%1
// cd "%ipath%/usr/local/apache2/bin"
// httpd.exe -k stop -n Apache2_GW
// httpd.exe -k uninstall -n Apache2_GW
// net stop MySQL50_GW
// cd "%ipath%/usr/local/mysql5/bin"
// mysqld-nt.exe --remove MySQL50_GW
// ------------------------------------------
// unpack.bat
// @echo off
// usr.exe -y
// htdocs.exe -y
// del usr.exe
// del htdocs.exe
// del unpack.bat


Now you can create your own WAMP package.

; Glossword Desktop edition: Apache, MySQL, PHP
; Written by Dmitry Shilnikov (c) 2002-2007
; tty01@rambler.ru
;--------------------------------
;Include Modern UI

!include "MUI.nsh"

; replace in file with count of changes
!include "FileFunc.nsh"

;--------------------------------
;Custom variables

!define PRODUCT_NAME "Apache, MySQL, PHP"
!define PRODUCT_VERSION "Apache/2.2.4, MySQL 5.0.41-community-nt, PHP 5.2.3 for Windows"
!define DIR_SRC "."
!define THIS_DIR_INSTALLTO "Glossword-WAMP"

;--------------------------------
;General

Name "${PRODUCT_NAME}"
OutFile "glossword-wamp.exe"

;Folder selection page
InstallDir "$PROGRAMFILES\Glossword-WAMP"

;--------------------------------
;Interface Settings

!define MUI_ABORTWARNING
!define MUI_UI ${NSISDIR}\Contrib\UIs\modern.exe
!define MUI_ICON ${DIR_SRC}\install\gw_new.ico
!define MUI_UNICON ${DIR_SRC}\install\gw_remove.ico
!define MUI_FINISHPAGE_TEXT $(TXT_02)

;--------------------------------
;Pages

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

;Uninstaller pages
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

;--------------------------------
;Languages

!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"

;--------------------------------
;Installer Sections

Section "$(SECT_01)" SecGw

SetDetailsPrint textonly
DetailPrint "Installing server files..."
SetOverwrite ifnewer

DetailPrint "htdocs..."
CreateDirectory "$INSTDIR\htdocs"
CreateDirectory "$INSTDIR\htdocs\glossword"

SetOutPath "$INSTDIR"
File "usr.exe"
File "htdocs.exe"
File "unpack.bat"
File "install.bat"
File "uninstall.bat"
File "localhost.url"
File "phpinfo.url"
File "phpmyadmin.url"
File "news.url"
File "glossword-wamp224_5041_523.txt"

ExecWait '"unpack.bat"'

SetOutPath "$INSTDIR"
; change configuraiton files
DetailPrint "httpd.conf..."
ClearErrors
FileOpen $0 "$INSTDIR\usr\local\apache2\conf\httpd.conf" "r"
GetTempFileName $R0
FileOpen $1 $R0 "w"
loop1:
FileRead $0 $2
IfErrors done1
StrCmp $2 "# Created by install$\r$\n" 0 +2
StrCpy $2 "# Created by glossword-amp.exe$\r$\n"
StrCmp $2 "DocumentRoot $\"E:/usr/httpdocs/svn/Glossword Desktop/htdocs$\"$\r$\n" 0 +2
StrCpy $2 "DocumentRoot $\"$INSTDIR\htdocs$\"$\r$\n"
StrCmp $2 "ServerRoot $\"E:/usr/httpdocs/svn/Glossword Desktop/usr/local/apache2$\"$\r$\n" 0 +2
StrCpy $2 "ServerRoot $\"$INSTDIR\usr\local\apache2$\"$\r$\n"
FileWrite $1 $2
Goto loop1
done1:
FileClose $0
FileClose $1
Delete "$INSTDIR\usr\local\apache2\conf\httpd.conf"
CopyFiles /SILENT $R0 "$INSTDIR\usr\local\apache2\conf\httpd.conf"
Delete $R0
;
DetailPrint "my-custom.cnf..."
ClearErrors
FileOpen $0 "$INSTDIR\usr\local\mysql5\bin\my-custom.cnf" "r"
GetTempFileName $R0
FileOpen $1 $R0 "w"
loop2:
FileRead $0 $2
IfErrors done2
StrCmp $2 "basedir=$\"../mysql5/$\"$\r$\n" 0 +2
StrCpy $2 "basedir=$\"$INSTDIR\usr\local\mysql5\$\"$\r$\n"
StrCmp $2 "datadir=$\"../mysql5/data/$\"$\r$\n" 0 +2
StrCpy $2 "datadir=$\"$INSTDIR\usr\local\mysql5\data\$\"$\r$\n"
FileWrite $1 $2
Goto loop2
done2:
FileClose $0
FileClose $1
Delete "$INSTDIR\usr\local\mysql5\bin\my-custom.cnf"
CopyFiles /SILENT $R0 "$INSTDIR\usr\local\mysql5\bin\my-custom.cnf"
Delete $R0
;
DetailPrint "php.ini..."
ClearErrors
FileOpen $0 "$INSTDIR\usr\local\php5\php.ini" "r"
GetTempFileName $R0
FileOpen $1 $R0 "w"
loop5:
FileRead $0 $2
IfErrors done5
StrCmp $2 "extension_dir = $\"../../php5/ext$\"$\r$\n" 0 +2
StrCpy $2 "extension_dir = $\"$INSTDIR\usr\local\php5\ext$\"$\r$\n"
StrCmp $2 "session.save_path = $\"c:/temp$\"$\r$\n" 0 +2
StrCpy $2 "session.save_path = $\"$TEMP$\"$\r$\n"
FileWrite $1 $2
Goto loop5
done5:
FileClose $0
FileClose $1
Delete "$INSTDIR\usr\local\php5\php.ini"
CopyFiles /SILENT $R0 "$INSTDIR\usr\local\php5\php.ini"
Delete $R0
;
DetailPrint "install.bat..."
ClearErrors
FileOpen $0 "$INSTDIR\install.bat" "r"
GetTempFileName $R0
FileOpen $1 $R0 "w"
loop3:
FileRead $0 $2
IfErrors done3
StrCmp $2 "set ipath=%1$\r$\n" 0 +2
StrCpy $2 "set ipath=$INSTDIR$\r$\n"
FileWrite $1 $2
Goto loop3
done3:
FileClose $0
FileClose $1
Delete "$INSTDIR\install.bat"
CopyFiles /SILENT $R0 "$INSTDIR\install.bat"
Delete $R0
;
DetailPrint "uninstall.bat..."
ClearErrors
FileOpen $0 "$INSTDIR\uninstall.bat" "r"
GetTempFileName $R0
FileOpen $1 $R0 "w"
loop4:
FileRead $0 $2
IfErrors done4
StrCmp $2 "set ipath=%1$\r$\n" 0 +2
StrCpy $2 "set ipath=$INSTDIR$\r$\n"
FileWrite $1 $2
Goto loop4
done4:
FileClose $0
FileClose $1
Delete "$INSTDIR\uninstall.bat"
CopyFiles /SILENT $R0 "$INSTDIR\uninstall.bat"
Delete $R0
ExecWait '"install.bat"'
;nsExec::ExecToStack '"install.bat"'

SetOverwrite off

CreateDirectory "$SMPROGRAMS\${THIS_DIR_INSTALLTO}"
CreateShortCut "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Glossword at localhost.lnk" "$INSTDIR\localhost.url"
CreateShortCut "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Glossword development news.lnk" "$INSTDIR\news.url"
CreateShortCut "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\phpinfo().lnk" "$INSTDIR\phpinfo.url"
CreateShortCut "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\phpMyAdmin.lnk" "$INSTDIR\phpmyadmin.url"
CreateShortCut "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Apache Monitor.lnk" "$INSTDIR\usr\local\apache2\bin\ApacheMonitor.exe"
CreateShortCut "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Remove Glossword WAMP.lnk" "$INSTDIR\uninstall.exe"
CreateShortCut "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Release notes.lnk" "$INSTDIR\glossword-wamp224_5041_523.txt"

WriteUninstaller "$INSTDIR\uninstall.exe"
SectionEnd


;--------------------------------
;Descriptions

!include "${DIR_SRC}\install\English.nsh"
!include "${DIR_SRC}\install\Russian.nsh"

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecGw} $(DESC_SecGw)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

;--------------------------------
; Functions

Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

;--------------------------------
;Uninstaller Section

Section Uninstall

SetOutPath "$INSTDIR"
ExecWait '"uninstall.bat"'

SetShellVarContext current
Delete "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Remove Glossword WAMP.lnk"
Delete "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Apache Monitor.lnk"
Delete "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Glossword at localhost.lnk"
Delete "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Glossword development news.lnk"
Delete "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\phpinfo().lnk"
Delete "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\phpMyAdmin.lnk"
Delete "$SMPROGRAMS\${THIS_DIR_INSTALLTO}\Release Notes.lnk"
RMDir /r "$SMPROGRAMS\${THIS_DIR_INSTALLTO}"
RMDir /r "$INSTDIR\usr\local\apache2"
RMDir /r "$INSTDIR\usr\local\php5"
RMDir /r "$INSTDIR\usr\local\mysql5\bin"
RMDir /r "$INSTDIR\usr\local\mysql5\share"
RMDir /r "$INSTDIR\htdocs\phpmyadmin"
Delete "$INSTDIR\install.bat"
Delete "$INSTDIR\uninstall.bat"
Delete "$INSTDIR\glossword-wamp224_5041_523.txt"
Delete "$INSTDIR\localhost.url"
Delete "$INSTDIR\phpinfo.url"
Delete "$INSTDIR\phpmyadmin.url"

;RMDir /r "$INSTDIR"
SetAutoClose true

SectionEnd

官方 NSIS 插件全集简单介绍

[不指定 2007/12/28 23:41 | by ipaddr ]
Math plugin (contain examples) -- 数学函数插件,NSIS 软件已包含,这个不用说了吧,计算的时候必用。

System plugin (contain examples) -- 调用其他动态链接库(*.dll)插件,NSIS 软件已包含,超级好用,把 windows 的 API 发挥到极限。

A Plugin for controlling Internet Explorer -- 控制 IE 浏览器操作的插件,例如打开浏览器,关闭浏览器等等。

AccessControl plugin -- 存取控制插件,只适用于 Win2000 或以上。

BDE Alias -- Borland BDE 数据库别名创建修改插件(DELPHI 数据库程序安装制作的好东东)

BitTorrent downloads for NSIS -- BT 下载的插件,呵呵,作单独下载某个 BT 文件的好东西

CabDLL: Plugin to extract all the files from a cabinet (CAB) -- 从 CAB 压缩包中抽取文件的插件

Change Variable Plugin -- 可用来改变 $TEMP 的临时目录的插件,打破只能由安装程序自动选择系统 temp 路径。

ChangeRes Plugin -- 改变屏幕分辨率,颜色数,刷新率的插件。

ComPlusAdmin -- COM+ 组件的添加删除插件

CPUDesc -- 获取 CPU 相关参数的插件,例如 3DNOW, MMX 支持等等

CRC generator plugin -- 用来获取文件标准 ZIP CRC32(CRC 校验值) 的插件。

Crypto Plugin -- 用来加密的插件,算法包括 MD5, SHA1, MD2, MD4,可加密文字,文件,呵呵,绝对可以作出一个需要序列号的安装程序,即使别人有解包工具也需要懂得破解算法加密才行,否则只会得到一堆乱码字节。

Customisable MessageBox Plugin -- 可自定义消息对话框的插件,呵呵,可以作出4个按钮的消息框。

Detect Windows Version -- 检查windows系统版本的插件,在严格需要指定系统的时候有用。

Dialogs 2.3 -- 调用系统标准对话框插件,例如打开,保存等等的标准对话框。

DumpState -- 可列出安装过程中变量,堆栈里面内容的插件,用来调试之用超一流。

Enumerate CD-ROM Drives -- 列举当前可用的CD-ROM列表。

ExecDos -- 创建控制台环境运行DOS程序的插件。

Execute & Set Priority -- 以进程方式运行程序,而且可以指定运行优先级的插件。

ExLicensePage -- 扩展 License 页的插件,是否有很多 License 要用户同意才能安装呢,这个东东就是为了解决这个问题的,实现多页 License 效果。

external install file system -- 分卷安装制作的插件,用 NSIS把安装程序做到多个软盘中已经不是很困难的事了。

ExtractDLL -- 解压 compressfile.exe 压缩的文件,在用 NSISdl 插件制作在线升级程序时有用。只支持 zlib 算法。

ExtractDLLEx Plugin (LZMA containerfile decompressor) -- 同上,支持 LZMA 算法。这个插件和上面那个插件出现的目的是为了,在线升级程序多数人都要把升级文件打包以减少体积,而 NSIS 并没有属于自己的解压插件,所以不得不把一些没有精简过代码的解压程序来作为客户端的解压工具,这是不可取的,所以这两个插件随之出现。

Find Process By Name -- 查找进程的专用插件,呵呵,这下不用自己用API函数来互斥来知道进程是否运行了。

FloatOP plugin -- IntOp 只能操作整数,该插件就是为了解决浮点数运算问题的。

Help Support Plugin -- 这是一个可以令到你点击一个按钮或按“F1”就可以通过关键字调出相关帮助中的相关章节的插件。

InetLoad -- 一个类似 NSISdl 的下载插件,支持 http 和 ftp ,基于 MS WinInet API,对于在线升级程序制作有一定用处。

InstallOptionsEx 2.4.2 beta 1 -- 扩展自原 InstallOptions 插件,更多控件支持 Animation(动画), ProgressBar(进度条), TrackBar(位置调节), IPAddress(IP 输入), DateTime(日期时间编辑框), MonthCalendar(日历), UpDown(上下调节), TreeView(树形结构视图框)。还有其他改进功能。

Internet plugin -- 网络功能插件,取本地计算机的主机名,IP 地址,还有 urls 的状态代码,例如:404 就代表 urls 不存在。

IPTest -- 检测 IP 段中的可用地址。可用来检测一个IP是否存在并可用。

KillProcDLL Manual -- 清除进程的插件,既然能检测出阻碍安装过程的进程当然少不了这个清除进程的东东啦。

Lazarus Registration Component -- 可添加一个输入序列号和注册码的页面,呵呵,想做一个要输入注册码的安装程序吗?这个插件就是用来这样做的。

Marquee (text scroll) -- 可以在 INSTFILES 页面(安装程序进度列表页面)的列表中添加滚动条的插件。还可以改列表的颜色,字体,边框等等

MD5 plugin -- md5 插件,著名的校验算法插件,用来检验一个文件的版本是否对应的最好插件。

MSIBanner - Plugin to display a dialog with a progress bar -- 一个仿效标准 MSI 安装程序(Windows Installer) banner 的界面插件。

new directory selection page -- 安装目录选择页面插件,能检测是否满足需要空间大小。

NSIS Debugger -- NSIS 调试器插件,用来调试脚本用的。

NSIS-Date 1.0 -- 取本地时间的插件,在 API 函数中也能做到,但是这个插件是推荐用的,因为它包括了处理例如夏令时这类的时间问题。

NSISLog -- 写安装日志的插件,用来记录安装过程,从而准确删除安装过的文件的好插件。

nsRandom -- 能产生随机数的插件,某些时候,这个插件是很有用的。

nsScreenshot -- 保存屏幕截图为一个BMP文件的插件。可全屏幕截图或指定窗口截图

nsWeb: A plugin to display the web browser control in a custom page -- 可以插入一个支持 HTML 的页面插件,也可以以弹出窗口的方式显示,做广告的东东。

NxS MSI LoaderDlg -- MSIBanner 只是个仿效插件,所以就产生了这个插件,要求完美的人总会有的。

ODBC Configuration Manager -- ODBC 数据源配置管理插件。制作数据库安装程序的又一个好东东。

Perl plugin - v. 1.3 -- 这是一个允许在 NSIS 安装程序中执行 Perl 代码的插件。

Plugin Tester (or Wrapper) -- 这是个能使用命令行参数调用其他插件中函数的插件。

Processes plug-in -- 查找和清除进程(包括设备驱动)的插件。(适用:WinNT,Win2K,WinXP,Win2003 Server)

Python Interpreter -- 这是一个允许在 NSIS 安装程序中执行 Python 代码的插件。

Refresh Desktop Plugin -- 这是一个刷新桌面的插件,有时候程序安装了桌面图标,为什么用户看不见呢,那就需要这个插件了。

Service Control Manager plugin (install services and drivers on NT/2K/XP) -- 安装服务程序(包括查看服务程序状态,停止,运行操作)的插件。适用:NT/2K/XP

ShellLink plugin -- 这是允许你读取一个快捷方式文件(*.lnk)的插件,那样你就可以知道这个快捷方式的情况,例如指向哪个文件等等。

System hardware detection -- 检查系统硬件信息的插件,目前能检测 CPU 名称,CPU 速度,系统内存大小,显卡名称,显卡内存大小。

System Tray NotifyIcon creator plugin -- 可以产生一个右下角区域中图标的插件,超级酷,估计没有人做过这样的安装程序吧。^__^,可以自定义图标,自定义文字和安装进度百分比。

TAPI Helper Plugin -- 用来检测 modem 的 ID 和名称的插件。

ToolTips -- 可以设置安装程序的提示窗口(例如按钮的帮助提示,正常情况下是浅黄背景色)的前景和背景颜色。

TTF Font Name Plugin -- 能够获取 TTF 字体在计算机中显示的名字的插件,这是个方便制作安装字体的插件。

UnTGZ -- 这是一个解压缩插件。(*.tgz/*.tar.gz)

UserMgr Plugin -- 这是一个能够管理用户帐号和用户组的插件。例如创建计算机用户或计算机用户组等的功能。

VPatch -- 用来制作补丁的插件,能够根据前后版本的不同,根据差异制作出体积非常小的补丁安装程序。

Write arbitrary sized, runtime assigned binary data to Registry -- 在注册表中写入二进制值的插件,限制最大 511 字节。

xtInfoPlugin - System Information Plugin -- 检查系统信息插件,安装程序文件名(ie. Setup.exe)  安装程序放置路径(ie. D:\SetupFiles) 安装程序全路径含文件名(ie. D:\SetupFiles\Setup.exe)  计算机当前语言(ie. Danish, English, German, etc.)  .NET Framework IDs(ie. 1.0, 1.1, 2.0, etc.)  .NET Framework 版本(ie. 1.0.3705, 1.1.4322, etc.)  Internet Explorer IDs(ie. 4.01, 5.0, 5.01, 6.0, etc.)  Internet Explorer 版本(ie, 5.00.2920.0000, 6.00.2600.0000, etc.)  Windows IDs(ie. 95, 98, me, xp, nt3, nt4, 2003, etc)  Windows 版本(ie, 5.1.2800, etc.)  MDAC IDs(ie. 2.5)  MDAC 版本(ie. 2.50.4403.9)  OLEDB IDs(ie. 2.5) OLEDB 版本(ie. 2.50.4403.8)  Windows Service Pack IDs(ie, 1, 2a, 6a, etc.)

ZipDLL -- 解压 Zip 压缩文件的插件。

以上插件都是体积非常小的,务求做到了体积小,功能全的效果,以目前来说,NSIS 是安装程序小且功能齐全多样的安装程序制作软件。

关于nsis概述

[不指定 2007/12/28 23:41 | by ipaddr ]

NSIS是 win32安装、卸载系统

NSIS 是“Nullsoft 脚本安装系统”(Nullsoft Scriptable Installation System)的缩写,
它是一个免费的 Win32 安装、卸载系统,采用了简洁高效的脚本方式。
它本来是一个由 Nullsoft 创建并用于作为 Winamp 及其插件发布的系统,
但现已被上百个应用程序所应用,作为它们进行程序发布的工具。
NSIS 创建的安装程序可以进行安装、卸载、设置系统设置、解压文件等等。
几乎可以做所有事情。因为它基于脚本文件,所以你可以完全控制你的安装程序的每个部分。
它的脚本语言支持变量、函数、字串处理,就像是一个普通的程序语言 - 但其仅设计用来创建安装程序。
即使它有所有这些功能,NSIS 仍然是好用的最小的安装系统。在默认选项下,它仅用 34KB 的开销。
NSIS 安装程序不会因为解压缩而令人烦扰, 它会告诉用户“请稍候”。它们开始这点后就会完成工作。

官方网站: http://nsis.sourceforge.net

让Pound支持HTTPS

[不指定 2007/12/28 16:49 | by ipaddr ]

1. What's Pound
http://www.apsis.ch/pound

The Pound program is a reverse proxy, load balancer and HTTPS front-end for Web server(s). Pound was developed to enable distributing the load among several Web-servers and to allow for a convenient SSL wrapper for those Web servers that do not offer it natively. Pound is distributed under the GPL - no warranty, it's free to use, copy and give away.

2. How to Use HTTPS
首先,生成证书:
openssl req -x509 -newkey rsa:1024 -keyout ipaddr.pem -out ipaddr.pem -days 365 -nodes
其次,增加一个Listen,在Pound.cfg里配置如下:
ListenHTTPS
 Address 0.0.0.0
 Port 443
 Cert "/usr/local/etc/ipaddr.pem"
End


注意,一定要加双引号.

Eclipse首度推出PHP开发工具

[不指定 2007/12/24 22:39 | by ipaddr ]

本部在渥太华的Eclipse Foundation宣布了Eclipse PHP 开发工具项目1.0 版本的可用性。

这个Eclipse PDT是一套开发工具和框架,可以提高PHP开发者的效率。PHP这一脚本语言被广泛用于Web开发而且可以植入HTML。

Eclipse PDTEclipse推出的第一个针对PHP开发者社区的项目,据估计PHP开发者约有四百万。而Eclipse这一开源平台拥有大约230万使用者,主要用于Java和C/C++的开发。

Eclipse Foundation官方表示,PDT 1.0的发布允许PHP开发者使用基于Eclipse的IDE,也因此将增加整个Eclipse社区的人数。“这将是PHP和Eclipse的双赢。”Forrester Research 的分析师Jeffrey Hammond说,“Eclipse更多地被认为是优秀的JavaIDE,这也将更好地改变人们的这种观念。”

“我们已经收到来自PHP社区对此的巨大反响,”Eclipse PDT 项目领导Yossi Leon说,“到目前我们已有超过40,000 下载的PDT,反馈非常积极。”

Zend Technologies 和IBM在去年向Eclipse提议了这个PDT。该PHP PDT标准基于Eclipse Public License,是用Java实现的一套插件到Eclipse 平台的工具。

PDT 1.0的主要特性包括:Context sensitive editors:语法突出显示,代码辅助和代码折叠;综合Eclipse 项目模型:可使用File和Project Outline Views和一个新的PHP Explorer View来检查;支持PHP 代码的增量调试;允许开发人员和独立软件供应商能够轻松地扩展PDT 来创建新的和有趣的PHP 开发工具。

MediaWiki 用户权限管理[转]

[不指定 2007/12/20 16:25 | by ipaddr ]

      安装MediaWiki之后,发现权限设置是完全开放的,需要做一些设置,例如禁止匿名用户编辑内容等等,但程序上却没有提供设置选项。网上查询了一下,却发现设置方法各有各的说法,没法,只有突破万难,到官方网站上查询一下,发现这MediaWiki的确是管理功能各方面多有不足。

      希望设置MediaWiki的用户权限,对匿名用户的设置可以从修改LocalSettings.php入手,下载该文件,然后按照希望设置的用户权限,在文件中插入对应的设置语句,存储后再上传回去就可以了。通过下面介绍的设置方法,可以阻止匿名用户注册,又或者阻止他们编辑,要求注册后才能够编辑,还可以设定注册前匿名用户可以查看那些页面。而在设置新用户的注册之后,管理人员仍可通过特殊页面手动为其他人创建用户。而用户的权限,则可以通过特殊页面内的User rights management进行管理。

LocalSettings.php用户权选设置相关选项

阻止新用户注册
1.5.x
$wgGroupPermissions['*' ]['createaccount'] = false;

注意: 阻止新用户注册,此时管理员可以到特殊页面上的用户登录页面(Special:UserLogin)里,输入希望为其建立帐户的某人的用户名与电子邮件地址,然后点击通过eMail(by email)按钮递交,系统将创建帐号并将随机生成的密码发送到指定email里。

设置匿名用户权限
1.5.x
$wgGroupPermissions['*' ]['createaccount'] = false;
$wgGroupPermissions['*' ]['read'] = true;
$wgGroupPermissions['*' ]['edit'] = false;

设置匿名用户可读内容
1.5.x
$wgWhitelistRead = array( "Main Page", "Special:Userlogin" );
$wgGroupPermissions['*' ]['read'] = false;

注意:具体需要对应自己的站点链接,而对于多字节语言的MediaWiki,例如中文首页链接index.php?title=%E9%A6%96%E9%A1%B5,这首页中文字符PHP可能无法正确解码。需要利用urldecode()函数转换一下,写为:

$wgWhitelistRead = array( urldecode("%E9%A6%96%E9%A1%B5") ;

Apple 确实为 iPhone 应用的开发定了条与众不同的道路--如 Jobs 大嘴巴所说--iPhone 上八成不再有什么第三方 native code 了,唯有 web app 才是 iPhone 第三方应用的正道--不过我猜如果哪个 ISV 面子够硬的话还是能有 SDK 来写 native 应用的 

Apple 的开发者网站 Developer Connection 上已经推出了 iPhone 部分。只有一个内容,就是 Web Development for iPhone。按照 Apple 的设想和许诺,开发者能够写出和 iPhone 内置应用在外观和功能上差不多的第三方程序–这是暗示内置程序亦是 web app 呢还是只是夸耀 apple 提供给第三方的开发能力使外人也能写出和内置的 native 程序同样等级的软件?这些第三方程序能与 iPhone 内置应用和服务无缝集成--包括拨打电话,发送 email 和在 Google Maps 上显示位置。

我想这种安排相比暴露一堆 API 的好处是:
- 引导了开发者把重心放到设计有创意的产品上,开发真正创新的有竞争力的应用,而不是继续鸡毛蒜皮的小修补,才是 iPhone 最需要的–大家可对 Windows Mobile 上 500 个第三方日历程序心有余悸?谁让 Microsoft 恨不得把自家牙缝里的东西都写进 MSDN 呢。对易用性大师 Apple 来说,暴露 API 似乎没有太多现实意义–出自这帮这帮家伙之手的 iPhone 内置应用基本没什么余地/缺陷留给第三方开发者填充或者弥补了,所以,你们不需要 OS 或者某种传统 framework 的 API 来再次开发,再所以,你们还是打起精神,为编写真正配得上 iPhone 的 cool app 整装待发吧。
- 再者,web app 开发好歹也算在标准接口上工作,绝大多数相关技术都是开放的,开发 iPhone 需要的参考资料–xml,html,javascript,rfc 里的协议等等等等–差不多全是 ISO,IEEE 等的标准。design house 为一百个手机写他妈的一百个的 phonebook 的黑暗日子总算有个头了– 哦,又忘了,iPhone 根本没打算让你为他重写 phonebook。

ADC 的 iPhone 开发准备内容只有两节:WebKit (或者 Safari,随便你) 和 Development Guidelines。WebKit 的内容不依 iPhone 的开发早就有了,不表。和其他手持系统上的开发不同,iPhone 上没有什么鸟 SDK 和 host 上的模拟器,如果说有的话,那 SDK 就是所有 web 开发相关标准–因为这是和 iPhone 打交道的接口,而模拟器就是 host 上的 Safari 啦,要不 Jobs 费劲地移植个 Safari Windows 版干嘛。
Guideline 是一对一和 iPhone 挂钩的东西,需要编写应用时阅读参考。不过先打个招呼,基于你的视角和观点,你会觉得 iPhone 上开发应用程序“居然沦落到”或者“终于进化到”这样的地步:If you are a seasoned web developer, there are probably just a few refinements you can make to ensure that your site looks great and works best on iPhone。

早先说了,在 Apple 的选择下,没有必要有类似 API 列表的 reference manual 了,因为 html,css 和 javascript 等内容本来就是开放的,所以只需说明应用与 iPhone 时的注意事项。
按 Apple 的表述,iPhone 的 Safari 和桌面系统 Safari 使用一样的 WebKit--这话其实言之不详,似是而非,虽然我们宁愿已是精确表述。换做老式应用开发,我们只需要知道系统底层机制的描述,再有文档可以查阅 API 变化(比如有无增减,参数类型含义有无变更)即可,而所谓使用同一 WebKit 并不明确,因为 WebKit 至少包含 WebCore 和 JavaScriptCore 两部分,细节颇多,随便挑个 DOM 对象比比,都有可能不同。

对开发者甚至一般 iPhone 用户来说,最重要的是,如 guideline 里一句话所说,It’s tempting to think that using an iPhone is like using a computer. But it isn’t. 体现在用户交互上,表现很明显。

通常的网页–其实是我们的电脑了–当然只考虑到最常用的交互设备是鼠标键盘等,iPhone 的输入设备–手指–在精确度,可识别性乃至可产生的 event 上不同于鼠标。guideline 上为此专门提供了 “Know Which Events You Can Handle” 和 “Design for Double Tap.”两节内容。不过当然记住,在 iPhone 那光滑性感的表面上游走的两根手指可没法实现什么复制粘贴,拖放和选中;另外,手指是有宽度的,设计过于密集的交互对象(比如网页上的超链接)会让人吐血的。

既然是些 Web app,那相关标准就要随时能涌上心头了,iPhone 伟大的 WebKit 引擎支持的标准“应该”和桌面 Safari 一样,包括:
* HTML 4.01
* XHTML 1.0
* CSS 2.1,部分 CSS 3.xx
* JavaScript 1.4, 包括 DOM 支持
* AJAX 技术, 包括 XMLHTTPRequest
又因为 Apple 让 iPhone 上的 WebKit 和桌面一样,所以 iPhone 会另类地不支持 WML (Wireless Markup Language),不过支持 XHTML mobile profile。开发适合 iPhone 浏览的页面和开发适用于通常浏览器的页面有很多详细之处,如果感兴趣,ADC 里也列出了相关参考资料。

下面,终于是有点入题的内容了–怎么实用 iPhone 上的服务。
电话:
1-408-555-5555
吐血,也可以理解,一切都是协议。这下好了,你连炫耀一下知道 MO call,MT call 的机会都没了。
Safari 也可以自动把一串数字解释成电话号码。

至于 mail 和 google map,和通常网页也无区别啦:mailto: 协议以及通常的 google map url 就行了。

在编写为 iPhone 优化的页面是,再一个参考是 Safari 发送的 agent 字符串:
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
和桌面平台的 Safari 很像,但是多了
platform 描述:(iPhone; U; CPU like Mac OS X; en)
mobile 版本:Version/3.0 Mobile/1A543a Safari/419.3

在使用 CSS 时,要考虑到 iPhone 只支持 screen –你没看错哈–而不支持 print 和 handheld media query–这些都是 CSS3 的特性。所以,编写 iPhone 优化的页面时,可以这样引用 css 文件:

使用 only 关键字。这样也不会影响其他浏览器。
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]