HTTP/1.1 302 Moved Temporarily Connection: close 问题原因之一

2

分类 : 网站技术 | 发表时间 26-05-2010

一位兄弟的网站,玩b2b网站的,程序用的是destoon,本来他要用utf-8版本的,说是官方推荐用这个,但utf-8版本,对于在国内使用的一般用户而言,这实在不是一个很好的推荐,因为他们使用flashfxp之类的ftp工具,在线编辑代码时,就会让本来utf-8的编码文件,变换为utf-8 +rom,这样的编码会让一些老版本的浏览器,浏览网页时,变形。

在我的建议下,他换用了destoon的gbk版本,但他在安装程序后,在他的空间上,直接保存网站配置时,总是提示以下错误:

HTTP/1.1 302 Moved Temporarily Connection: close
Date: Wed, 26 May 2010 14:52:55 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-Powered-By: PHP/5.2.1
Content-Type:text/html;
charset=gbk
cache-control: private

搜索网上,有网友说是php版本的问题,但这个php版本应该一直正常;不存在所谓的bug什么的,只听说php5.2.3有一个bug;百思不得其解,真是郁闷。

问他要了他空间的提供商在线联系方式,加QQ问问情况,一般情况下,向这些空间提供商在线客服,问服务器配置,是要犯大忌的,但在Linker的谆谆诱导下,技术客服还是透露了,服务器上安装有星外一流过滤系统,唉,这万恶的过滤系统,坏过多少事?

Linker在该空间使用者之一的身份,要求技术客服,把这个虚拟主机的星外过滤暂时去掉,获知去掉后,再在destoon程序后台,保存配置文件,不再出现“HTTP/1.1 302 Moved Temporarily Connection: close ”错误,再让技术客服恢复星外过滤,再次保存网站配置,也不再出现“HTTP/1.1 302 Moved Temporarily Connection: close ”错误,真是一个奇妙的问题。

不管如何,“HTTP/1.1 302 Moved Temporarily Connection: close ”原因之一,经过测试证明,有“星外一流监控系统”的问题所在,只不过这是destoon和星外之间的一点冲突,可能是destoon后台的网站配置保存时,个别代码引起了星外的过滤,才会引起这样的问题。

看来destoon应该要注意一下了。

最新完整版PHP配置文件翻译

2

分类 : 编码知识 | 发表时间 01-07-2009

这个php的配置文件,在网上传播得比较多,或者说是一种版本乱传播,或者是多种版本在交互传播,因此有些不太准确,今天看到有网友新近翻译了一个全新的,很完整,收拾出来给大伙看看,虽然大多数配置php时,不用看这个翻译了,但有了这个也不多余,参考交流下。

=========================================================

[PHP]

;;;;;;;;;;;
; 警告 ;
;;;;;;;;;;;
; 此配置文件是对于新安装的PHP的默认设置.
; 默认情况下,PHP使用此配置文件安装
; 此配置针对开发目的,并且*不是*针对生产环境
; 基于一些安全方面的考虑,在你的网站上线之前,请考虑使用php.ini-recommended
; 以及在线文档 http://php.net/manual/en/security.php.

;;;;;;;;;;;;;;;;;;;
; 关于 php.ini ;
;;;;;;;;;;;;;;;;;;;
; 此文件控制了PHP行为的很多方面. 为了让PHP能够读取它
; 必须命名为 ‘php.ini’. PHP 在其当前工作目录,由PHPRC环境变量指定目录
; 以及由编译时指定的目录(按此顺序)查找此文件
; 在Windows环境下, 编译时目录是Windows目录.
; 在命令行模式下查找php.ini的目录可以被-c参数覆盖.
;
; 此文件的语法非常简单.
; 空行和由分号开始的行会被忽略(你可能已经猜到了).
; 段的开头(例如 [Foo]) 同样会被悄悄忽略
; 即使在将来他们可能会有其他作用.
;
; 使用以下语法来设定指令:
; directive = value
; 指令 = 值
; 指令名称是 *大小写敏感* – foo=bar 和 FOO=bar 是不同的.
;
; 值可以是字符串,数值,PHP常量 (例如 E_ALL 和 M_PI),
; INI 常量 (On, Off, True, False, Yes, No 和 None) 或者一个表达式
; (例如 E_ALL & ~E_NOTICE), 或者带引号的字串 ("foo").
;
; 在INI文件中的表达式只能使用逻辑运算和圆括号:
; | 逻辑或
; & 逻辑与
; ~ 逻辑非
; ! 取反
;
; 逻辑标志可以使用1,On,True或者Yes来打开.
; 也可以使用0, Off, False 或者 No来关闭.
;
; 在等号后面不写任何内容代表了一个空字符串
; 或者使用 None 关键词:
;
; foo = ; 将foo设置成一个空字串
; foo = none ; 将foo设置成一个空字串
; foo = "none" ; 将foo设置成字串 ‘none’
;
; 如果你在值中使用了常量, 并且这个常量属于一个动态加载的扩展模块
; (不论是PHP扩展还是Zend扩展),
; 那你只能在加载这些扩展 *之后* 使用这些常量.
;
;
;;;;;;;;;;;;;;;;;;;
; 关于这个文件 ;
;;;;;;;;;;;;;;;;;;;
; 在php.ini-dist 文件中所有的值都相当于内建的默认值
; (就是如果没有使用php.ini, 或者如果你删除了这些行,
; 就和内建的默认值一样).

;;;;;;;;;;;;;;;;;;;;
; 语言选项 ;
;;;;;;;;;;;;;;;;;;;;

; 打开在Apache下的PHP脚本语言引擎
engine = On

; 打开Zend Engine兼容模式(PHP 4.x)
zend.ze1_compatibility_mode = Off

; 允许 <? 标签. 否则,只有 <?php 和 <script> 标签被认为是PHP脚本.
; 注意: 尽可能避免在开发可重新发布的程序或者库的时候使用简略标签,或者在不受你控制的服务器下发布,
; 因为简略标签可能不被目标服务器支持.为了可移植性, 可重新发布的代码, 请不要使用简略标签
short_open_tag = On

; 使用ASP风格 <% %> 标签.
asp_tags = Off

; 浮点数中数值的有效位数(浮点数精度).
precision = 12

; 强制2000年兼容 (可能引起不兼容浏览器的问题)
y2k_compliance = On

; 输出缓冲允许在你发送了body内容之后发送header(包括 cookies)
; 代价是稍稍减缓了PHP输出层
; 你可以在运行时调用 output buffering 函数来打开此功能
; 你也可以将此指令设置为On来对所有文件打开输出缓冲
; 如果你想将这个缓冲区限制到特定大小 – 你可以使用最大的字节数来代替’On’,来作为这个指令的参数 (例如 output_buffering=4096).
output_buffering = Off

; 你可以将所有你脚本输出的内容重定向到指定函数.
; 例如, 如果你设置 output_handler 到 "mb_output_handler",
; 字符编码会被转换成为指定的编码..
; 设置任何的输出处理句柄会自动打开输出缓冲.
; 注意: 如果想编写可移植脚本就不要依赖此INI配置
; 取而代之的是, 明确的使用 ob_start() 来设置输出处理句柄.
; 使用此ini指令可能引起问题,除非你很清楚的理解脚本正在做什么.
; 注意: 你不能同时使用 "mb_output_handler" 和 "ob_iconv_handler"
; 并且你不能同时使用 "ob_gzhandler" 和 "zlib.output_compression".
; 注意: 如果使用zlib.output_handler指令开启zlib输出压缩, 该指令必须为空.
;output_handler =

; 使用zlib库对输出进行压缩
; 对此选项的有效值是 ‘off’, ‘on’, 或者字节数 (用来压缩的缓冲大小 , 默认是 4KB)
; 注意: 结果的chunk大小可能由于压缩对象的大小而不同.
; PHP输出块的大小一般压缩之后每个大小时几百个字节.
; 如果你希望藉由一个大块的堆大小来获取更好的性能, 需要额外的打开 output_buffering 选项.
; 注意: 你必须使用 zlib.output_handler 来替代标准的
; output_handler, 否则输出可能会有问题.
zlib.output_compression = Off
;zlib.output_compression_level = -1

; 这里激活 zlib.output_compression 之后,你无法再指定额外的输出处理.
; 这个设置和 output_handler 一样,但是处理顺序不同.
;zlib.output_handler =

; 立即刷新告知 PHP 让输出层在每次输出块之后立刻自动刷新.
; 这和每次调用print()或者echo()函数以及任何一种HTML块后调用flush()一样.
; 打开此选项会严重导致性能下降,一般只有用于调试情况下才建议打开.
implicit_flush = Off

; 如果反序列器找到一个可以作为示例的未定义类.未序列化的回调函数会被调用(使用未定义的类名作为参数),
; 如果特定的函数未被定义或者如果此函数没有包含/实现丢失的类,则会发生一个警告.
; 如果只有你真想要实现类似的回调函数,才设定此入口.
unserialize_callback_func=

; 当浮点和双精度被序列化后,浮点号后由 serialize_precision 指定存储精确度的有效位数.
; 默认值是当浮点数被反序列解码后,数值仍旧相同.
serialize_precision = 100

; 是否打开强制通过引用传递参数给函数
; 此方法被反对并且很有可能在未来版本的PHP/Zend中不再被支持.
; 被孤立的指定的方法是参数应该在函数被声明的时候按照引用传入.
; 你被鼓励来尝试上述方法并关闭此选项来确保你脚本在今后的新版本中仍旧可以正常工作 ( 每次你使用此特性的时候会受到一个警告
; 并且参数会传值而不是传引用).
allow_call_time_pass_reference = On

;
; 安全模式
;
safe_mode = Off

; 默认情况下,安全模式在打开文件时,使用UID来比对检测.
; 如果你只想使用GID做宽松的比对,
; 打开 safe_mode_gid.
safe_mode_gid = Off

; 当 safe_mode 被打开, 此目录下包含的文件和子文件夹的UID/GID 检测会被绕过.
; (目录必须在 include_path 中存在或者必须在包含时使用全路径)
safe_mode_include_dir =

; 当 safe_mode 被打开, 只有在 safe_mode_exec_dir 中定义的可执行文件能够通过exec函数组打开执行.
safe_mode_exec_dir =

; 设定某些的环境变量可能成为潜在的安全隐患.<
br />; 此指令包含一个逗号分隔的前导列表.
; 在安全模式中, 用户可能只能改变符合这里所给出前导字符的变量.
; 默认情况下,用户只能改变以PHP_开头的变量(例如. PHP_FOO=BAR).
;
; 注意: 如果此指令为空, PHP会允许用户修改任何环境变量!
safe_mode_allowed_env_vars = PHP_

; 此指令包含了一个用逗号分隔的环境变量列表, 用户无法通过 putenv() 函数来修改列表中的环境变量.
; 这些变量即便已经在 safe_mode_allowed_env_vars 所设定的列表中,也会被被保护不允许修改.
safe_mode_protected_env_vars = LD_LIBRARY_PATH

; 如果设置了open_basedir, 将会限制文件操作只能是此指令下的目录和子目录.
; 此指令对于每目录或者每虚拟主机配置文件最有意义. 此指令* 不会 *受安全模式开或者关的影响.
;open_basedir =

; 此指令允许你为了安全原因关闭指定的函数.
; 它接受以逗号分隔的函数名的列表.
; 此指令* 不会 *受安全模式开或者关的影响.
disable_functions =

; 此指令允许你由于安全原因关闭指定的类.
; 它接受以逗号分隔的类名的列表.
; 此指令* 不会 *受安全模式开或者关的影响.
disable_classes =

; 语法高亮模式的色彩. 任何在 <span style="color: ???????"> 中可接受的值都可以使用.
;highlight.string = #DD0000
;highlight.comment = #FF9900
;highlight.keyword = #007700
;highlight.bg = #FFFFFF
;highlight.default = #0000BB
;highlight.html = #000000

; 如果打开, 即便用户放弃了的请求也会被执行完成.
; 在执行可能被用户打断或者浏览器超时所中断的请求时打开此选项.
; ignore_user_abort = On

; 指定PHP使用的实际路径的缓冲. 对于PHP打开很多文件来处理很多文件操作的系统上,应该增加此值.
; realpath_cache_size=16k

; 对于给定文件或者目录的缓冲真实路径信息的缓冲保留秒数. 对于很少修改文件的系统可以考虑增加此值.
; realpath_cache_ttl=120

;
; 其他
;
; 考虑到PHP可能被其所安装的服务器上暴露的事实(例如. 被web服务器作为头部信息的签名).
; 任何情况下这虽然不是安全威胁, 仍有可能暴露在你的服务器上是否正在使用PHP.
expose_php = On

;;;;;;;;;;;;;;;;;;;
; 资源限制 ;
;;;;;;;;;;;;;;;;;;;

; 每个脚本最大执行秒数
max_execution_time = 30
; 每个脚本用来分析请求数据的最大时间
max_input_time = 60
; 最大输入变量的嵌套级别
;max_input_nesting_level = 64
; 每个脚本能够使用的最大内存数量 (128MB)
memory_limit = 128M

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 错误处理和记录 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 错误报告时一个位. 对每一个数值取或可以得到最终的报告级别
; E_ALL – 所有错误和警告 (不包含 E_STRICT)
; E_ERROR – 致命的运行时错误
; E_RECOVERABLE_ERROR – 几乎致命的运行时错误
; E_WARNING – 运行时警告 (非致命错误)
; E_PARSE – 编译时语法错误
; E_NOTICE – 运行时提醒 (这些警告常常由你代码中的bug导致, 但是也有可能是有意的行为 (例如, 使用一个未初始化的变量并依赖于其会被自动初始化成为一个空字符串的事实)
; E_STRICT – 运行时提醒, 打开后PHP会给出针对你代码的最易移植和最好向后兼容性的建议
; E_CORE_ERROR – PHP初始化启动时的致命错误
; E_CORE_WARNING – 在PHP初始化时发生的警告 (非致命错误)
; E_COMPILE_ERROR – 致命的编译时错误
; E_COMPILE_WARNING – 编译时警告 (非致命)
; E_USER_ERROR – 用户产生的错误信息
; E_USER_WARNING – 用户产生的警告信息
; E_USER_NOTICE – 用户产生的提示信息
;
;例子:
;
; – 显示所有错误, 除了提示以及代码标准警告以外
;
;error_reporting = E_ALL & ~E_NOTICE
;
; – 显示所有错误,除了提示以外
;
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;
; – 只显示错误
;
;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
;
; – 显示出了提示以及代码标准警告之外的错误
;
error_reporting = E_ALL & ~E_NOTICE

; 打印输出错误 (作为输出的一部分). 对于生产环境的网站来说,
; 强烈建议你关闭此选项, 使用错误日志来替代 (详情参考下面内容).
; 在一个生产环境下的web站点打开display_errors可能泄漏安全信息给最终用户, 例如web服务器的文件路径,你数据库的结构或者其他信息.
;
; display_errors可用的值:
;
; Off – 不显示任何错误信息
; stderr – 将错误信息输出到STDERR (只有 CGI/CLI 格式下有效!)
;
;display_errors = "stderr"
;
; stdout (On) – 输出错误信息到STDOUT上
;
display_errors = On

; 即使 display_errors 打开后,PHP启动序列中发生的错误也不会显示.
; 强烈建议你保持 display_startup_errors 关闭状态, 除非在排错
display_startup_errors = Off

; 将错误输入到日志文件 (服务器指定的log,stderr或者error_log (以下指定))
; 和上面提到的一样, 强烈建议你在生产环境的web站点下使用错误日志来代替错误显示.
log_errors = Off

; 设定log_errors的最大长度. 在 error_log 关于源的信息也计算在内.
; 默认是1024, 设置为0可以不限制任何最大长度.
log_errors_max_len = 1024

; 不要记录重复的信息.必须出现在同样文件的相同行之中的才被认为是重复信息,除非 ignore_repeated_source 被设为 true.
ignore_repeated_errors = Off

; 当忽略重复消息时忽略消息的来源. 当此设置打开后,不再记录来自不同文件或者不同行的相同消息.
ignore_repeated_source = Off

; 如果此选项被设置为 Off, 那么内存泄漏不会被显示 (不论在stdout还是在日志中).
; 此项仅在debug编译模式下有效, 并且错误报告需要包含 E_WARNING
report_memleaks = On

;report_zend_debug = 0

; 在$php_errormsg中保存最后一次错误/警告消息 (逻辑值).
track_errors = Off

; 关闭在错误信息中所包含的HTML标签.
; 注意: 永远不要再生产环境中使用此特性.
;html_errors = Off

; 如果html_errors 设置为On, 则PHP产生可点击的错误信息,点击后会跳转到描述此错误或者引起此错误的函数具体信息的页面.
; 你可以从 http://www.php.net/docs.php 下载一份PHP手册的副本
; 并且将 docref_root指向你放置本地拷贝的以’/'开头的.
; 你同时必须指定文件文件的包含点的扩展名.
; 注意: 永远不要再生产环境中使用此特性.
;docref_root = "/phpmanual/"
;docref_ext = .html

; 在输出的错误信息前加上的字符串.
;error_prepend_string = "<font color=#ff0000>"

; 在输出的错误信息之后加上的字符串.
;error_append_string = "</font>"

; 将错误记录到指定文件.
;error_log = filename

; 将错误记录到 syslog (NT系统上的Event Log在Windows 95下不可用).
;error_log = syslog

;;;;;;;;;;;;;;;;;
; 文件处理 ;
;;;;;;;;;;;;;;;;;
;
; 注意 – track_vars 在PHP 4.0.3 中总是打开的

; 在PHP产生的URL中用来分隔参数的符号.
; 默认是 "&".
;arg_separator.output = "&amp;"

; PHP用来将URL分割输入到变量中的分隔符.
; 默认是 "&".
; 注意: 所有包含在指令内的字符都会被认为是分隔符!
;a
rg_separator.input = ";&"

; 此指令描述了PHP注册GET, POST, Cookie, 环境 和 内置变量的顺序 (各自使用G, P, C, E 和 S , 一般使用 EGPCS 或 GPC). 注册使用从左往右的顺序, 新的值会覆盖旧的值.
variables_order = "EGPCS"

; 是否将EGPCS变量注册成为全局变量.
; 如果你不希望由于用户数据而导致你脚本的全局变量变得凌乱,你需要关闭此选项
; 这个一般随着 track_vars 打开 – 在这种情况下你能够通过$HTTP_*_VARS[]存取所有的GPC变量.
;
; 你应该努力写好脚本这样就不必打开register_globals
; 如果代码不是经过详细的斟酌,那将变量作为全局使用可能很容易导致潜在的安全漏洞.
register_globals = Off

; 是否注册老形式的输入数组, HTTP_GET_VARS 和相关数组
; 如果你不使用他们,建议为了提高性能关闭他们.
register_long_arrays = On

; 此指令让PHP确认是否申明 argv&argc 变量 (这些变量会包含GET信息).
; 如果你不使用这些变量,为了提升性能应该关闭此选项.
register_argc_argv = On

; 当打开此项, SERVER 和 ENV 变量将在第一次被使用时而不是脚本一开始时创建(运行时)
; 如果这些变量在脚本中没有被使用过, 打开此项会增加一点性能.
; 为了使此指令有效,PHP指令 register_globals, register_long_arrays,
; 以及 register_argc_argv 必须被关闭.
auto_globals_jit = On

; PHP可以接受的最大的POST数据大小.
post_max_size = 8M

; Magic quotes
;

; 针对GET/POST/Cookie数据打开Magic quotes.
magic_quotes_gpc = On

; 针对实时产生的数据打开Magic quotes, 例如从SQL获取的数据, 从exec()返回的数据等等.
magic_quotes_runtime = Off

; 使用 Sybase 风格的 magic quotes (使用"来引导’替代\’).
magic_quotes_sybase = Off

; 在任何PHP文档之前或之后自动增加文件.
auto_prepend_file =
auto_append_file =

; 和 4.0b4一样, PHP 总是使用默认在头 Content-type: 的编码输出字符.
; 将其设置为空可以禁用发送字符集.
;
; PHP内建默认为text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"

; 总是填充 $HTTP_RAW_POST_DATA 变量.
;always_populate_raw_post_data = On

;;;;;;;;;;;;;;;;;;;;;;;;;
; 路径和目录 ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"

; PHP页面的根路径, 只有非空时有效.
; 如果PHP没有使用FORCE_REDIRECT来编译, 如果你将php作为CGI运行在任何web服务器下(除了IIS)的话,你必须设置doc_root
; 针对安全问题查看文档. 一种替代方案是使用下面的cgi.force_redirect
doc_root =

; PHP使用/~username打开脚本的目录,非空时才有效.
user_dir =

; 可加载的扩展(模块)的目录位置.
extension_dir = "./"

; 是否启用 dl() 函数. dl() 函数无法正常的在多线程服务下运行, 例如IIS或者Zeus, 并在在这些服务软件下会自动禁用.
enable_dl = On

; 在绝大多数web服务器下,cgi.force_redirect 对于提供安全执行PHP作为CGI来说是很有必要的.
; 没有配置的情况下,PHP会默认打开此项.
; 你可以在这里关闭此项并且自己承担风险
; **你可以在IIS安全的关闭此项,事实上,你必须关闭此项.**
; cgi.force_redirect = 1

; 如果 cgi.nph 被打开,就会强制CGI在每个请求时发送Status: 200.
; cgi.nph = 1

; 如果cgi.force_redirect被打开,并且你没有在Apache或者Netscape(iPlanet) web服务器下运行,
; 你也许需要设置一个环境变量名让PHP来查找让其可以获取后继续执行. 设置此变量可能引起安全问题, 在设置之前请先了解可能引起的后果.
; cgi.redirect_status_env = ;

; cgi.fix_pathinfo 为CGI提供 *真实* PATH_INFO/PATH_TRANSLATED 支持.
; PHP的预处理行为是设置 PATH_TRANSLATED 到 SCRIPT_FILENAME, 并且不去猜测 PATH_INFO 是什么.
; 想获取关于 PATH_INFO 更多的信息, 查看 cgi 规范.
; 将此值设置为1会引起PHP CGI修正它的路径来符合规范.
; 设置为0会引起PHP类似前面的行为. 默认是1. 你应该修正你的脚本来使用 SCRIPT_FILENAME 而不是 PATH_TRANSLATED.
; cgi.fix_pathinfo=0

; 在IIS下的FastCGI (在基于 WINNT 的操作系统下) 支持莫让呼叫客户端的安全令牌的能力.
; 这使得IIS能够定义其下运行的安全上下文.
; 在Apache下的mod_fastcgi 目前不支持此特性 (03/17/2002)
; 如果运行在IIS下设置为1. 默认是0.
; fastcgi.impersonate = 1;

; 关闭通过 FastCGI 连接的日志
; fastcgi.logging = 0

; cgi.rfc2616_headers 配置选项告知 PHP 当发送HTTP响应代码时使用什么类型的头
; 如果设置为0,PHP发送被Apache支持的 Status: 头信息.
; 当设置为1, PHP会发送 RFC2616 兼容的头信息.
; 默认为0.
; cgi.rfc2616_headers = 0

;;;;;;;;;;;;;;;;
; 文件上传 ;
;;;;;;;;;;;;;;;;

; 是否允许HTTP文件上传.
file_uploads = On

; 对于HTTP上传文件的临时文件目录 (如果没有指定则会使用系统默认).
;upload_tmp_dir =

; 允许上传的最大文件大小.
upload_max_filesize = 2M

;;;;;;;;;;;;;;;;;;
; Fopen 包装 ;
;;;;;;;;;;;;;;;;;;

; 是否允许将URL作为文件 (例如 http:// 或者 ftp://) .
allow_url_fopen = On

; 是否允许 include/require 将URL作为文件 (例如 http:// 或者 ftp://) .
allow_url_include = Off

; 定义匿名ftp密码 (你的电子邮件地址)
;from="john@doe.com"

; 定义 User-Agent 字符串
; user_agent="PHP"

; 定义基于流的socket接口的超时时间 (秒)
default_socket_timeout = 60

; 如果你的脚本必须处理从 Macintosh 系统来的文件,
; 或者你运行在一台Mac并且需要从unix或者win32系统上处理文件,
; 设置此标志会引起PHP自动检测这些文件的EOL字符,这样fgets() 和 file() 就可以不用管文件的来源而直接处理了.
; auto_detect_line_endings = Off

;;;;;;;;;;;;;;;;;;;;;;
; 动态扩展 ;
;;;;;;;;;;;;;;;;;;;;;;
;
; 如果你希望扩展自动加载, 使用下列语法:
;
; extension=modulename.extension
;
; 例如,在Windows系统上:
;
; extension=msql.dll
;
; … 或者在 UNIX 下:
;
; extension=msql.so
;
; 注意: 这里应该只是模块的名字;
; 这里不需要模块的目录信息.
; 使用上面的 extension_dir 指令来指定扩展的位置.

; Windows Extensions
; 注意:已经内建了ODBC支持,所以不需要针对ODBC的dll.
; 注意:许多DLL文件位于 extensions/ (PHP 4) 或者 ext/ (PHP 5)目录中,和分割的PECL DLL下载在一起 (PHP 5).
; 确定设置了正确的 extension_dir 指令.

;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_exif.dll
;extension=php_fdf.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_ifx.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
;extension=php_mbstring.dll
;extension=php_mcrypt.dll
;extension=php_mhash.dll
;extension=php_mime_magic.dll
;extension=php_ming.dll
;extension=php_msql.dll
;extension=php_mssql.dll
;extension=php_mysql.dll
;extension=php_mysqli.dll
;extension=php_oci8.dll
;extension=php_openssl.dll />;extension=php_pdo.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mssql.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_pspell.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_soap.dll
;extension=php_sockets.dll
;extension=php_sqlite.dll
;extension=php_sybase_ct.dll
;extension=php_tidy.dll
;extension=php_xmlrpc.dll
;extension=php_xsl.dll
;extension=php_zip.dll

;;;;;;;;;;;;;;;;;;;
; 模块设置 ;
;;;;;;;;;;;;;;;;;;;

[Date]
; 定义date函数使用的默认时区
;date.timezone =

;date.default_latitude = 31.7667
;date.default_longitude = 35.2333

;date.sunrise_zenith = 90.583333
;date.sunset_zenith = 90.583333

[filter]
;filter.default = unsafe_raw
;filter.default_flags =

[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1

[sqlite]
;sqlite.assoc_case = 0

[xmlrpc]
;xmlrpc_error_number = 0
;xmlrpc_errors = 0

[Pcre]
;PCRE 库反响追踪限制.
;pcre.backtrack_limit=100000

;PCRE 库递归限制.
;请注意如果你设置此项到一个很高的值, 你可能耗尽所有的可用的进程堆并且最终弄宕PHP(由于到达了操作系统强制的堆大小的限制).
;pcre.recursion_limit=100000

[Syslog]
; 是否定义不同的syslog变量 (例如. $LOG_PID,
; $LOG_CRON, 等等.). 关闭此选项对性能有益.
; 在运行时, 你可以调用 define_syslog_variables() 函数来定义这些变量.
define_syslog_variables = Off

[mail function]
; 针对Win32.
SMTP = localhost
smtp_port = 25

; 针对Win32.
;sendmail_from = me@example.com

; 针对Unix. 可以支持参数 (默认: "sendmail -t -i").
;sendmail_path =

; 强制额外的指定的参数被作为扩展参数传送给sendmail执行文件.
; 这些参数总是替代mail()函数的第五个参数值, 甚至是在安全模式内.
;mail.force_extra_parameters =

[SQL]
sql.safe_mode = Off

[ODBC]
;odbc.default_db = 目前无效
;odbc.default_user = 目前无效
;odbc.default_pw = 目前无效

; 允许或阻止持久连接.
odbc.allow_persistent = On

; 在重用前检查连接是否可用.
odbc.check_persistent = On

; 持久连接的最大数目. -1 意味着没有限制.
odbc.max_persistent = -1

; 最大连接数 (持久 + 非持久). -1 意味着没有限制.
odbc.max_links = -1

; 长字段处理. 返回变量的字节数. 0 意味着略过.
odbc.defaultlrl = 4096

; 二进制数据处理. 0 意味着略过, 1按照实际返回, 2 转换到字符.
; 查看 odbc_binmode 和 odbc_longreadlen 的文档来获取针对 uodbc.defaultlrl 和 uodbc.defaultbinmode的解释
odbc.defaultbinmode = 1

[MySQL]
; 允许或阻止持久连接.
mysql.allow_persistent = On

; 持久连接的最大数目. -1 意味着没有限制.
mysql.max_persistent = -1

; 最大连接数 (持久 + 非持久). -1 意味着没有限制.
mysql.max_links = -1

; mysql_connect()默认的端口号. 如果没有设置, mysql_connect() 会使用 $MYSQL_TCP_PORT
; 或者 位于/etc/services的 mysql-tcp 入口或者编译时定义的MYSQL_PORT 值(按照此顺序查找).
; Win32 只会查找MYSQL_PORT值.
mysql.default_port =

; 对于本地MySQL连接的默认socket名称. 如果为空, 则使用MySQL内建默认值.
mysql.default_socket =

; mysql_connect() 的默认host值(在安全模式中不会生效).
mysql.default_host =

; mysql_connect() 的默认user值(在安全模式中不会生效).
mysql.default_user =

; mysql_connect() 的默认password值(在安全模式中不会生效).
; 注意在此文件中保存密码一般来说是 *糟糕* 的主义.
; *任何* 使用PHP的用户可以执行 ‘echo get_cfg_var("mysql.default_password")
; 并且获取到此密码! 而且理所当然, 任何有对此文件读权限的用户都可以获取到此密码.
mysql.default_password =

; 连接超时的最大时间 (秒) , -1 意味着没有限制.
mysql.connect_timeout = 60

; 追踪模式. 当 trace_mode 被打开 (=On), table/index 扫描的警告和SQL错误会被显示出来.
mysql.trace_mode = Off

[MySQLi]

; 最大连接数. -1 意味着没有限制.
mysqli.max_links = -1

; mysqli_connect()默认的端口号. 如果没有设置, mysql_connect() 会使用 $MYSQL_TCP_PORT
; 或者 位于/etc/services的 mysql-tcp 入口或者编译时定义的MYSQL_PORT 值(按照此顺序查找).
; Win32 只会查找MYSQL_PORT值.
mysqli.default_port = 3306

; 对于本地MySQL连接的默认socket名称. 如果为空, 则使用MySQL内建默认值.
mysqli.default_socket =

; mysqli_connect() 的默认host值(在安全模式中不会生效).
mysqli.default_host =

; mysqli_connect() 的默认user值(在安全模式中不会生效).
mysqli.default_user =

; mysqli_connect() 的默认password值(在安全模式中不会生效).
; 注意在此文件中保存密码一般来说是 *糟糕* 的主义.
; *任何* 使用PHP的用户可以执行 ‘echo get_cfg_var("mysqli.default_password")
; 并且获取到此密码! 而且理所当然, 任何有对此文件读权限的用户都可以获取到此密码.
mysqli.default_pw =

; 允许或阻止持久连接.
mysqli.reconnect = Off

[mSQL]
; 允许或阻止持久连接.
msql.allow_persistent = On

; 持久连接的最大数目. -1 意味着没有限制.
msql.max_persistent = -1

; 最大连接数 (持久 + 非持久). -1 意味着没有限制.
msql.max_links = -1

[OCI8]
; 打开使用外部认证的授权连接 (OCI_SYSOPER, OCI_SYSDBA)
;oci8.privileged_connect = Off

; 连接: 每个进程的持久OCI8连接的最大数, -1 意味着没有限制.
;oci8.max_persistent = -1

; 连接: 一个进程允许保持一个空闲持久连接的最大秒数.
; -1意味着空闲持久连接会永远被保持.
;oci8.persistent_timeout = -1

; 连接: 当oci_pconnect() 检测一个连接是否有效时每次发起ping之间必须通过的秒数.
; 当设置为0后, 每个oci_pconnect() 会发起一个ping. Using -1 完全关闭ping.
;oci8.ping_interval = 60

; 调优: 此选项打开声明缓冲(statement cache), 并且指定缓冲多少声明. 使用0关闭声明缓冲.
;oci8.statement_cache_size = 20

; 调优: 打开声明预取(statement prefetch) 并且设置自动在声明执行后被取到行的数量.
;oci8.default_prefetch = 10

; 兼容性: 设置为On 意味着 oci_close() 不会关闭 oci_connect() 和 oci_new_connect() 的连接.
;oci8.old_oci_close_semantics = Off

[PostgresSQL]
; 允许或阻止持久连接.
pgsql.allow_persistent = On

; 总是在 pg_pconnect() 时检测断开的持久连接.
; 自动重置特性会引起一点开销.
pgsql.auto_reset_persistent = Off

; 持久连接的最大数目. -1 意味着没有限制.
pgsql.max_persistent = -1

; 最大连接数 (持久 + 非持久). -1 意味着没有限制.
pgsql.max_links = -1

; 是否忽略 PostgreSQL 后端通告消息.
; 通告消息记录会需要一点开销.
pgsql.ignore_notice = 0

; 是否记录 PostgreSQL 后端通告消息.
; 除非 pgsql.ignore_notice=0, 否则模块无法记录通告消息
pgsql.log_notice = 0

[Sybase]
; 允许或阻止持久连接.
sybase.allow_persistent = On

; 持久连接的最大数目. -1 意味着没有限制.
sybase.max_persistent = -1

>; 最大连接数 (持久 + 非持久). -1 意味着没有限制.
sybase.max_links = -1

;sybase.interface_file = "/usr/sybase/interfaces"

; 显示出的消息最小严重程度.
sybase.min_error_severity = 10

; 显示出的消息最小严重程度.
sybase.min_message_severity = 10

; 兼容老版本PHP 3.0的模式.
; 如果设为 on, 会引起 PHP 自动绑定结果记录的类型到Sybase的类型,而不是将他们全部按照字符串处理.
; 此兼容模式可能不会永久存在, 所以最好尝试在你代码中需要的地方作出必要的修改, 然后关闭此选项.
sybase.compatability_mode = Off

[Sybase-CT]
; 允许或阻止持久连接.
sybct.allow_persistent = On

; 持久连接的最大数目. -1 意味着没有限制.
sybct.max_persistent = -1

; 最大连接数 (持久 + 非持久). -1 意味着没有限制.
sybct.max_links = -1

; 显示出的错误最小严重程度.
sybct.min_server_severity = 10

; 显示出的消息最小严重程度.
sybct.min_client_severity = 10

[bcmath]
; 所有bcmath函数的小数位数
bcmath.scale = 0

[browscap]
;browscap = extra/browscap.ini

[Informix]
; 对于 ifx_connect() 的默认host (不会在安全模式被应用).
ifx.default_host =

; 对于 ifx_connect() 的默认user (不会在安全模式被应用).
ifx.default_user =

; 对于 ifx_connect() 的默认password (不会在安全模式被应用).
ifx.default_password =

; 允许或阻止持久连接.
ifx.allow_persistent = On

; 持久连接的最大数目. -1 意味着没有限制.
ifx.max_persistent = -1

; 最大连接数 (持久 + 非持久). -1 意味着没有限制.
ifx.max_links = -1

; 如果设为 on, select 声明返回 text 段的内容而不是它的id.
ifx.textasvarchar = 0

; 如果设为 on, select 声明返回 byte 段的内容而不是它的id.
ifx.byteasvarchar = 0

; 固定长度字符列的尾部空格会被截去. 可能对 Informix SE 用户有帮助.
ifx.charasvarchar = 0

; 如果设为 on, text 和 byte 段会被dump到一个文件而不是在内存中保留它们.
ifx.blobinfile = 0

; NULL会被作为一个空字符串返回, 除非被设为1. 如果设为1, NULL会被作为字符串’NULL’返回.
ifx.nullformat = 0

[Session]
; 用来存储/获取数据的处理方法.
session.save_handler = files

; 传送到save_handler的参数. 在使用文件的情况下, 这里是数据文件被保存的路径.
; 注意: Windows 用户必须改变此值来使用PHP的会话函数.
;
; 和在 4.0.1一样, 你可以定义如下路径:
;
; session.save_path = "N;/path"
;
; 这里的 N 是一个整数. 使用此参数会在目录内建立一个N层深度的子目录用来保存session文件,
; 而不是将所有session文件保存在同一个/path目录内.
; 这对你或当你的操作系统在一个目录内保存太多文件时出现问题很有帮助.
; 并且对于处理大量session的服务器提供更高的效率.
;
; 注意 1: PHP不会自动创建目录结构. 你可以使用在ext/session目录内的脚本来创建目录结构.
; 注意 2: 如果你选择使用子目录来保存session,请检查下面关于垃圾回收的配置段
;
; 文件存储模块默认使用600模式来创建文件,在使用中你可以改变此选项
;
; session.save_path = "N;MODE;/path"
;
; 这里的MODE由8进制来表示. 注意这里不会覆盖进程的umask.
;session.save_path = "/tmp"

; 是否使用cookie.
session.use_cookies = 1

;session.cookie_secure =

; 这个选项允许管理员去保护那些在URL中传送session id的用户免于被攻击
; 默认是 0.
; session.use_only_cookies = 1

; session的名称 (作为cookie名称来使用).
session.name = PHPSESSID

; 在请求开始的时候初始化session.
session.auto_start = 0

; cookie的生存秒数,或者如果为0就直到浏览器重启.
session.cookie_lifetime = 0

; cookie有效的路径.
session.cookie_path = /

; cookie有效的域名.
session.cookie_domain =

; 是否将httpOnly标志增加到cookie上, 增加后则cookie无法被浏览器的脚本语言(例如JavaScript)存取.
session.cookie_httponly =

; 用于序列化数据的处理器. php是标准的PHP序列化器.
session.serialize_handler = php

; 定义’垃圾回收’进程在每次session初始化时开始的比例.
; 比例由 gc_probability/gc_divisor来得出,
; 例如. 1/100 意味着在每次请求时有1%的机会启动’垃圾回收’进程.

session.gc_probability = 1
session.gc_divisor = 100

; 在经过以下秒数之后, 存储的数据会被认为是’垃圾’并且被垃圾回收进程清理掉.
session.gc_maxlifetime = 1440

; 注意: 如果你使用子目录选项来保存session文件
; (查看在上面的session.save_path), 那么垃圾回收就 *不会* 自动发生.
; 你需要通过一个shell脚本,cron或者其他方法来自行处理垃圾回收.
; 例如, 下面的脚本相当于将session.gc_maxlifetime设置为 1440 (1440 秒 = 24 分钟):
; cd /path/to/sessions; find -cmin +24 | xargs rm

; PHP 4.2 和更早版本有一个未公开的 特性/bug , 此特性允许你在全局初始化一个session变量,即便 register_globals 已经被关闭.
; 如果此特性被使用,PHP 4.3 和更早版本会警告你.
; 你可以关闭此特性并且隔离此警告. 这时候,如果打开bug_compat_42,那此警告只是被显示出来.

session.bug_compat_42 = 1
session.bug_compat_warn = 1

; 检查HTTP Referer来防止带有id的外部URL.
; HTTP_REFERER 必须包含从session来的这个字段才会被认为是合法的.
session.referer_check =

; 从此文件读取多少字节.
session.entropy_length = 0

; 在这里指定创建session id.
session.entropy_file =

;session.entropy_length = 16

;session.entropy_file = /dev/urandom

; 设置为 {nocache,private,public,} 来决定HTTP缓冲的类型
; 留空则防止发送 anti-caching 头.
session.cache_limiter = nocache

; 文档在n分钟之后过期.
session.cache_expire = 180

; trans sid 支持默认关闭.
; 使用 trans sid 可能让你的用户承担安全风险.
; 使用此项必须小心.
; – 用户也许通过email/irc/其他途径发送包含有效的session ID的URL给其他人.
; – 包含有效session ID的URL可能被存放在容易被公共存取的电脑上.
; – 用户可能通过在浏览器历史记录或者收藏夹里面的包含相同的session ID的URL来访问你的站点.
session.use_trans_sid = 0

; 选择hash方法
; 0: MD5 (128 bits)
; 1: SHA-1 (160 bits)
session.hash_function = 0

; 当转换二进制hash数据到可读形式时,每个字符保存时有几位.
;
; 4 bits: 0-9, a-f
; 5 bits: 0-9, a-v
; 6 bits: 0-9, a-z, A-Z, "-", ","
session.hash_bits_per_character = 4

; URL rewriter会在已经定义的一组HTML标签内查找URL.
; form/fieldset 是特殊字符; 如果你在这里包含他们, rewriter会增加一个包含信息的隐藏<input>字段否则就是在URL中附加信息.
; 如果你你想遵守XHTML, 删除form的入口.
; 注意 所有合法的入口都需要一个"="符号, 甚至是没有任何值的.
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="

[MSSQL]
; 允许或阻止持久连接.
mssql.allow_persistent = On

; 持久连接的最大数目. -1 意味着没有限制.
mssql.max_persistent = -1

; 最大连接数 (持久 + 非持久). -1 意味着没有限制.
mssql.max_links = -1

; 显示出的错误最

帝国cms利用万能标签制作google网站地图sitemap问题

0

分类 : 编码知识 | 发表时间 21-10-2008

现在国内的几大cms程序,发展至现在都已经比较稳定了,都有可圈可点的优劣之处,相比较于国外比较流行的cms类程序,个人感觉,国内的几大cms普遍在周边开源技术、服务支持氛围性方面,不是太好,说得有些绕口,不要见怪;比较明显的就是,和wordpress对比一下,优劣之势立见。

很早以前的一个网站,采用的是帝国的程序,当时帝国的程序限制比较多,但对于我的应用来说,已经足够。当时找了一个chinaz的模板,改了许久,内容、列表都出来了,只有一个css的问题在ie6下面表现得有一点错位,但在ie7、ie8下面很整齐,css水平有限,直至今年四月份时,当时网站所在服务器有些问题,反应非常慢,这一慢立刻发现,网页在调用一个css的时候,发现在调用一个异常的域名,搜索css才发现,竟然发现模板的上传者在css里面挂了页面,不管是挂马还是挂流量(挂马可能性不大),这种行为已经让人非常愤怒。

不管三七二十一,当帝国升级到5.0的时候,也直接套用了官方的默认模板,并且也沉下心来,在闲暇的时候,看一下帝国官方的模板教程。

在cms程序方面,很重要的一环就是制作网站地图提交给google管理员工具,帝国程序一直没有内置这一方面功能,让人很是遗憾,原因咱不讨论过多;帝国论坛有很多制作帝国程序网站地图的教程,看了几篇,有个别几篇比较无聊,复制原创人帖子改了域名后当主题发,显得有些多余,也有帖子讨论并直接给出代码实例,这种方式对学习者是最有帮助的。

依照帝国系统完整制作GOOGLE SITEMAP的方法(修改版)来制作,生成后索引地图页面是成功了,但最终列表页总是空页,我没用中级列表页,如果是中级列表页生成正常;这个问题已经有人提出解决方法,但我依照做了之后,还是没有结果。他的说法是这样的:

如果栏目下面有子栏目,也就是说不是终极栏目,我称为它是子栏目,[listsonclass]可以循环子栏目数据,但是如果栏目下面无子栏目,是终极栏目[listsonclass]无效,我遇见的情况就是如此,下面是原始教程中的代码:
——————————————————————————–
<?=’<?xml version="1.0" encoding="UTF-8"?>’?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<url><loc>网站域名</loc> </url>
[listsonclass]栏目id,3000,0,0,0,模板标签,0,0[/listsonclass]</urlset>

好在这位站长也是位对帝国模板比较熟悉的高手,想到利用万能标签,开始没有调试成功,得到“禾火木风”版主的确认提醒,确认万能标签可以实现,这位站长也确实调试成功,但我用它的万能标签代码,却怎么也生成不了内容列表:

<?=’<?xml version="1.0" encoding="UTF-8"?>’?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<url><loc>网站域名</loc> </url>
[ecmsinfo]栏目id,3000,0,0,0,模板标签,0[/ecmsinfo]
</urlset>

昨晚刚说过关注站长健康 您应该晚上10点就睡觉,今天就坚持不了,真是失败;依看那文中留言,似乎午夜过后的“夜里欢”似乎要点很大比例哪!

已经有些不清醒了,问题先放一放吧,有些时候问题稍放一放,考虑一下再回头思考,说不定有“拨云见日”的转机,有帝国高人的加我QQ,指点下,高人指点将会少走很多弯路的,呵!

有些意外 微软发布为PHP提供的SQL Server 2005驱动

0

分类 : 业界动态 | 发表时间 28-08-2008

确实非常意外。以前asp与access针对个人小站,asp与sqlserver,开发中型企业门户,php与mysql,linux下的高端高性能高负载网站,特别流行的是大量的资讯网站与论坛,这种组合,似乎已经在意识中固化,同时也显得很自然,这样的搭配,大家都认为很正常。至于asp与mysql,php与sqlserver,这种组合,从来就没想过;随着php与mysql的日趋流行,php高效的地方也逐渐替代asp,微软就此适时发布了专为PHP所用的SQL Server 2005驱动(SQL Server 2005 Driver for PHP)1.0版。

这一驱动的目的是在PHP和SQL Server 2005之间提供更强大的交互功能:

SQL Server 2005 Driver for PHP是PHP 5的一个扩展,用来访问SQL Server
2005。这一扩展为所有的SQL Server 2005版本(包括速成版),提供了一个数据访问编程接口。SQL Server 2005
Driver for PHP API提供了对Windows认证、交易、参数绑定、流、元数据访问和错误处理的支持。(MSDN) 

该驱动现在可以从微软网站上下载。MSDN另外还提供了一个应用示例和详细文档

基于微软公共协议(Microsoft Public License,Ms-PL),微软还在CodePlex上发布了这个驱动的源代码。开发人员可以用这些源代码创建自己的应用,但是微软仅对MSND下载站点上的签约驱动版提供支持。

SQL Server 2005 Driver for PHP需要微软SQL Server 2005 ODBC驱动的支持,而该ODBC驱动只用于Windows平台。目前微软还没有计划要为其他操作系统平台提供类似的驱动。

查看英文原文:Microsoft SQL Server 2005 Driver for PHP Released

玩php的,试下php与sqlserver的搭配吧!

结合以前实例来分析优化discuz的误区

0

分类 : 技术文摘 | 发表时间 12-07-2008

有关于discuz的话题,本博提得不太少数,实在是对之爱之有佳,但也有无奈的无力感;之前关于discuz的乱码问题discuz论坛乱码的又一例解决方法discuz论坛W3WP.exe占用CPU100%的几个解决办法,还有那个虚拟股市6占用mysql资源的问题,最后以关闭虚拟股市了事;上述一系列的问题探索中,采取的方面也包括下述discuz优化误区中的几个方面当中,不过,在一定方面来说,适合度最重要,这关系着以下的操作是优化还是误区?

之前点石论坛中也有贴在讲述disduz的优化问题,大部分表现在模板方面,对于php、mysql方面的优化比较少;在落伍论坛也看到一个叫小勤的,好像就是那个给落伍写点击量统计查询插件的那位,有一篇日志被转到discuz论坛,是他跟踪一个客户的案例,其中提到用到了mysql慢查询来跟踪查询语句,并在最后对discuz的论坛数据库结构提出了改进索引的意见。我在改进那个discuz论坛W3WP.exe占用CPU100%的几个解决办法时,也确实用了下,感觉也确实有些作用,但在下述的所谓误区操作中,针对增加索引,提出了反面意见,而事实上,近一段时期,结合论坛实际发展情况,感觉也确实有些道理。

1、SQL 慢,加索引:多数情况下,数据库可能是瓶颈。通过 Slow Query Log 发现执行时间比较长的 SQL 并不难,于是有的人一看 SQL 走了全表扫描,干脆添加个索引好了。

其实这个地方值得商榷的。第一,必须确定一下该 SQL 执行次数到底是怎样的?执行真的很频繁? 那么对应的页面是否通过 Cache 可以减少对 DB 的冲击?如果可以,尽量不要添加索引,索引本身对表的负面影响也是很大的,比如降低更新速度影响并发能力等。就此看来,增加索引也确实是双刃剑,具体是否增加还要进一步的跟踪分析,从cache方面结合考虑查询的问题。

2、瓶颈一定在数据库上:数据库"可能"是瓶颈,很多时候,图片访问带来的压力甚至比数据库压力还大;有的用户数据库、用户上传的图片文件、Web 服务器都扔到一台服务器上,这时候,第一手去调整 MySQL 或许会有作用,但价值不大。因此,分析并确定瓶颈点,就是关键了。

3、盲目的静态编译 MySQL:静态编译 MySQL 有好处,但如果系统已经在线上运行了,在原有环境中进行静态编译未必能带来多大好处。对于 PHP 也是这样,如果一次优化从其它方式上能带来更清晰、直接的开销,就不要重新编译;我的看法是:如果论坛发展初期,哪怕是开始没来得及静态化,也要转为静态化,毕竟发展初期,大多数网站对于搜索引擎的依赖性还是比较大的,如果发展到一定地步或者是以实力领先、发展已经比较稳定的论坛团体,那就没必要再次静态化了。静态化,在一定方面,还是要以消耗部分性能为代价的。

4、反复尝试,但不建立基准数据;建立基准数据,实在应该是优化的最基本的步骤。这样才能有效的评估优化的效果。否则的话,象误区一描述的,添加了一个索引,短期内可能感觉快了,长期看,性能可能又会慢下来。这个基准数据建立的代价就大了,我当初也没有在增加索引之前保留数据库的备份,也没有太长时间对比效果,这工作量太大了点,像七十二松的那位管理员,那家伙有条件有精力来研究,还差不多。唉,国外的空间,忘记放在他们那里了,这样就省事太多了,那sir也是个优化狂人!佩服一把!本博一贯佩服技术领先、追求技术至境的网络人!

5、一次进行多个优化步骤:如果一次调整多个参数或是多个环境的设置,然后观察效果。如果每个步骤都是"对"的话,那么效果看起来是好的。如果有的步骤调节"错"的话,可能会抵消那些有效果的优化步骤。这方面不再多说了,再多分析嘛,分析后确定优化点。

上述部分内容源自:http://www.bullog.cn/blogs/dbanotes/archives/157025.aspx,我看这内容时搜索了下,有两个地址,并且是不同域名不同路径的相同内容,作者也相同,奇怪了,这作者排名不低呀,不会犯这样的重复性网页错误吧?

discuz的优化方面,实在有些疲累的感觉,毕竟数据库也比较大了,每次调整面临的压力与等待都比较辛苦,并且这也是在探索中前进,discuz官方对此的答案一向是那个“苦砂”回答,但这位似是一个应用层级别的高手,对于深层次的代码级修改和mysql深层次优化,似乎心有余而力不足,而discuz官方开发团队中,除了那个童虎偶尔展示一下风采外,其他人和其他解决性方案,更是难得一见。可能这就是对待免费下载使用用户的服务吧,理解吧,不理解也得理解吧!phpwind在速度方面,一向都是高出discuz一筹,但phpwind官方对于免费服务群体的态度,比之discuz官方更是过份,phpwind安装应用区的问题,就可见一斑,失望之下,才转至discuz的,但discuz近来的资源占用情况,似乎又在迫使我寻求其他的解决之路。VBB?还是aspx?还是静态化?还是在硬件方面加大投入?四核?还是分布式应用?扯淡!我这么high?我还谈优化干嘛?呵

优化,是个技术活,更是一个让人心力交瘁的活,有兴趣的,留言多交流!

安装PHP程序时遇到空白页问题

0

分类 : 网络日志 | 发表时间 25-11-2007

今天帮一位朋友安装phpcms2007sp5时,发现一到php页面,就出现空白。查源代码,只有html代码部分。到网上搜索了一下办法,虽然非网上答案解决,但一并把网上所说的问题可能性总结一下:

1.编辑PHP.ini  找到memory_limit=8M   把8M更改为128M,  保存,restart apache,这是一位用wordpress的朋友遇到安装php程序时空白页的解决办法。

2.是PHP的版本问题,如果是用php5的话,一定要换成php5.1.1   nov 28 2005的版本,主意,这个日期非常重要

3.如果是dz论坛,突然出现空白页这种情况,可以用dz论坛自带的清理cookie链接来处理。

4.如果是刚配置的php和iis环境,看一下,在php.ini里把extension=php_gd2.dll起来!还有就是把PHP目录下所有的*.DLL文件考到system32下 ,在就是IIS里的配置了,重新审查一下;

php.ini配置不正确,可能出错的地方如下:

a. extension_dir = 和PHP实际的ext目录不一致。

b. 没有把PHP目录和ext目录添加到环境变量中。

c. extension=php_mysql.dll等前的;注释没去掉。

d. Zend安装目录和php.ini中Zend指定的目录不一致;以及zend版本,尝试升级至最新版本。

e.extension=php_zip.dll等前的;注释没去掉。这是有关gzip方面的功能

另外,着重考虑php的配置权限和iis的网站目录权限配置问题。

最后,也要勇于怀疑所安装程序的代码问题。今天测试的phpcms2007sp5是最新更新的,是有理由怀疑它的,虽然后来解决问题,发现并不是程序代码问题。是目录安全权限问题。

 

如何实现MySQL中的用户管理?

0

分类 : 技术文摘 | 发表时间 28-09-2007

MySQL有一套先进的但非标准的安全/授权系统,掌握其授权机制是开始操作MySQL数据库必须要走的第一步,对于一个熟悉SQL基本操作的人来说,也是MySQL所有的知识中比较难以理解的一个部分。本文通过揭开其授权系统的运作机制,希望大家能够可以更好地操作和使用这个优秀的数据库系统。

本文主要参考了MySQL安装所附的使用手册第六章中的部分内容。

1、授权机制的主要作用是什么?

授权机制的基本作用是给某个主机上的用户对某个数据库以select,insert,update和detete的权限。而其额外的功能还包括是否允许匿名使用数据库,使用MysQL的一些特定函数,如:LOAD DATA INFILE之类。在这里请注意,MySQL中的用户名和Unix系统中的用户名并没有什么关系。虽然许多客户端程序允许你可以用当前的用户名进行登录,但是最标准的做法还是通过–user的选项。
 
2、授权机制是如何进行运作的?

在MySQL中主机和用户的联合视为唯一标志。比如说,在主机1和主机2上的用户lee实际上是不同的,他们对MySQL的使用权限也可以是有差别的。而整个授权机制的核心问题就是要解决授予从某个主机上登录的某个用户对某个数据库的使用权限。你可以通过脚本mysqlaccess测试一个主机上用户的对数据库操作的权限。而所有的授权信息都被存储在数据库mysql的user、host和db表中。我们可以通过mysql MySQL的指令连接到这个数据库中,并且通过select * from user(或者db,host)显示每个数据表中的内容。user表中所授予的权限是整个授权机制的基本授权,也就是说,user中的定义对于任何一个用户+主机来说都是适用的,除非在db表中另外有所定义,因此,对于用户来说最好是就某个数据库为基础进行授权。而host表的主要目的是维护一个“安全”服务器的列表。而在具体考虑某个用户/主机对某个数据库的权限的的时候,我们还需要研究一下授权机制的的匹配搜索机制:

其次,在授权机制中可以对一个用户的口令进行加密,而且是必须加密,加密的方法是password(口令),如果直接填写口令的话,会导致数据库无法访问。user表中所授予的权限是整个授权机制的基本授权,也就是说,user中的定义对于任何一个用户+主机来说都是适用的,除非在db表中另外有所定义,因此,对于用户来说最好是就某个数据库为基础进行授权。而host表的主要目的是维护一个“安全”服务器的列表。而在具体考虑某个用户/主机对某个数据库的权限的的时候,我们还需要研究一下授权机制的的匹配搜索机制:

首先,我们需要介绍一下统配符的概念,统配符包括“%”,其意思为任意(的主机、用户或者数据库),而如果一条记录为空的话,也表示任意的意思。其次,在授权机制中可以对一个用户的口令进行加密,而且是必须加密,加密的方法是password(口令),如果直接填写口令的话,会导致数据库无法访问。
从我们对这三个表的显示我们可以看到,这三个表中的每一条记录包含了对于某个用户的授权情况的描述,MySQL数据库中几个相关的授权机制的数据表被搜索的顺序为:user,db,host。也就是说,我们将首先首先检索user数据表,找到第一个匹配的记录,我们把在user数据表中首先匹配的记录称之为Priv;然后搜索db表,获得相应的授权。如果在db数据表相应记录中host字段的为空,并且Priv记录中主机也被包含在host表的host字段之中,这样的话,对于某个user来说,则可以在user表中加入在host表中的一些为“Y”的权限设定。如果在db表中的host字段不为空的话,那么也就不会对该用户/主机的授权产生什么影响了。
了解了这一点之后,我们需要讨论在各个数据表中的记录的搜索的优先权的问题,也就是说,怎样确定第一匹配的记录,这并不是按照数据表中的记录的自然先后顺序来确定的。在各个数据表内的各条记录的优先权排列如下:
(1)user表:根据先host后user的顺序确定。搜索规则如下:不包含统配符的记录,包含统配符的记录,空记录。而在同样一个host里面,继续按照user来排列,规则和上述的一样。
(2)db表:检索的顺序根据host字段确定:不包含统配符的记录,包含统配符的记录,空记录。
(3)host表:检索的顺序根据host字段确定:不包含统配符的记录,包含统配符的记录,空记录。我们用下面的例子来说明进行匹配搜索的规则:请记住如果你更改了这些数据表,你必须使用MySQLadmin reload使其生效。
下面是演示系统是如何进行搜索的:
+———–+———+-
| Host | User | …
+———–+———+-
| % | root | …
| % | jeffrey | …
| localhost | root | …
| localhost | | …
+———–+———+-
搜索的顺序应当是:
localhost/root
localhost/any
any/jeffrey
any/root
这样,如果在localhost的用户jeffrey要连接数据库的话,那么其授权应当根据localhost/“任意” 行所规定的权限而非“任意”/jeffrey行所规定的权

限,请大家注意这一点,因为如果不合适的配置完全可能会使得你无法正常地使用这个数据库系统。
我们现在来看一个添加一个用户的例子:需要添加一名叫做“custom”用户,他分别从主机localhost, server.domain 和 whitehouse.gov连接到数据库中,他的口令为“stupid”,对于数据库bankaccount他只想从“localhost”进行访问,而“customer”数据库则应当被上述3个主机所访问。我们通过以下的sql语句来完成其操作。

shell> mysql MySQL.
MySQL> insert into user (host,user,password)
values(localhost,custom,password(stupid));
MySQL> insert into user (host,user,password)
values(server.domain,custom,password(stupid));
MySQL> insert into user (host,user,password)
values(whitehouse.gov,custom,password(stupid));

MySQL> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
values
(localhost,bankaccount,custom,Y,Y,Y,Y,Y,Y);
MySQL> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
values
(%,customers,custom,Y,Y,Y,Y,Y,Y);

3、授权数据表

授权数据表对表的行操作包括select,insert,update和delete,对表和数据库的操作包括create和drop。其它的授权还包括如LOAD DATA INFILE和SELECT INTO OUTFILE和管理命令:shutdown, reload, refresh 和process.三个授权数据表的结构如下所示:
user表
字段 类型 健 默认值
Host char(60) PRI ""
User char(16) PRI ""
Password char(16) – ""
Select_priv enum(N,Y) – N
Insert_priv enum(N,Y) – N
Update_priv enum(N,Y) – N
Delete_priv enum(N,Y) – N
Create_priv enum(N,Y) – N
Drop_priv enum(N,Y) – N
Reload_priv enum(N,Y) – N
Shutdown_priv enum(N,Y) – N
Process_priv enum(N,Y) – N
File_priv enum(N,Y) – N

db表
字段 类型 健 默认值
Host char(60) PRI ""
Db char(64) PRI ""
User char(16) PRI ""
Select_priv enum(N,Y) – N
Insert_priv enum(N,Y) – N
Update_priv enum(N,Y) – N
Delete_priv enum(N,Y) – N
Create_priv enum(N,Y) – N
Drop_priv enum(N,Y) – N

host 表只有在db的数

MySQL安全问题(匿名用户)的一点心得

0

分类 : 技术文摘 | 发表时间 28-09-2007

在安装完MySQL后,它会自动创建一个root用户和一个匿名用户,其初始密码都是空,对于前者,很多参考资料上都会提醒大家要注意及时设定一个密码,而忽略了后者,大概是因为后者默认设定为只能在本机使用的缘故吧。

  但如果你的MySQL是要提供给Web服务器作数据库服务的,忽略这个匿名用户的代价可能相当惨重,因为在默认设置下,这个匿名用户在localhost上几乎拥有和root一样的权限,这时候,如果你的客户拥有上传脚本文件、脚本文件可以进行MySQL数据库操作(比如允许操作MySQL的php)的权限已经可能将你的MySQL改动得面目全非了:

  我今天帮朋友整理他的主页空间的时候,试着写了一个很简单的执行sql语句的php文件上传上去,其中连接字中的user,password我都试着置空,host=localhost,结果发现我的sql语句可以执行,于是执行select * from MySQL.user察看用户权限,发现这个用户在localhost权限非常高,连grant_priv都有,(察看的时候,会发现在root用户下有两行用户名、密码为空的,但各项权限有y\n的,就是这个匿名用户本地、远程权限设置了)

  所以我试着用这个php页面创建一个新用户,并grant给他较高的权限,结果一举成功,这样我就可以用这个新用户通过我本机的MySQL client连接到这个网站的MySQL server,并用这个新建立的用户的管理权限对这个网站的MySQL server进行管理,看到自己可以进行这样轻易获得深入的数据库操作,我怎么还敢把朋友的主页空间的敏感资料放入这个MySQL server呢?

  改进建议:

  1、在安装完成MySQL 后,不仅改变root用户的的密码,也同时改变匿名用户的密码,方法类似改变root的密码的方式:

  MySQL> UPDATE user set password=PASSWORD(‘yournewpassword’) where user=”;
  MySQL>FLUSH PRIVILEGES;

  2、如非必要,删除这个匿名用户,这样所有人要使用MySQL 都必须提供用户名,即便日后出了问题,也容易查找问题的源头。

  3、除了root用户外,其他用户包括匿名用户(如果没有删除这个用户)不应该拥有grant权限,防止管理权限不受控制的扩散出去。

  4、赋予用户update\delete\alert\create\drop权限的时候,应该限定到特定的数据库,尤其要避免普通客户拥有对MySQL数据库做操作的权限,否则你的系统设置很可能被替换掉。

  5、检查MySQL.user表,取消不必要用户的shutdown_priv,reload_priv,process_priv和File_priv权限,这些权限可能泄漏更多的服务器信息包括非MySQL的其它信息出去。

  6、如果不打算让你的用户使用MySQL数据库,在提供诸如php这样的脚本语言的时候,重新设置或编译你的php,取消它们对MySQL的默认支持。

加密你的phpmyadmin登陆

0

分类 : 技术文摘 | 发表时间 24-09-2006

phpmyadmin是管理mysql数据库的一个最方便的工具~(虽然有MySQL-Front ,或者EMS MySQL Manager Professional等管理软件),更适合在远程虚拟主机上管理租用的数据库。但是提供的PHPMYADMINde 的源程序代码中,并没有一个安全的验证控制,一旦被别人得悉你的管理目录,你的数据库将完全暴露在别人面前,我使用mysql数据库的时候,设计了一个小的验证页面,希望能给新学PHP的人一些提醒~老鸟,自然,也不用我来说~~~

PHPMYADMIN里面index.php,left.php和main.php是需要加密的首要的~
主要的思路就是取得一个session验证的身份,才能够执行其余的代码~

//login.php
登陆的提交和处理页面;放置于你的phpmyadmin目录下面。
<?
session_start();
if($Submit)
{
$def_user="crain";//这里写上你想用的用户名;或者连接数据库,提取用户组
$def_pwd="极度郁闷中";//用户名对应的密码
if($user==$def_user)
{
if($pwd==$def_pwd)
{
$manage=$user;
session_register(manage);
echo "成功登陆";
echo "<meta http-equiv=’refresh’ content=’1;URL=index.php’>";
}
else
{
echo "<meta http-equiv=’refresh’ content=’2;URL=login.php’>";
}
}
else
{
echo "<meta http-equiv=’refresh’ content=’2;URL=login.php’>";
}
}

?>

<form name="form" method="post" action="login.php">
<font color="#000033">几点说明:</font> <font color="#000033">各管理员可以通过改入口进入相应的管理界面!</font>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="00" bordercolorlight="#000000">
<tr>
<td width="199"><p><font color="#000033" size="2">User :
<input name="user" type="text" id="user" size="10">
</font></p>
<p><font color="#000033" size="2">Pswd:
<input name="pwd" type="password" id="pwd" size="10">
</font></p>
<p align="center"> <font color="#000033">
<input type="submit" name="Submit" value="登陆">
</font></p></td>
<td width="577" valign="top"><p> </p>
<p> </p></td>
</tr>
</table>
</form>
///上面是login.php;

下面是在你的phpmyadmin下面的index.php,left.php,main.php里面做修改,将下面代码加入到三个页面
在每个文件的首行加入下面代码:

<?php
session_start();
if(!session_is_registered(manage))
{
exit();
echo "<meta http-equiv=’refresh’ content=’0;URL=login.php’>";
}
else
{
?>

在文件的末尾加上
<?
}
?>

这样你的phpmyadmin就有个一个session的身份验证了!

测试一下,你还可以改成一个多级用户管理的系统~为你的虚拟用户直接提供数据库管理界面!

火龙网 地址: http://www.comxc.com/article.php?articleid=1149

win2000/2003 Php+ZendOptimizer+Mysql+eaccelerator详细配置及基础优化

0

分类 : 技术文摘 | 发表时间 21-08-2006

副标题: win2000/2003 Php+ZendOptimizer+Mysql+eaccelerator配置及基础优化全攻略

首先,下载需要安装的软件,我已经整理好,放到穆族社区的服务器,请根据连接下载。

Php-4.4.1
http://www.muzone.cn/soft/php-4.4.1-Win32.zip

ZendOptimizer-2.6.0
http://www.muzone.cn/soft/ZendOptimizer-2.6.0-Windows-i386.exe

Mysql-4.0.26
http://www.muzone.cn/soft/mysql-4.0.26-win32.zip

Eaccelerator 加速及缓存软件
http://www.muzone.cn/soft/eaccelerator.rar
当然,这个eaccelerator针对php有不同版本的,如果您安装的不是php4.4.1,可以在这里找到您需要的版本
http://www.arnot.info/eaccelerator/

phpMyAdmin-2.7.0-pl1  Mysql管理软件,日常维护必备
http://www.muzone.cn/soft/phpMyAdmin-2.7.0-pl1.zip

第一节,基础安装。
一,安装mysql
首先,我们安装Mysql 4.0.26,之所以选择这个版本,是因为这个版本比较稳定,
而且有关字符集和兼容性也没那么麻烦,如果没有特殊需要,不推荐使用Mysql4.1和mysql5.0
新的版本,也许功能上更强,但是没有经历过太长时间的考验,稳定性和兼容性及使用便捷性不是很佳

下载mysql-4.0.26-win32.zip,解压缩,直接运行安装文件。
我是装在D:/mysql 因为C盘经常会因为各种原因重装系统,数据放在该盘不易备份和转移
选择安装目录, D:/mysql  ,提示目录不存在,建立与否,确认,然后按照提示一路安装下去即可

安装完毕后,运行 D:/mysql/bin/mysqld-nt.exe
然后运行  D:/mysql/bin/winmysqladmin.exe
输入帐号 root 密码 任意输入  (因为这一步的密码设置,实际上是不生效的,需要使用phpmyadmin修改确认)
重新启动服务器,检查系统服务中,是否如图所示

至此mysql的基本 安装完成,进一步的设置和My.ini优化,将在下一节说明

二,安装PHP

需要说明的是
php有CGI和ISAPI是两种  运行的方式

CGI 更消耗资源,容易因为超时而没有反映,但是实际上比较安全
ISAPI是大C推荐的模式,负载能力强,节省资源,但是安全性略差于CGI
我的教程中说的是ISAPI方式

解压缩php-4.4.1-Win32.zip,将第二层目录php-4.4.1-Win32,改名为 php
然后复制到 c:/ 成为 c:/php 并将其目录安全属性,添加 everyone 可读取和运行权限
但是鉴于NT系统种种怪异现象,我们可以给与everyone所有权限,只是安全性有一点点问题
(其理论性,只需要Guest组具备读取和运行权限,以及IIS所用到的IIS_WPG可以读取运行就行,但实际上往往会出现一些比较离奇的问题,本教程不作深入探讨)
然后将php.ini-dist 改名为 php.ini
将php4ts.dll复制到系统目录的 system32目录中
win2000:  c:/winnt/system32/
win2003:  c:/windows/system32/
打开,php.ini 找到

extension_dir = "./"

改为

extension_dir = "c:/php/extensions/"

然后打开 Internet 信息服务(IIS)管理器
修改你的站点属性,选中主目录,使其可以使用纯脚本

然后点 配置  进入 应用程序配置 点添加 如图所示

可执行文件   C:\php\sapi\php4isapi.dll
扩展名   .php
将“脚本引擎”“确认文件是否存在”选中,然后确认。

win2000中,到此一般就可以支持php脚本了。

2K和03中也可以再设置ISAPI筛选其保其运行正常

如果状态为绿色箭头,即可,该步非必要性操作。

win2003中,还需要设置IIS的WEB服务扩展器
添加一个新的WEB扩展器,扩展名为.php,要求的文件C:\php\sapi\php4isapi.dll,设置扩展状态为允许。
设置完后如图

完成所有操作后,重新启动IIS服务。
到此,PHP的基本安装已经完成,我们已经使网站支持PHP脚本。
检查方法是,新建一个文本文件,内容为

<?php phpinfo(); ?>

改名为 php.php
放到您的网站根目录,访问这个文件,如果显示了您的php详细信息,即成功,类似

关于进一步设置和php.ini的优化,我们将在下一节继续探讨。

三,安装ZendOptimizer

安装ZendOptimizer,不仅是一些商用PHP必备的条件,也可以大幅度的提高php文件运行的效率。
下载ZendOptimizer-2.6.0-Windows-i386.exe 直接运行安装
请注意如下提示,根据提示仔细安装。
必须选择您使用的WEB SERVER 为IIS,否则将有不可预知的错误发生。如图


确认后,下一步,点击浏览,选择您的php.ini所在目录,这一点也不能错。如图

然后根据提示安装,过程中,他会 停止 和 重新启动 您的IIS服务,并将原 php.ini 备份为 php.ini.Zend_Optimizer_bak
如果一切顺利,您的 php.ini文件的尾部,将多出

[Zend]
zend_extension_manager.optimizer_ts="C:\Program Files\Zend\Optimizer\lib\Optimizer-2.6.0"
zend_extension_ts="C:\Program Files\Zend\Optimizer\lib\ZendExtensionManager.dll"
zend_optimizer.optimization_level=15

并且检查C:\Program Files\Zend\Optimizer\lib\Optimizer-2.6.0 的目录安全属性是否有系统读取和运行的权限

至此,ZendOptimizer的基本安装已经完成,更多设置和优化,将在下一节说明。

基本安装到此结束,此环境已经完全可以运行discuz及各种php程序。

第二节,基础设置及优化
关键字   my.ini  php.ini  eaccelerator 穆亦风

一,Mysql的进一步设置及优化。
登录数据库
  “命令提示字符”窗口录入,
  录入cd C:\mysql\bin 并按下回车键,将目录切换为 cd C:\mysql\bin
  再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

  修改密码
  C:\mysql\bin提示符下录入:
  格式:mysqladmin –u用户名 -p旧密码 password 新密码
  例如:给root加个密码ab12。键入以下命令:
  mysqladmin -uroot password ab12

  建立数据库
  格式:create database 库名;
  例如:建立新数据库discuz
  在MYSQL的提示符下:mysql> 录入 create database discuz;

  显示数据库
  格式:show databases;
  注意是databases而不是database

  建立新用户
  格式:grant all privileges on 数据库.* to 用户名@登录主机 identified by "密码";
  例如:增加一个用户test密码为1234,让他只可以在localhost上登录,并可以对数据库discuz进行所有的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),
  在MYSQL的提示符下:mysql> 录入grant all privileges on discuz.* to test@localhost identified by "1234";

  通过以上操作,你建立一个新的数据库 discuz,并增加了一个名为test对discuz数据库有所有操作权限。

  注意:以上仅仅是简单的Mysql操作命令,如果你需要了解更加详细的资料,请查阅Mysql相关操作说明文档。

点击  《MySQL管理员指南》

首先,在上一节,我们安装的mysql,实际上没有设置root帐号的密码,这是极不安全的
下载 phpMyAdmin-2.7.0-pl1.zip 将子目录 phpMyAdmin-2.7.0-pl1 修改为 任意名称,复制到您的网站根目录
这个目录的名称最好复杂,不易被猜解,防止他人使用
然后修改config.default.php
找到

$cfg['PmaAbsoluteUri'] = ”;

修改为

$cfg['PmaAbsoluteUri'] = ‘http://test.muzone.cn/89xd983s’;

即您的网站网址及phpmyadmin具体所在目录

找到

$cfg['blowfish_secret'] = ”;

修改为

$cfg['blowfish_secret'] = ‘muzone’

;
这个地方的值主要用作与加密您的cookie,可以任意设置

找到

$cfg['Servers'][$i]['auth_type']     = ‘config’;

修改为

$cfg['Servers'][$i]['auth_type']     = ‘cookie’;

此处为关键修改,设置完后,只有输入正确的帐号和密码才可以管理您的mysql

全部修改完毕,保存后,通过您的phpmyadmin 访问并管理您的mysql
第一次登陆,由于我们没有设置root的密码,所以帐号填 root 密码空,即可登陆
进入后第一件事情,就是修改root帐号的密码
登陆以后,点权限,修改root帐号,点最后的编辑按钮
设置密码,如图

密码设置成功后,需要重新登陆,至此,便可以对mysql进行各种管理,phpmyadmin的操作网上有很多教程
我这里就不详细讲了
至于 my.ini的设置,我们将在下一节详细讲解

二,安装 Eaccelerator 加速及缓存软件
安装 Eaccelerator 加速及缓存软件,可以加速php文件的读取和运行速度,并将一些mysql查询及php文件缓存起来
减轻服务器的负担,从而达到对论坛的大幅度加速和负载能力的提高,这个软件我在许多大站上作过试验
效果非常显著!其效果可询问若干长期由我维护的大论坛站长。

安装eaccelerator非常简单,
首先,下载eaccelerator.rar
解压缩后,一个是安装说明,一个是所需要的dll文件。
将eaccelerator_win_4.4.1.dll 复制到  c:/php/extensions/

QUOTE:
打开c:/php/php.ini
找到

[Zend]
zend_extension_manager.optimizer_ts="C:\Program Files\Zend\Optimizer\lib\Optimizer-2.6.0"
zend_extension_ts="C:\Program Files\Zend\Optimizer\lib\ZendExtensionManager.dll"
zend_optimizer.optimization_level=15

替换为

[Zend]
zend_extension_ts="C:\php\extensions\eaccelerator_win_4.4.1.dll"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="c:\temp"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
zend_extension_manager.optimizer_ts="C:\Program Files\Zend\Optimizer\lib\Optimizer-2.6.0"
zend_extension_ts="C:\Program Files\Zend\Optimizer\lib\ZendExtensionManager.dll"
zend_optimizer.optimization_level=15

在C盘根目录建立一个文件夹, c:/temp  将这个目录授予 everyone 所有权限(实际上只要有写入,修改,读取即可)
重新启动IIS
在phpmyadmin中,察看php信息,看看是否如图所示


如果有加载eaccelerator的信息,说明安装成功。

至此,对于php的第一步优化完成。

下面我们要修改php.ini的其它项

二,对php.ini进行最基本的设置和优化
对于php.ini的优化和设置,非常多样化,根据不同的程序需要和服务器配置,各人都有不同的方案
这里我不会说的太过详细,仅提供一些基本的。
大家可以阅读 php.ini 基本 中文说明   http://club.muzone.cn/viewthread.php?tid=27800

首先,由于discuz的验证码需要,我们需要打开GD库的支持
第一节中,我们已经设置好了扩展库的目录,即extension_dir = "c:/php/extensions/"
下面我们只需要找到

;extension=php_gd2.dll

将前面的冒号去掉,即

extension=php_gd2.dll

然后保存php.ini,即可

然后,我们可以先做一项对于页面处理效果比较明显的设置

QUOTE:
output_buffering = Off
  输出缓存允许你甚至在输出正文内容之后发送 header(标头,包括cookies)行 其代价是输出层减慢一点点速度。你可以使用输出缓存在运行时打开输出缓存, 或者在这里将指示设为 On 而使得所有文件的输出缓存打开。
  output_handler = ; 你可以重定向你的脚本的所有输出到一个函数,
  那样做可能对处理或以日志记录它有用。
  例如若你将这个output_handler 设为ob_gzhandler, 则输出会被透明地为支持gzip或deflate编码的浏览器压缩。
  设一个输出处理器自动地打开输出缓冲。

找到这个

output_buffering = Off

修改为

lass="right">[Copy to clipboard]

CODE:

output_buffering = On

注意,不要设置数值,只需要设置为On即可。

相应的,你还可以在你的discuz后台,打开gzip支持,也是优化的一项内容。

有些朋友为了安全,还启用了php的安全模式,这个也是一办法,但是比较麻烦
大家可以到网上搜索一项相关的内容,我这里就不说了,毕竟对于效率没什么显著的意义。

另外有些朋友需要使用全局变量和MAGIC,这是一些php程序的必备条件,discuz2.0也需要
可以打开,不过安全性能将降低,方法很简单。
找到

register_globals = Off ;

magic_quotes_gpc = Off ;

将其修改为On即可

还有,一些朋友经常反映无法上传较大的文件或者后台备份数据经常超时,那么可以找到

max_execution_time = 30     ; 这个是每个脚本运行的最长时间,可以自己修改加长,单位秒
max_input_time = 60        ; 这是每个脚本可以消耗的时间,单位也是秒
memory_limit = 8M      ; 这个是脚本运行最大消耗的内存,也可以自己加大
upload_max_filesize = 2M ; 上载文件的最大许可大小 ,自己改吧,一些图片论坛需要这个更大的值

关于效率,还有一个,就是,php.ini的zend配置,在php.ini中,底部
有一行

zend_optimizer.optimization_level=15

如果您的机器配置足够好,可以优化这里

QUOTE:
这里最为重点的部分,仔细看!Zend Opt总共有10个优化过程,从理论上说开的越多性能越好。当然,理论和实际永远都存在着差距。优化过程开启的越多对性能消耗也相对也越大,Zend Opt的10个优化过程并不相同也就是说效果不是平均的。Zend公司定义的最高值(High模式)为15,这里15指的是开启1-4号优化过程。当然,很多朋友并不满足于此,毕竟最高也只开启4个优化过程连总数的一半都没有。各个优化过程的对应的数字代码(值)如下:

       不使用      0  <= 如果这样不如不装,还能节约点内存说!
优化过程1(PASS1) 1
优化过程2(PASS2) 2
优化过程3(PASS3) 4
优化过程4(PASS4) 8
优化过程5(PASS5) 16
优化过程6(PASS6) 32
优化过程7(PASS7) 64
优化过程8(PASS8) 128
优化过程9(PASS9) 256
优化过程10(PASS10) 512

所以15只是开了前四个,如果您的内存足够多,也可以开更高,如设置为1023,即打开所有加速过程

12月21日补充,一些朋友反映,php经常报错,显示PHP has encountered an Access Violation at XXXXXX
很多人说,是php版本的问题,其实不然,可以从四个地方来看这个问题
1,是否zend所需的dll文件所在目录给的权限不够,必须有读取和运行的权限
2,是否使用的2003,设置过应用池,比如池中限制了什么什么,调整一下再试试看,是否好了,呵呵
3,php.ini有两个地方没有设置,而且一些程序必须用到的

A

将;upload_tmp_dir该行的注释符,即前面的分号“;”去掉,使该行在php.ini文档中起作用。upload_tmp_dir是用来定义上传文件存放的临时路径,在这里你还可以给其定义一个绝对路径,例如:upload_tmp_dir = d:upload  当然,此时你的d:upload目录必须有读写权限。
这里我设置为
upload_tmp_dir = c:\temp  (因为前面建立了这个文件夹,我图省事,呵呵)

B
出现这样的错误语句一般是因为你的php.ini中关于session.save_path一项没有设置好,解决的方法是将session.save_path和session.cookie_path 设置置为
   session_save_path = c:\temp
   session.cookie_path = c:\temp
   然后在c:\目录下建立一个temp目录,即可(前面我们的eaccelerarot正好用到,建立过这么一个文件夹)

最后
还有一些关于邮件的设置,大家如果装了mail server 还有需要在win下使用邮件发送的,可能需要设置
大家根据我的中文说明自己调整

第三节中,暂时没有想到有什么可以给大家说得,只有大家比较关心的
mysql优化了

所以先说说这个,其实这个,很复杂,对于不同的网站,其在线,访问量,帖子数量,网络情况,以及机器配置
都有关系,优化不是一次可以完成的,需要不断的观察和调试,以取得最佳效果
下面我引用 Asiwish和老高的两篇优化措施,给大家看看

这些设置,只要通过修改 win2000的c:/winnt/my.ini 或者 win2003的 c:/windows/my.ini 来实现

首先,我们打开这个文件,先将最底部的密码项改成其它的,这个对数据库本身没影响,主要是防止一些有心人获取这个密码,对我们不利

然后大家看看两个例子,其中一些设置,略懂的英文的,即明白是什么意思,
不懂得可以去 http://cb.kingsoft.com  查单词,我懒得一个个对照写说明了
一个是 千人在线,1G内存的

QUOTE:
#This File was made using the WinMySQLAdmin 1.4 Tool
#2004-2-23 16:28:14

#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions

[mysqld]
basedir=D:/mysql
#bind-address=210.5.*.*
datadir=D:/mysql/data
#language=D:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
set-variable    = max_connections=1500
skip-locking
#skip-networking
set-variable        = key_buffer=384M
set-variable        = max_allowed_packet=1M
set-variable        = table_cache=512
set-variable        = sort_buffer=2M
set-variable        = record_buffer=2M
set-variable        = thread_cache=8
# Try number of CPU’s*2 for thread_concurrency
set-variable        = thread_concurrency=8
set-variable        = myisam_sort_buffer_size=64M
#set-variable        = connect_timeout=5
#set-variable        = wait_timeout=5
server-id        = 1
[isamchk]
set-variable        = key_buffer=128M
set-variable   &
nbsp;    = sort_buffer=128M
set-variable        = read_buffer=2M
set-variable        = write_buffer=2M

[myisamchk]
set-variable        = key_buffer=128M
set-variable        = sort_buffer=128M
set-variable        = read_buffer=2M
set-variable        = write_buffer=2M
[WinMySQLadmin]
Server=D:/mysql/bin/mysqld-nt.exe

这个方案,整体够用了,但是在pconnect和最大连接数上,需要研究
max_connections没必要那么大,我个人认为几百就够,否则给服务器加大了不少负担,经常会当机
连接超时的设置也要根据实际情况调整,大家可以自由调整,然后观察效果如何。

下面是老高两年前的一些建议,大家参考一下

QUOTE:
  7、MYSQL 的优化(/etc/my.cnf)
        1)确认在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”参数;
        2)确认在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”参数;
        3)如果不需要的话,可以将二进制日志(binlog)停掉,方法是将“log-bin”注释掉;
        4)在内存允许的情况下,对一些参数进行重新配置,目标在于将大部分操作集中于内存中,尽量不进行磁盘操作,对于我的 MYSQL 服务器我是如下修改的,基于 2G 内存情况:

        [mysqld]
        set-variable    = key_buffer=512M
        set-variable    = max_allowed_packet=4M
        set-variable    = table_cache=1024
        set-variable    = thread_cache=64
        set-variable    = join_buffer_size=32M
        set-variable    = sort_buffer=32M
        set-variable    = record_buffer=32M
        set-variable    = max_connections=512
        set-variable    = wait_timeout=120
        set-variable    = interactive_timeout=120
        set-variable    = max_connect_errors=30000
        set-variable    = long_query_time=1
        set-variable    = max_heap_table_size=256M
        set-variable    = tmp_table_size=128M
        set-variable    = thread_concurrency=8
        set-variable    = myisam_sort_buffer_size=128M

        你可以根据“show status”命令返回的状态进行微调。我主要注意以下变量的数值,越小越好,最好为零:)
        Created_tmp_disk_tables
        Created_tmp_tables
        Created_tmp_files
        Slow_queries

另外 mysql wait_timeout 那个值设置大了没用 做10左右就可了 (大C说得)

wait_timeout是使用长久连线时 空闲进程的控制 只要数据库在连接状态 他是不进行干预的 不管是否有查询或更新操作 把这个设置小一点 再使用pconnect就比较理想了 ;)

timeout的時間﹐我的經驗值是5-20﹐看你的SERVER的訪問量了~~ (梦飞说的)

访问量越大 这个值就应该越小 否则留出的空闲进程太多 会占用不必要的内存
在一个15分钟在线3000人的论坛上 设置为3比较合适 同时打开pconnect

另外,我再引用一篇文章

数据库连接过多的错误,可能的原因分析及解决办法

QUOTE:
分析

系统不能连接数据库,关键要看两个数据:
1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。最大是16384。
2、数据库当前的连接线程数threads_connected。这是动态变化的。
查看max_connections、max_connections的办法见后。

如果 threads_connected == max_connections 时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现类似强坛的报错信息。

因为创建和销毁数据库的连接,都会消耗系统的资源。而且为了避免在同一时间同时打开过多的连接线程,现在编程一般都使用所谓数据库连接池技术。

但数据库连接池技术,并不能避免程序错误导致连接资源消耗殆尽。

这种情况通常发生在程序未能及时释放数据库连接资源或其他原因造成数据库连接资源不能释放,但强坛系统估计不会发生这种低级的编程错误。
该错误的简便的检查办法是,在刷新强坛页面时,不断监视threads_connected的变化。如果max_connections足够大,而threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了。当然,如果采用数据库连接池技术,threads_connected增长到数据库连接池的最大连接线程数时,就不再增长了。

从强坛出错的情况看,更大的可能性是数据库系统没能进行适当地配置。下面提出一点建议。供参考

让你们的工程师把MySQL的最大允许连接数从默认的100调成32000。这就不会老出现连接过多的问题了。

查看max_connections

进入MySQL,用命令:show variables
查看数据库最大可连接数的变量值:max_connections

查看threads_connected

进入MySQL,用命令:show status
查看当前活动的连接线程变量值:threads_connected

设置max_connections

设置办法是在my.cnf文件中,添加下面的最后红色的一行:

——————————————————————————–

[mysqld]
port=3306
#socket=MySQL
skip-locking
set-variable = key_buffer=16K
set-variable = max_allowed_packet=1M
set-variable = thread_stack=64K
set-variable = table_cache=4
set-variable = sort_buffer=64K
set-variable = net_buffer_length=2K
set-variable = max_connections=32000

——————————————————————————–

修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。

注意:
1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384;
2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥;
3、添加了最大允许连接数,对系统消耗增加不大。
4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通。

可见,mysql的优化,是多样化,且根据环境不同,必须灵活调整的,大家不可生搬硬套,自己慢慢体会吧 />
我这次的教程,就写到这里,感谢大家对我的支持

如果有什么不足,欢迎提出来,我做补充

本帖即穆亦风原创,转贴请注明出处 原帖地址   http://club.muzone.cn/viewthread.php?tid=27794

无觅相关文章插件,快速提升流量