Netbeans 去除中间红线的方法

Netbeans 去除中间红线的方法

工具->选项->编辑器->缩排->右边距,80改成200即可

Linux history 命令详细用法

如果你经常使用 Linux 命令[ming ling]行[ming ling hang],那么使用 history(历史)命令[ming ling]可以有效[you xiao]地提升你的效率。本文将通过实例的方式向你介绍 history 命令[ming ling]的15个用法。

1. 使用 HISTTIMEFORMAT 显示[xian shi]时间戳[shi jian chuo]

当你从命令[ming ling]行[ming ling hang]执行[zhi hang] history 命令[ming ling]后,通常只会显示[xian shi]已执行[zhi hang]命令[ming ling]的序号和命令[ming ling]本身。如果你想要查看命令[ming ling]历史的时间戳[shi jian chuo],那么可以执行[zhi hang]:

# export HISTTIMEFORMAT=’%F %T ‘
# history | more
1 2008-08-05 19:02:39 service network restart
2 2008-08-05 19:02:39 exit
3 2008-08-05 19:02:39 id
4 2008-08-05 19:02:39 cat /etc/redhat-release
2. 使用 Ctrl+R 搜索[sou suo]历史

Ctrl+R 是我经常使用的一个快捷键。此快捷键让你对命令[ming ling]历史进行搜索[sou suo],对于想要重复执[fu zhi]行某个命令[ming ling]的时候非常有用。当找到命令[ming ling]后,通常再按回车键就可以执行[zhi hang]该命令[ming ling]。如果想对找到的命令[ming ling]进行调整[tiao zheng]后再执行[zhi hang],则可以按一下左或右方向键。

# [Press Ctrl+R from the command prompt, which will display the reverse-i-search prompt]
(reverse-i-search)`red‘: cat /etc/redhat-release
[Note: Press enter when you see your command, which will execute the command from the history]
# cat /etc/redhat-release
Fedora release 9 (Sulphur)

3. 快速重复执[fu zhi]行上一条命令[ming ling]

有 4 种方法[fang fa]可以重复执[fu zhi]行上一条命令[ming ling]:
1. 使用上方向键,并回车执行[zhi hang]。
2. 按 !! 并回车执行[zhi hang]。
3. 输入[shu ru] !-1 并回车执行[zhi hang]。
4. 按 Ctrl+P 并回车执行[zhi hang]。

4. 从命令[ming ling]历史中执行[zhi hang]一个指定的命令[ming ling]

在下面的例子中,如果你想重复执[fu zhi]行第 4 条命令[ming ling],那么可以执行[zhi hang] !4:

# history | more
1 service network restart
2 exit
3 id
4 cat /etc/redhat-release
# !4
cat /etc/redhat-release
Fedora release 9 (Sulphur)

5. 通过指定关键字[guan jian zi]来执行[zhi hang]以前的命令[ming ling]

在下面的例子,输入[shu ru] !ps 并回车,将执行[zhi hang]以 ps 打头的命令[ming ling]:

# !ps
ps aux | grep yp
root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp

6. 使用 HISTSIZE 控制[kong zhi]历史命令[ming ling]记录的总行数

将下面两行内容追加[zhui jia]到 .bash_profile 文件[wen jian]并重新登录[deng lu] bash shell,命令[ming ling]历史的记录数将变成 450 条:

# vi ~/.bash_profile
HISTSIZE=450
HISTFILESIZE=450

7. 使用 HISTFILE 更改历史文件[wen jian]名[wen jian ming]称

默认[mo ren]情况[qing kuang]下,命令[ming ling]历史存储在 ~/.bash_history 文件[wen jian]中。添加下列内容到 .bash_profile 文件[wen jian]并重新登录[deng lu] bash shell,将使用 .commandline_warrior 来存储命令[ming ling]历史:

# vi ~/.bash_profile
HISTFILE=/root/.commandline_warrior

8. 使用 HISTCONTROL 从命令[ming ling]历史中剔除连续[lian xu]重复的条目

在下面的例子中,pwd 命令[ming ling]被连续[lian xu]执行[zhi hang]了三次。执行[zhi hang] history 后你会看到三条重复的条目。要剔除这些重复的条目,你可以将 HISTCONTROL 设置[she zhi]为 ignoredups:

# pwd
# pwd
# pwd
# history | tail -4
44 pwd
45 pwd
46 pwd [Note that there are three pwd commands in history, after executing pwd 3 times as shown above]
47 history | tail -4
# export HISTCONTROL=ignoredups
# pwd
# pwd
# pwd
# history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd [Note that there is only one pwd command in the history, even after executing pwd 3 times as shown above]
58 history | tail -4

9. 使用 HISTCONTROL 清除[qing chu]整个命令[ming ling]历史中的重复条目

上例中的 ignoredups 只能剔除连续[lian xu]的重复条目。要清除[qing chu]整个命令[ming ling]历史中的重复条目,可以将 HISTCONTROL 设置[she zhi]成 erasedups:

# export HISTCONTROL=erasedups
# pwd
# service httpd stop
# history | tail -3
38 pwd
39 service httpd stop
40 history | tail -3
# ls -ltr
# service httpd stop
# history | tail -6
35 export HISTCONTROL=erasedups
36 pwd
37 history | tail -3
38 ls -ltr
39 service httpd stop
[Note that the previous service httpd stop after pwd got erased]
40 history | tail -6

10. 使用 HISTCONTROL 强制 history 不记住特定的命令[ming ling]

将 HISTCONTROL 设置[she zhi]为 ignorespace,并在不想被记住的命令[ming ling]前面输入[shu ru]一个空格:

# export HISTCONTROL=ignorespace # ls -ltr # pwd # service httpd stop [Note that there is a
space at the beginning of service, to ignore this command from history] # history | tail -3 67 ls
-ltr 68 pwd 69 history | tail -3

11. 使用 -c 选项[xuan xiang]清除[qing chu]所有的命令[ming ling]历史

如果你想清除[qing chu]所有的命令[ming ling]历史,可以执行[zhi hang]:

# history -c

12. 命令[ming ling]替换[ti huan]

在下面的例子里,!!:$ 将为当前的命令[ming ling]获得上一条命令[ming ling]的参数[can shu]:

# ls anaconda-ks.cfg
anaconda-ks.cfg
# vi !!:$
vi anaconda-ks.cfg

下例中,!^ 从上一条命令[ming ling]获得第一项参数[can shu]:

# cp anaconda-ks.cfg anaconda-ks.cfg.bak
anaconda-ks.cfg
# vi -5 !^
vi anaconda-ks.cfg

13. 为特定的命令[ming ling]替换[ti huan]指定的参数[can shu]

在下面的例子,!cp:2 从命令[ming ling]历史中搜索[sou suo]以 cp 开头的命令[ming ling],并获取它的第二项参数[can shu]:

# cp ~/longname.txt /really/a/very/long/path/long-filename.txt
# ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt

下例里,!cp:$ 获取 cp 命令[ming ling]的最后一项参数[can shu]:

# ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt

14. 使用 HISTSIZE 禁用 history

如果你想禁用 history,可以将 HISTSIZE 设置[she zhi]为 0:

# export HISTSIZE=0
# history
# [Note that history did not display anything]

15. 使用 HISTIGNORE 忽略历史中的特定命令[ming ling]

下面的例子,将忽略 pwd、ls、ls -ltr 等命令[ming ling]:

# export HISTIGNORE=”pwd:ls:ls -ltr:”
# pwd
# ls
# ls -ltr
# service httpd stop
# history | tail -3
79 export HISTIGNORE=”pwd:ls:ls -ltr:”
80 service httpd stop
81 history
[Note that history did not record pwd, ls and ls -ltr]

PHP.ini配置文件详解

php.ini文件配置详解

php.ini 说明

php.ini  优化

;;;;;;;;;;;
; 警告 ;
;;;;;;;;;;;
; 此配置文件是对于新安装的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 =

; 设定某些的环境变量可能成为潜在的安全隐患.
; 此指令包含一个逗号分隔的前导列表.
; 在安全模式中, 用户可能只能改变符合这里所给出前导字符的变量.
; 默认情况下,用户只能改变以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分割输入到变量中的分隔符.
; 默认是 “&”.
; 注意: 所有包含在指令内的字符都会被认为是分隔符!
;arg_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

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

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

; PHP 3.0 老版本的兼容模式.
mssql.compatability_mode = Off

; 连接超时
;mssql.connect_timeout = 5

; 查询超时
;mssql.timeout = 60

; 有效范围 0 – 2147483647.  默认 = 4096.
;mssql.textlimit = 4096

; 有效范围 0 – 2147483647.  默认 = 4096.
;mssql.textsize = 4096

; 每批记录的数量限制.  0 = 所有记录在一批内.
;mssql.batchsize = 0

; 指定 datetime 和 datetim4 栏如何返回
; On => 返回数据转换到SQL服务器设置的格式
; Off => 使用 YYYY-MM-DD hh:mm:ss 返回
;mssql.datetimeconvert = On

; 当连接到服务器时使用NT验证
mssql.secure_connection = Off

; 指定最大进程数. -1 = 库默认
; msdlib 默认 25
; FreeTDS 默认 4096
;mssql.max_procs = -1

; 指定客户端字符集.
; 如果为空或者没有指定,客户端字符集将会使用freetds.conf的配置
; 只有和FreeTDS编译时会被使用
;mssql.charset = “ISO-8859-1″

[Assertion]
; 断言(expr); 默认打开.
;assert.active = On

; 对于每个失败断言发起一个PHP警告.
;assert.warning = On

; 默认不要保释.
;assert.bail = Off

; 如果断言失败则调用用户自定义函数.
;assert.callback = 0

; 使用当前 error_reporting() Eval一个表达式.  如果你想要在eval()附近error_reporting(0) ,那设置为true.
;assert.quiet_eval = 0

[COM]
; 包含GUID,IID或者TypeLibs的文件的文件名的文件的路径
;com.typelib_file =
; 允许 Distributed-COM 调用
;com.allow_dcom = true
; 自动注册位于com_load()函数的组件typlib的常量
;com.autoregister_typelib = true
; 注册常量大小写敏感
;com.autoregister_casesensitive = false
; 当有重复常量注册时显示警告
;com.autoregister_verbose = true

[mbstring]
; 内部字符表示的语言.
;mbstring.language = Japanese

; 内部/脚本编码.
; 部分编码无法作为内部编码使用.
; (例如. SJIS, BIG5, ISO-2022-*)
;mbstring.internal_encoding = EUC-JP

; http 输入编码.
;mbstring.http_input = auto

; http 输出编码. mb_output_handler 必须作为函数被注册为输出缓冲
;mbstring.http_output = SJIS

; 按照mbstring.internal_encoding的设置打开自动编码转换
; 当设置为On时,输入字符被转换为内部编码.
; 注意: 不要针对可移植库/应用使用自动编码转换.
;mbstring.encoding_translation = Off

; 自动编码检测序列
; 自动意味着
;mbstring.detect_order = auto

; 当无法将字符从一种转换到另一种时使用的置换符号
;mbstring.substitute_character = none;

; 使用mbstring函数 覆盖(替换) 单字节函数.
; mail(), ereg(), 等等都会被 mb_send_mail(), mb_ereg() 等等覆盖,
; 可以取的值是 0,1,2,4 或者他们的组合.
; 例如, 7 就是覆盖所有函数.
; 0: 不覆盖
; 1: 覆盖 mail() 函数
; 2: 覆盖 str*() 函数
; 4: 覆盖 ereg*() 函数
;mbstring.func_overload = 0

[FrontBase]
;fbsql.allow_persistent = On
;fbsql.autocommit = On
;fbsql.show_timestamp_decimals = Off
;fbsql.default_database =
;fbsql.default_database_password =
;fbsql.default_host =
;fbsql.default_password =
;fbsql.default_user = “_SYSTEM”
;fbsql.generate_warnings = Off
;fbsql.max_connections = 128
;fbsql.max_links = 128
;fbsql.max_persistent = -1
;fbsql.max_results = 128

[gd]
; 告知jpeg解码器libjpeg警告并且尝试创建一个gd图像. 此警告会被作为一个通告显示
; 默认为关闭
;gd.jpeg_ignore_warning = 0

[exif]
; Exif UNICODE 用户注释会被作为UCS-2BE/UCS-2LE 和 JIS 来进行 JIS处理.
; 当 mbstring.internal_encoding 设置为空,如果有 mbstring 支持,则会自动转换到给出的对应编码设置的编码.
; 对于解码设置你可以在motorola和intel字符序列上进行选择. 解码设置不能设置为空.
;exif.encode_unicode = ISO-8859-15
;exif.decode_unicode_motorola = UCS-2BE
;exif.decode_unicode_intel    = UCS-2LE
;exif.encode_jis =
;exif.decode_jis_motorola = JIS
;exif.decode_jis_intel    = JIS

[Tidy]
; 当调用tidy时,默认指向tidy配置文件的路径
;tidy.default_config = /usr/local/lib/php/default.tcfg

; tidy是否自动清除和修复输出?
; 警告: 不要在你产生非html内容时使用此项,例如产生动态图片时
tidy.clean_output = Off

[soap]
; 打开或关闭WSDL缓冲特性.
soap.wsdl_cache_enabled=1
; 设置SOAP扩展存放缓冲文件的目录.
soap.wsdl_cache_dir=”/tmp”
; (存活时间) 设置当缓冲文件被用来替换原有缓冲文件的秒数.
soap.wsdl_cache_ttl=86400

; Local Variables:
; tab-width: 4
; End:

在 NetBeans IDE 中调试 PHP 源代码

目录

本页上的内容适用 NetBeans IDE 6.5

要学习本教程,您需要具备以下软件和资源。

软件或资源 要求的版本
NetBeans IDE PHP 下载包 6.5
PHP 引擎 版本 5
Web 服务器 推荐使用 Apache HTTP Server 2.2
PHP 调试器 XDebug 2.0 或更高版本

准备工作

要在适用于 PHP 的 NetBeans IDE 中成功调试 PHP 应用程序,您需要为进行 PHP 开发安装并配置 PHP 引擎、Apache 本地 Web 服务器和 XDebug 调试器。

启用 XDebug

安装 XDebug 后,您必须在 PHP 引擎中启用它。

启用 XDebug:

  1. 找到 PHP 引擎所使用的 php.ini 文件。如果运行 phpinfo(),此文件将显示在第一个表中的 “Loaded Configuration File”(已装入的配置文件)表头下。
  2. 在装入的 php.ini 中取消注释或添加以下行:
  3. zend_extension_ts="<path to the php folder>/php_xdebug-2.0.2-5.2.5.dll"
    xdebug.remote_enable=1
    xdebug.remote_host=127.0.0.1
    xdebug.remote_port=9000
    xdebug.remote_handler=dbgp

    有关如何配置 XDebug 的详细信息,请单击此处
    注意:请确保您指定的路径与安装过程中所确定的相应文件的位置匹配。

  4. 如果使用 XAMPP 包,则需要禁用 Zend 优化器,因为它会阻止 XDebug。找到相关行,然后删除它们或将其标记为注释。
    • /xampplite/php/php.ini
    • /xampplite/apache/bin/php.in
  5. 注意:如果使用 XAMPP Lite,则需要对以下两个 php.ini 文件进行上述更改:

如何使用 XDebug 进行 PHP 调试

如果在 php.ini 文件中启用了 XDebug,XDebug 便可以随时暂停和恢复 PHP 程序执行。当程序执行暂停时,XDebug 可以检索有关当前程序状态的信息,例如读取程序变量的值。实际上,此过程可以用下列工作流来表示:

  • 用户在 PHP 源代码执行应该暂停的行上设置一个断点。
  • 当到达此行时,用户按 F7 和 F8 键逐行执行脚本,并检查变量的值。

调试器窗口

启动调试会话时,将在主编辑器窗口下打开一组调试器窗口。要添加新窗口,请选择“窗口”>“调试”。可以使用下列窗口:

  • “局部变量”窗口,显示已初始化的变量及其类型和值的列表。
  • “监视”窗口,显示用户定义的表达式及其值的列表。
  • “调用栈”窗口,按倒序显示被调用函数的列表。最后调用的函数将显示在列表顶部。
  • “断点”窗口,显示设置了断点的行所在的文件以及行号的列表。
  • “会话”窗口,显示当前活动调试会话的列表。
  • “线程”窗口
  • “源”窗口
  • “HTTP 客户端监视器”窗口

调试会话

以下过程是典型调试会话的工作流。

运行调试会话:

  1. 启动 IDE,运行项目,然后打开包含要调试的源代码的文件。
  2. 将光标置于某一行上,您希望在该行之前自动执行 PHP 脚本。
  3. 要设置断点,请按 Ctrl-F8 组合键或选择“调试”>“开启/关闭行断点”。
  4. 在“项目”窗口中,导航至当前项目节点,单击鼠标右键,然后从弹出式菜单中选择“调试”。IDE 将打开调试器窗口并在调试器中运行该项目,直至到达断点为止。
    注意:如果当前项目设置为主项目,则可以选择“调试”>“调试主项目”,按 Ctrl-F5 组合键或单击 “调试主项目”按钮
  5. 切换至“局部变量”窗口。该窗口显示当前函数中已初始化的所有变量及其类型和值。
  6. 要查看该函数外部的变量值,请将光标置于此变量出现的某个位置上。工具提示会显示变量值。
  7. 要逐行(包括所有被调用函数中的行)执行程序,请按 F7 键或选择“调试”>“步入”,然后在“局部变量”窗口中监视这些变量值的更改。
  8. 要通过监视表达式的更改来检查程序逻辑,请定义一个新监视:
    1. 要打开“监视”窗口,请选择“窗口”>“调试”>“监视”,或按 Ctrl-Shift-2 组合键。将打开“监视”窗口。
    2. 在“监视”窗口中的任意位置单击鼠标右键,然后从弹出式菜单中选择“新建监视”。将打开“新建监视”窗口。
    3. 输入监视表达式,然后单击“确定”。
    4. 现在,您便可以在调试过程中进行其他检查。

  9. 要取消对某个函数中代码的逐行执行操作并跳至该函数调用后的下一行,请按 Ctrl-F7 组合键或选择“调试”>“步出”。
  10. 要跳过对某个函数中代码的逐行执行操作,获取该函数返回的值,并跳至该函数调用后的下一行,请按 F8 键或选择“调试”>“步过”。
  11. 要暂停调试会话,请选择“调试”>“暂停”。
  12. 要继续调试会话,请选择“调试”>“继续”或按 继续调试会话按钮
  13. 要取消调试会话,请按 取消调试会话按钮
  14. 在程序结束时,调试器窗口会关闭。

样例调试会话

此部分说明了一个标准的调试会话。

  1. 使用以下参数创建新的 PHP 项目:
    • 项目类型 – PHP 应用程序
    • 源位置 – htdocs 文件夹的缺省位置
    • 运行配置 – 本地 Web 站点

    有关设置 PHP 项目的更多详细信息,请参见设置 PHP 项目文档。

  2. 在项目创建完成后,将光标置于“源文件”节点上,从弹出式菜单中选择“属性”,然后打开“调试”窗口。选中“调试服务器端 PHP”复选框。
  3. 要在会话过程中使用热键,请将光标置于项目节点上,然后从弹出式菜单中选择“设置为主项目”。
  4. index.php 文件中,输入以下代码:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      	<head>
      		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      			<title>NetBeans PHP debugging sample</title>
    		</head>
    <body>
    	<?php
      	$m=5;
      	$n=10;
      	  $sum_of_factorials = calculate_sum_of_factorials ($m, $n);
      	  echo "The sum of factorials of the entered integers is " . $sum_of_factorials;
    
    	    function calculate_sum_of_factorials ($argument1, $argument2) {
      	 	$factorial1 = calculate_factorial ($argument1);
      	 	$factorial2 = calculate_factorial ($argument2);
      	 	$result = calculate_sum ($factorial1, $factorial2);
      	 	return $result;
      		}
    
    	  function calculate_factorial ($argument) {
      	  	$factorial_result = 1;
      	 	for ($i=1; $i<=$argument; $i++) {
      	 		$factorial_result = $factorial_result*$i;
      	 	}
      			return $factorial_result;
      		}
    
    	    function calculate_sum ($argument1, $argument2) {
     			return $argument1 + $argument2;
         	}
    ?>
      </body>
    </html>

    该代码包含三个函数:

    • calculate_factorial () 函数
    • calcualte_sum () 函数
    • calculate_sum_of_factorials () 函数,该函数调用 calculate_factorial () 函数两次,再调用 calcualte_sum () 函数一次,然后返回计算的阶乘和。
  5. 在 PHP 块的开头设置一个断点 (Ctrl-F8):
    <?php
  6. 要启动调试,请单击 “调试主项目”按钮。调试器将在断点处停止。
  7. 按 F7 键三次。调试器将在调用函数 calculate_sum_of_factorials () 的行上停止。“局部变量”窗口会显示变量 $m$n 以及它们的值:
    调试器在函数调用处停止
  8. 要步入函数 calculate_sum_of_factorials (),请按 F7 键。调试器开始执行函数 calculate_sum_of_factorials () 中的代码,然后在函数 calculate_factorial () 的调用处停止。
    调试器在嵌入函数 calculate_factorial () 的调用处停止。
    现在,“局部变量”窗口将显示函数 calculate_sum_of_factorials () 中声明的局部变量 $argument1$argument2
    “局部变量”窗口显示在调用嵌入函数之前当前函数中的变量
  9. 按 F7 键。调试器开始执行函数 calculate_factorial () 中的代码。“调用栈”窗口将按倒序显示函数的调用栈,最后调用的函数位于列表顶部:
    “调用栈”窗口显示按倒序列出的三个函数调用。
  10. 按 F7 键步入循环。可在“局部变量”窗口中查看变量值。
    “局部变量”窗口显示变量。可检查循环是否正确。
  11. 如果您确定代码运行正常,请按 Ctrl-F7 组合键取消函数执行。程序将在调用函数 calculate_factorial () 后返回至下一行。
    注意:您也可以按 F7 键,直到程序执行完函数 calculate_factorial () 为止。您也会在调用该函数后返回至下一行。
    调试器在嵌入函数 calculate_factorial () 的第二次调用处停止。
  12. 由于您刚检查了函数 calculate_factorial (),并且确定其运行正常,因此可以跳过对该函数的再次执行操作(“步过”)。要步过该函数,请按 F8 键。程序将在函数 calculate_sum () 的调用处停止。
    调试器在嵌入函数 calculate_sum () 的调用处停止。
  13. 要步入函数 calculate_sum (),请按 F7 键。
  14. 要步过该函数,请按 F8 键。对于任何一种情况,调试器都会在函数 calculate_sum_of_factorials () 的最后一行停止。
    调试器在 calcualate_sum_of_factorials () 函数中的 return $result 语句处停止。
  15. 按 F7 键。调试器将移到 echo 语句所在的行上。
  16. 按 F7 键,直到调试器退出程序为止。将打开浏览器窗口并显示程序执行的结果:
    浏览器窗口中的程序执行输出。

使用其他监视

可以定义其他监视表达式来跟踪程序的执行。这有助于捕获错误。

  1. 按如下所示更新代码(将加号替换为减号):
    function calculate_sum ($argument1, $argument2) {
     			return $argument1 - argument2;
         	}

    假定运算符的改变是由于拼写错误造成的,而实际上您需要计算和。

  2. 选择“调试”>“新建监视”或按 Ctrl-Shift-F6 组合键。将打开“新建监视”窗口。
  3. 输入以下表达式,然后单击“确定”。
    $factorial1+$factorial2

    “监视”窗口中将显示新表达式。

  4. 运行调试会话。当调试器在以下行停止时
    return $result;

    将“监视”窗口中表达式的值与“局部变量”窗口中 $result 的值进行比较。它们应该相同,但在此示例中不同。
    使用监视捕获错误

此示例非常简单,它为您提供了使用监视的一些基本概念。

PHP 和 HTML 混合用例

您可以调试同时包含 PHP 块和 HTML 块的代码。在样例调试会话部分的示例中,对值进行了固定编码。现在,将通过用于输入值的 HTML 输入表单来扩展该代码。

  1. 在 <?php ?> 块的上方添加以下 HTML 代码:
    <form action="index.php" method="POST">
           Enter the first integer, please:
           <input type="text" name="first_integer"/><br/>
           Enter the second integer, please:
           <input type="text" name="second_integer"/><br/>
           <input type="submit" name="enter" value="Enter"/>
    </form>

    有关详细信息,请参见 HTML 输入表单

  2. 将 <?php ?> 块顶部的以下行:
    $m=5;
      	$n=10;
      	  $sum_of_factorials = calculate_sum_of_factorials ($m, $n);
      	  echo "The sum of factorials of the entered integers is " . $sum_of_factorials;

    替换为以下代码:

    if (array_key_exists ("first_integer", $_POST) &&
        array_key_exists ("second_integer", $_POST)) {
    				$result = calculate_sum_of_factorials ($_POST["first_integer"], $_POST["second_integer"]);
                    echo "Sum of factorials is " . $sum_of_factorials;
                }
  3. 在 <?php ?> 块的开头设置一个断点,然后启动调试会话
  4. 按 F7 键。调试器将步入程序。同时,会打开浏览器窗口,但不显示输入表单。这是调试器的正确行为,因为它必须首先通过 Web 页的整个源代码,然后才能显示该页面。实际上,这意味着调试器通过了两次代码。第一次是调试器处理代码以显示 HTML 输入表单。第二次是调试器逐步执行 PHP 代码。
  5. 按 F7 键,直到调试器到达程序末尾并且打开输入表单为止。
  6. 填写该表单,然后单击 Enter 键。将继续调试会话(如样例调试会话部分中所述)。

理财赚钱:不懂这些道理,你注定就是穷打工的命!

转自: http://bwqcw.cn/?p=8562  版权是他的

首先声明:如果你是“愤青”或“类愤青”,对不起,请你离开,我怕我的观点再次伤害你那“纯洁”得几乎不识人间烟火的心灵!

如果你想从此改变自己,那么,就花上十几分钟的时间,仔仔细细把这篇文章看完。如果你想改变自己的命运,那么,从现在就开始行动。有时候我们之 所以失败,99%的原因是因为说得太多,而行动得太少!那1%的人或许并不聪明,或许只是小学毕业,但是人家成功了,做了你的上司,那是因为人家善于用行 动证明自己,而不是嘴巴。我不敢保证看了我这篇文章就一定会使你平步青云,我没有那个本事。如果你有一天飞黄腾达,也绝对与这篇文章没有直接的关系。因 为,你的命运,只掌握在你自己的手中!

同样是打工,为什么你一个月只有2、3K,而唐骏的身价却可以高达10亿?

或许你会反驳我,说人人都成为唐骏的概率有多大?的确,人人都成为唐骏的确不现实,但是经过努力,月薪达到8K、1W的总是大有人在吧?虽然不能达到大富大贵,但也不至于被女朋友看不起,付不起房贷首付款吧?

很多人都喜欢抱怨,觉得这个世道不好。但现实是,在同样世道不好的情况下,为什么有的人成功,而你却碌碌无为?差距在哪里?怪世道不好吗?还是 怪自己没本事?我说这话可能你不爱听。但是一个无法辩驳的事实是:你要是有本事,为什么月薪只有2、3K或者3、4K?事实胜于雄辩。所以,如果看到这里 还想抱怨的人,那么,也请你趁早离开。抱怨永远解决不了问题。

职场是一个复杂的综合体。看到别人在职场上呼风唤雨,你认为很惬意,是么?但是他们风光表面的背后,又有几个有看到他们曾经付出的巨大艰辛?这 个社会其实是很公平的。努力不一定有回报,但是如果不努力,就一定没有回报。要怪,就怪自己投错胎,怪自己的老子没本事,当初没有给你留下一大笔可以挥霍 的资本!

说归说,对于那些想改变自己的朋友们来说,还是需要看清楚一些东西,有一些经验也想和大家分享分享。同样是职场人士,我也有我的经验和感受。在 打工的3年里,我得到了7次加薪(同时进入公司的员工,加薪不超过2次的员工大有人在),顺利地从员工做到了总监,是公司所有员工中成长最快的。我敢肯 定,在看过这篇文章的人当中,肯定有人比我更优秀。但是对于那些更渴望得到帮助的朋友们来说,我还是希望把自己的经验写出来,与大家分享。

我自己写了一篇文章,叫《决定前程的8件事,你做到了几件?》在这里整理出来,希望能对大家有所帮助。

一、一定要清楚自己未来的目标是什么

很多人把职场想得太美好,其实不然。如果你没有规划好,你就会难免遇到各种各样的问题:工作不开心;没有前进的动力;工作不是自己想像的那么 好;自己的才能无法发挥;看到以前的同学待遇如何如何,便受不了刺激,急切地想跳槽;当初为了生存而找的工作,根本就不适合自己……

这是几乎所有初入职场的朋友都会面临的问题。而这些问题通常会在步入职场的1-3年之内最明显(3年之后之所以不明显,是因为你已经被现实折磨 得太久了,已经被种种不平现象同化了,因此也就习惯了。你曾经的种种抱负被现实碾得粉碎,于是,你也从一个志向远大的年轻人一下子变成了一个碌碌无为、甘 于平庸、成天为了生计而奔走的普通打工者)。

如果不及早解决这些问题,那么,你就会荒废这3年的时间(有的人可能会更长),而对于一个职场新人来说,这3年至关重要,是锻炼能力、积累资本 的黄金3年!一旦错过,则要花费更多的时间,从头再来,重新弥补!更有甚者,可能一辈子都无法弥补!这绝对不是危言耸听!因此,如果你的职场年龄还没有超 过3年,恭喜你,还有改变命运的机会。而一旦超过了3年,那么,你的每一次改变,都将付出巨大的代价!

为什么要清楚自己的目标?因为,有了目标,才有行动的指南。知道自己想干什么,喜欢干什么,这才是你前进的最终动力。工作不开心、动力不足、盲 目跳槽的最根本原因是职业目标不清晰。没有目标,便没有了追求,于是,所有的行动只是为了挣一口饭吃。你根本没有考虑过自己的未来应该端什么饭碗。

或许你在30岁之前还有挥霍的资本,因为年轻嘛,做什么都不怕。连广告上都说了,“30岁之前,有什么好怕的?!”而一旦过了30岁,你走的每 一步都必须要慎之又慎,因为:你要结婚、你要养活老婆孩子、你要供房贷、你要供养年迈的父母、孩子大了还要上学、父母年迈了需要照顾……等等等等,所有的 这些责任,都要你来承担。如果没有规划,一旦出现问题,你只能自乱阵脚。

人生的职业发展如同品牌塑造一样,只不过你的产品就是你自己。你自己的发展目标,也就是你人生的品牌目标。有了目标,就要考虑该怎么走。每走一 步,都应该离目标更近,而不是更远。所以,你每做一个决定的时候,要衡量这个决定对不对,唯一的标准就是:它是不是能够帮助你离目标更近?如果不是,那 么,赶紧住手,因为,你走的路偏离了你的目标!再走下去,只能错得更离谱!

对于人生目标,涉及到职业生涯规划的问题。这是一个老话题,很多人以为自己很了解了,其实却远不是那么回事。大家可以看一些相关书籍,但在中 国,此类书籍的最大问题就是说教性比较强,实用性非常差!很多人看了书之后依然一头雾水,不知所措,看了之后反而更糊涂。我的意见是,最好还是找一些专门 的机构咨询一下。

注意:是咨询,不是测评。二者的区别在于,咨询的意义在于“为客户提供可应用性的解决方案”,而测评则仅仅局限于“帮助你认识自己”,至于怎么 做,怎样行动才能更接近自己的目标,不知道!因为测评的人都是专家,而国内的专家都是做研究的,没有实战经验,甚至对职场升迁是怎么回事都不太清楚,怎么 可能指导你做实战规划?建议大家去做一下职业生涯规划。如果现在不解决,恐怕未来3年你都会白白浪费,更有可能因此而毁了你的一生!

记住:有了规划,不一定能够成功;但没有规划,一定不会成功!

二、能力固然重要,但并不能代表全部

这里所说的能力,是指专业技能。步入职场你会发现,能力其实并没有你想像的那么重要,它并不是是步步高升的全部资本。你会发现一个能力不太强的 人做了你的上司,只因为他在这个公司干了10年——这说明“资历”是你高升的本钱(这种现象,在国有企业和政府机构里特别明显,因此,在国企工作的朋友和 公务员同志要注意了);有时候你会发现能力并不怎么强,但是与老板关系非常好的人通常能够得到提拔——这说明“关系”也是本钱。在我原先工作的公司,有两 个特别明显的例子。

一个有着丰富工作经验的男士,跳槽来到公司,能力也特别强,但就是与同事处理不好关系,自认为自己非常牛,喜欢主动当别人的“导师”,动不动就 对别人的工作指手画脚,顶头上司非常讨厌他;而同时进入公司的另外一位女士,能力不是特别强,但是非常踏实、勤奋、与其他同事相处得也很好,能够顾全大 局。最后试用期结束时,那位女士得到了公司的认可,而那位男士则收到了公司的辞退通知。

在职场上,一定要对职场有清醒的认识,不要生活在梦幻当中,不要太理想化,不要标新立异,不要恃才傲物,不要认为有能力就可以走遍天下。专业技 能固然重要,但是职场发展看的是一个人的综合素质。综合素质高的人,才是职场发展的“潜力股”。这些综合素质,包括沟通能力、人际关系能力、团队合作能 力、管理能力、工作态度及敬业精神等各种“软实力”。

对于有些朋友而言,可能会对这些“软实力”不屑一顾。很多人会说,如果老板喜欢爱拍马屁的人,难道我就要委屈自己,学着去拍马屁?很不幸,我会 告诉你,答案是肯定的,你一定要学会拍马屁,否则吃亏的是自己。但要声明的是,我不是教你诈。中国有句成语,叫外圆内方,用在人际交往上,就是说你与人相 处要学会妥善处理各种关系,但不可因此而失去了内心的准则,否则就变质了。尤其在中国这种注重人情的社会,这种人际交往的能力一定要好好练练。

如果有时间,看一下《厚黑学》,了解一下社会现实,切忌不可因此而迷失了自己。

三、要手足够的“亮剑”资本

有的大学生经常会跟我说,我毕业之后一定要找到一份月薪多少多少的工作,争取做到什么什么职位。这时候我总是会耐心听完他们的“远大蓝图”,然后问一句:“你凭什么达到你的目标?你的资本是什么?”然后他就会哑口无言。

我相信读过这篇文章的人也会和这位大学生一样,有着自己的伟大抱负,但是大学四年下来,你有没有想到,要实现这些目标,你的资本是什么?对于很多已经身在职场的朋友而言,你晋升的资本又是什么?

人生在发展过程中,很多时候都需要毫不犹豫地向别人展示自己的实力,要敢于展示,善于展示,这就是“亮剑”。因为这年头,酒香也怕巷子深,是金 子未必会发光。相反,发光的倒是那些碎玻璃、烂瓶子。中国什么都缺,就是不缺人。茫茫人海,如果你一直都谦虚地默默无闻,那么,你就大错特错了。

既然具备了“亮剑”的意识,那么,下一步你就要考虑到亮什么剑:我到底拿什么资本给人家看?对于职场上的朋友而言,你“亮剑”的资本又在哪里? 你的业绩提升了吗?你的能力提升了吗?你在一年内看过多少本对自己的职业有益的书籍?你参加过几次培训班来为自己充电?如果没有,你又凭什么让老板为你加 工资?靠抱怨?你肯定会提前被职场淘汰出局!

四、慎重对待第一份工作

这一观点,对于大学生来说,更有意义。

现在整个社会、媒体、专家等等各种单位都一直在鼓吹“先就业,再择业”。这种论调不是今年就有,而是多好多年前就出现了,并且屡屡出现,不绝于耳。相信当年我们大学毕业时候,也会有很多人相信了这一点吧?管它呢,骑驴找马,先找份工作挣钱填饱肚子再说!

但是根据本人自身的经验及职场发展的现实情况来看,本人绝对不赞同这种说法。相信现在在职场上发展不顺的朋友,多半也和第一份工作有关系吧?俗话说,“男怕入错行,女怕嫁错郎。”第一步错了,以后就会经常犯错。正所谓一步错,步步错。

为什么第一分工作这么重要呢?原因有三:

1、先入为主的观念影响。

具体是指,先听进去的话或先获得的印象往往在头脑中占有主导地位,以后再遇到不同的意见时,就不容易接受。举个最简单的例子:在你的头脑印象 中,诺基亚已经是手机的代名词。如果有一天诺基亚生产出了一种“诺基亚牌电脑”,你的心里是什么感觉?非常不对劲对不对?这主是先入为主现象。

我原先有一个同事,曾经在海尔工作过,她用的是海尔的手机,功能也非常不错,但她总是说要换一部手机,我问她原因,她说,兜里装着海尔的手机, 总感觉像装了一个大冰箱,非常不舒服。为什么?先入为主呗!不要小看这一现象,其实对人的潜意识影响非常大。海尔的手机和电脑等IT产品卖得不好,相当一 部分是因为先入为主:大家普遍认为海尔是家电的代名词,而不是IT的代名词。

对于求职的大学生来说,这一观念同样会影响你以后的发展。你的第一份工作会对你以后的工作产生影响,你跳槽时,你的新雇主也会通过你的第一份工 作经验来判断你是否能够胜任这份工作。曾经有一个大学生,毕业之后想做策划,就找了一家广告公司。刚进公司时,因为文笔不错,被安排到了文案的位子上。而 与他同时进去的另外一个人,恰恰因为文笔不好而被安排到了策划的位子上。后来她屡次想转行做策划,但都是因为前一份工作经验的影响,而始终没有得到转行的 机会。

2、职场中不允许从头再来。

如果公司招聘的是有几年工作经验的老员工,一定要求是“相关经验”!这一点至关重要!因为这样的员工一般不需要培训,可以直接上岗,会很快为公 司带来最大的效益。如果是工作几年以后再打算转行的应聘人员,一般不会受到重视,一是不会给公司直接带来效益,二是培训起来也比较困难,思维已经固化。与 其这样,倒不如招一名应届生,白纸一张,可塑性强,发展起来潜力更大。

所以,一旦有了工作经验之后,再想转行从头再来,难度相当大。除非你认识公司的高层领导,可以得到一个机会,否则,很难。

3、时间成本不允许。

步入职场的前三年,是一个人职业成长的最重要、最关键的时期。如果你这时候还把工作的重点放在骑驴找马式的转行上,则会浪费你最宝贵的青春,你的成长也因此比其他人慢一步,而很多晋升的机会将因此而失去。

所以,对待第一份工作,一定要慎重。找工作就像结婚,情愿不结,绝不能乱结。

如果现在你刚刚步入职场还不到3年,劝你趁早做一个职业规划,亡羊补牢,尤未为晚。一旦你结婚了买房子了,你再想弥补都已经晚了!

五、要保持一种“空杯心态”

给大家讲一个故事。古时候有一个佛学造诣很深的人,听说某个寺庙里有位德高望重的老禅师,便去拜访。老禅师的徒弟接待他时,他态度傲慢,心想: 我是佛学造诣很深的人,你算老几?后来老禅师又十分恭敬地接待了他,并为他沏茶。可在倒水时,明明杯子已经满了,老禅师还不停地倒。他不解地问:“大师, 为什么杯子已经满了,还要往里倒?”大师说:“是啊,既然已满了,干嘛还要倒呢?”

禅师的意思是,既然你已经很有学问了,干嘛还要到我这里求教?这就是“空杯心态”的故事哲理。它最直接的含义就是一个装满水的杯子很难接纳新东 西,要将心里的“杯子”倒空,将自己所重视、在乎的很多东西以及曾经辉煌的过去从心态上彻底了结清空,只有将心倒空了,才会有外在的松手,才能拥有更大的 成功。这是每一个想在职场发展的人所必须拥有的最重要的心态。它告诉我们一个道理:做事的前提是先要有好心态。如果想学到更多的学问,先要把自己想象成 “一个空着的杯子”,而不是骄傲自满。

我见过很多的大学毕业生,刚进入公司时常常处处吹牛,说自己在学校如何如何,本来可以找到更好的工作,迫不得已才来到了这里等等之类的话,好像 这家公司委屈了自己。在这里提醒一下那些即将步入职场的大学生:这种心态千万要不得!不要认为自己很牛。还是那句你不爱听的话:中国什么都缺,就是不缺 人!话又说回来,你要是这么牛,为什么不像比尔?盖茨、戴尔、乔布斯那样,大学没毕业就退学去创办一家世界级的大企业?火车不是推的,牛皮不是吹的。

你要是有本事,就用事实证明给人家看,而不是成天抱怨!

对于身在职场的朋友而言,这一心态同样重要。中国有一个词,叫“虚怀若谷”。我们都知道,优秀的人有极高的素养,甚至是虚怀若谷,他们都有一个 能包容一切的胸怀,有了这样的胸怀,你在职场上就会获得别人的尊重,就会获得更多的发展机会。类似的词还有“大智若愚”“大巧若拙”等等,不多说,自己去 体会。

六、要懂一点做人的常识

职场就像一个大熔炉。在职场中,不仅仅是要挣一碗饭吃,更重要的是学会做人的道理。如果连最起码的道理都不懂,你不仅得不到别人的尊重,更会失去更多的发展机会。因为,在中国,人际关系也是生产力。中国有句古话:得道多助,失道寡助。

我见过很多人,虽然已经工作多年,但对于做人,却连一点最基本的常识都不懂。做人的道理万万千,但其中最重要的,莫过于以下三条:

1、严于律己,宽以待人。

职场不同于生活。虽然职场上同事之间的相互关系表面上会比较好,但你总会感觉到缺点儿什么。非常明显的一点,就是大家都在相互利用,人与人之间难免会因为利益关系而闹得不愉快。这时候,你若是锱铢必较,势必引起同事之间的不愉快。

在这种情况下,为避免纠纷,同时也为了赢得他人的尊重,你要学会大度一些,容忍一些。出现问题时,首先想想是不是自己出了问题,而不是一出现问题就去找别人的责任(长此以往,你的心态就会变得非常不平衡,因此也难以容人了)。

严于律己,宽以待人,是十分必要的。长期下去,你会积累很多的人脉,会得到大家的尊重;而你需要帮助时,大家也乐意伸手。

2、学会倾听。

无论什么时候,倾听都显示出一个人的职业素养。与别人交谈时,一定要记住等对方说完话时再发表意见,切不可中途插话或者打断他人。通过这种方式,大家都乐意和你交往,同样也会有助于树立你个人在大家心目中的形象。

3、诚实守信。

职业中固然处处充满了相互利用、利益至上的现象,在这种情况下,诚实守信仍然不失为一种传统美德。诚信同样可以带来效益。只要你诚实守信,长此 以往,大家都会对你形成一种良好的印象,都愿意和你交往。而那种两面三刀、当面一套背后一套的人,固然可以占一点小便宜,但要想成就大事业,诚实守信的基 本原则绝对不能丢。

七、要学会遵守游戏规则

我为什么在文章一开头就提醒“愤青”或者“类愤青”们不要看这篇文章?

因为他们多半是放荡不羁、不会遵守游戏规则的主儿!很多人都会感觉到,在职场上发展,不仅会受到各种约束,而且处处都充满了不公平现象。比如上 班迟到老板会扣你工资,但你加班的时候却从来没有拿过加班工资。这是最常见的一种现象,其他不公平的现象也比比皆是,这里就不多就了,大家都有体会。

在这个世界上,不要奢求公平。那只是一种乌托邦式的理想,从来都不存在于现实社会中。

员工和老板之间的关系,就好像是一场游戏。是游戏就会有游戏规划,否则,游戏就玩不下去。但是,游戏规则是谁制定的呢?当然是老板,各种利益也偏向老板!身在职场的你,一开始看不惯这种现象,是很正常的,因为你初涉职场,本质上还是比较纯洁的。

但你一定要学会慢慢接受这种游戏规则。不要试图改变这种规则,因为在老板面前,你没有太多的话语权。说得再难听些,你只是一个打工的,混口饭吃,给你吃就不错了,还嫌饭凉?如果不想做,可以离开。还是那句话:中国什么都缺,就是不缺人。

记住这句话:“如果你不是游戏规则的制定者,你的选择只有两条:要么屈从,要么离开!”

八、机会只垂青有准备的人

无论你再怎么抱怨,再怎么不开心,饭还是要吃的,觉还是要睡的,工作还是要做的,未来的事情永远只属于自己的。买房子也好,娶老婆也罢,压力只 有自己扛,老板不会为你操任何心。与其有时间去抱怨,但不如踏踏实实静下心来,好好提升自己的基本功,用事实证明自己的本事,让别人对你刮目相看,万不可 因为自己的书生意气而自做一个自毁前程的“愤青”。

当然,你的准备是多方面的,除了专业技能外,其他的辅助技能也是非常必要的,比如沟通能力、人际关系处理能力、管理能力等等。当然,更重要的是 要为自己的未来做一个规划,清楚地知道自己的目标是什么,应该怎么努力才能实现。适当的时候也要充充电,不要舍不得那半个月的工资,这也算是为自己的未来 进行投资,有什么舍不得的呢?如果你现在不学会“舍”,以后将永远也“得”不到。

有时候,你之所以发展得不好,不是因为没有机遇,而是因为你没有准备好,导致机遇与你擦肩而过。这个社会就是这样,再怎么不合理,再怎么不公 平,但是发展机遇是时时都会面临的,只看你有没有准备好。你要是真的练就了一身令人刮目相看的真本事,说不定明天就有人请你做某世界500强的总裁也不一 定呢。

以上只是本人做HR多年的经验积累,希望对大家有所帮助。作为过来人,我真诚地希望在职的朋友们及即将就业的大学生们也能够以一种“空杯心态” 看待这篇文章。有时候,过来人的经验是非常有价值的,那是他们用时间和金钱换来的血汗教训。有的人偏偏不信这一套,认为只有自己亲自体会过,才能知道是什 么滋味,别人的经验只是别人的,和自己无关。如果你这样想,那我也没有办法。我也要有一种宽容的心态,冷静看待那些“不见棺材不掉泪,不撞南墙不回头”的 “人才”,不是吗?参加一下培训,适当充一下电,为未来做更好、更完善的准备,才是积极的人生态度。记住:抱怨永远解决不了问题!)

青海大地震前,一位青海网友留下的一句话

百度原帖地址:

点此查看原贴

截图为证:

2010年4月14日,早上5:56分

青海大地震前夕,青海玉树某网友在百度贴吧留言,询问其他地方网友是否地震了,此时为大地震前夕,小的震动已经开始显现,

2010年4月14日,中午11点32分

此时大地震已经发生了4个小时左右,全国许多网友已经通过网络得知的大地震的发生,并且在此贴纷纷留言

2010年4月14日, 中午12点,

大地震发生5个小时后,由于此贴的发布发生在地震前夕的凌晨,加上楼主生死未卜,此贴得到了广泛传播,人们纷纷从四面八方前来为楼主祝福.

2010年4月15日0:38:19

此贴发布后约19个小时,此贴回帖量已经高达7000,浏览器预计数万,大家对楼主的下落纷纷猜测,并留下祝福,期待他能归来……….



让我们祝福楼主吧………继续关注……..


记录几个常用的Linux命令

top命令

top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况;但是top是个动态显示过程,即能够通过用户按键来不断刷新当前状态。如? 前台执行该命令,他将独占前台,直到用户终止该程式为止。

比较准确的说,top命令提供了实时的对系统处理器的状态监控。他将显示系统中CPU最“敏感”的任务列表。该命令能够按CPU使用。内存使用和执行时 间对任务进行排序;而且该命令的很多特性都能够通过交互式命令或在个人定制文档中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。

下面是该命令的语法格式:

top [-] [d delay] [q] [s] [S] [i]

d 指定每两次屏幕信息刷新之间的时间间隔。当然用户能够使用s交互命令来改变之。

q 该选项将使top没有任何延迟的进行刷新。假如调用程式有终极用户权限,那么top将以尽可能高的优先级运行。

S 指定累计模式。

s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i 使top不显示任何闲置或僵死进程。

c 显示整个命令行而不只是显示命令名

top命令显示的项目很多,默认值是每5秒更新一次,当然这是能够配置的。显示的各项目为:

uptime 该项显示的是系统启动时间、已运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。

processes 自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等很多种类。进程和状态显示能够通过交互命令t来实现。

CPU states 显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。

Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。

Swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。

PID 每个进程的ID。

PPID 每个进程的父进程ID。

UID 每个进程任何者的UID 。

USER 每个进程任何者的用户名。

PRI 每个进程的优先级别。

NI 该进程的优先级值。

SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。

TSIZE 该进程的代码大小。对于内核进程这是个很奇怪的值。

DSIZE 数据和堆栈的大小。

TRS 文本驻留大小。

D 被标记为“不干净”的页项目。

LIB 使用的库页的大小。对于ELF进程没有作用。

RSS 该进程占用的物理内存的总数量,单位是KB。

SHARE 该进程使用共享内存的数量。

STAT 该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。

TIME 该进程自启动以来所占用的总CPU时间。假如进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。

%CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。

%MEM 该进程占用的物理内存占总内存的百分比。

COMMAND 该进程的命令名称,假如一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。

下面介绍在top命令执行过程中能够使用的一些交互命令。从使用角度来看,熟练的掌控这些命令比掌控选项还重要一些。这些命令都是单字母的,假如在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。

$#@60;空格立即刷新显示。

Ctrl L 擦除并且重写屏幕。

h或? 显示帮助画面,给出一些简短的命令总结说明。

k 终止一个进程。系统将提示用户输入需要终止的进程PID,连同需要发送给该进程什么样的信号。一般的终止进程能够使用15信号;假如不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。

i 忽略闲置和僵死进程。这是个开关式命令。

q 退出程式。

r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID连同枰渲玫慕逃畔燃吨怠J淙胍桓稣到褂畔燃督档停粗蚰芄皇垢媒逃涤懈叩挠畔热āD现凳?0。

S 转换到累计模式。

s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。假如有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是假如配置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。

f或F 从当前显示中添加或删除项目。

o或O 改变显示项目的顺序。

l 转换显示平均负载和启动时间信息。

m 转换显示内存信息。

t 转换显示进程和CPU状态信息。

c 转换显示命令名称和完整命令行。

M 根据驻留内存大小进行排序。

P 根据CPU使用百分比大小进行排序。

T 根据时间/累计时间进行排序。

W 将当前配置写入~/.toprc文档中。这是写top配置文档的推荐方法。

从上面的介绍中能够看到,top命令是个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此。一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。下面来看看实际使用的情况。

FInd 命令

find  path -name filename

eg:  find / -name apache2.conf  在/ 路径下查找 Apache2.conf文件

OAUTH协议简介 (推荐)

转自:  http://blog.csdn.net/hereweare2009/archive/2009/03/08/3968582.aspx

摘 要:OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信 息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。同时,任何第三方都可以使用 OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的多种实现如 PHP,JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAUTH是简易的。目前互联网很多服务如Open API,很多大头公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权 的标准。

一、OAUTH产生的背景

典型案例:如果一个用户拥有两项服务:一项服务是图片在线存储服务A, 另一个是图片在线打印服务B。如下图所示。由于服务A与服务B是由两家不同的服务提供商提供的,所以用户在这两家服务提供商的网站上各自注册了两个用户, 假设这两个用户名各不相同,密码也各不相同。当用户要使用服务B打印存储在服务A上的图片时,用户该如何处理?法一:用户可能先将待打印的图片从服务A上 下载下来并上传到服务B上打印,这种方式安全但处理比较繁琐,效率低下;法二:用户将在服务A上注册的用户名与密码提供给服务B,服务B使用用户的帐号再 去服务A处下载待打印的图片,这种方式效率是提高了,但是安全性大大降低了,服务B可以使用用户的用户名与密码去服务A上查看甚至篡改用户的资源。

很多公司和个人都尝试解决这类问题,包括Google、Yahoo、Microsoft,这也促使OAUTH项目组的产生。OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同发起的,目的在于为API访问授权提供一个开放的标准。OAuth规范的1.0版于2007年12月4日发布。通过官方网址:http://oauth.net可以阅读更多的相关信息。

二、OAUTH简介

在官方网站的首页,可以看到下面这段简介:

An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.

大概意思是说OAUTH是一种开放的协议,为桌面程序或者基于BS的web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。OAUTH 类似于Flickr Auth、Google’s AuthSub、Yahoo’s BBAuth、 Facebook Auth等。OAUTH认证授权具有以下特点:

1. 简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用;

2. 安全:没有涉及到用户密钥等信息,更安全更灵活;

3. 开放:任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH;

三、OAUTH相关术语

在弄清楚OAUTH流程之前,我们先了解下OAUTH的一些术语的定义:

  • OAUTH相关的三个URL
    • Request Token URL: 获取未授权的Request Token服务地址;
    • User Authorization URL: 获取用户授权的Request Token服务地址;
    • Access Token URL: 用授权的Request Token换取Access Token的服务地址;

  • OAUTH相关的参数定义:
    • oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。如Yahoo该值的注册地址为:https://developer.yahoo.com/dashboard/
    • oauth_consumer_secret:oauth_consumer_key对应的密钥。
    • oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
    • oauth_signature: 用上面的签名方法对请求的签名。
    • oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
    • oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
    • oauth_version: OAUTH的版本号,可选,其值必须为1.0。

OAUTH HTTP响应代码:

  • HTTP 400 Bad Request 请求错误
    • Unsupported parameter 参数错误
    • Unsupported signature method 签名方法错误
    • Missing required parameter 参数丢失
    • Duplicated OAuth Protocol Parameter 参数重复
  • HTTP 401 Unauthorized 未授权
    • Invalid Consumer Key 非法key
    • Invalid / expired Token 失效或者非法的token
    • Invalid signature 签名非法
    • Invalid / used nonce 非法的nonce

四、OAUTH认证授权流程

在弄清楚了OAUTH的术语后,我们可以对OAUTH认证授权的流程进行初步认识。其实,简单的来说,OAUTH认证授权就三个步骤,三句话可以概括:

1. 获取未授权的Request Token

2. 获取用户授权的Request Token

3. 用授权的Request Token换取Access Token

当应用拿到Access Token后,就可以有权访问用户授权的资源了。大家肯能看出来了,这三个步骤不就是对应OAUTH的三个URL服务地址嘛。一点没错,上面的三个步骤 中,每个步骤分别请求一个URL,并且收到相关信息,并且拿到上步的相关信息去请求接下来的URL直到拿到Access Token。具体的步骤如下图所示:

具体每步执行信息如下:

A. 使用者(第三方软件)向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求,请求需要带上的参数见上图。

B. OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。

C. 使用者向OAUTH服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。

D. OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。

E. Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token。

F. OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。

G. 使用者以后就可以使用上步返回的Access Token访问用户授权的资源。

从上面的步骤可以看出,用户始终没有将其用户名与密码等信息提供给使用者(第三方软件),从而更安全。用OAUTH实现背景一节中的典型案例:当服务 B(打印服务)要访问用户的服务A(图片服务)时,通过OAUTH机制,服务B向服务A请求未经用户授权的Request Token后,服务A将引导用户在服务A的网站上登录,并询问用户是否将图片服务授权给服务B。用户同意后,服务B就可以访问用户在服务A上的图片服务。 整个过程服务B没有触及到用户在服务A的帐号信息。如下图所示,图中的字母对应OAUTH流程中的字母:

五、OAUTH服务提供商

OAUTH标准提出到现在不到两年,但取得了很大成功。不仅提供了各种语言的版本库,甚至Google,Yahoo,Microsoft等等互联网大头都 实现了OAUTH协议。由于OAUTH的client包有很多,所以我们就没有必要在去自己写,避免重复造轮子,直接拿过来用就行了。我使用了这些库去访 问Yahoo OAUTH服务,很不错哦!下面就贴出一些图片跟大家一起分享下!

下图是OAUTH服务提供商引导用户登录(若用户开始没有登录)

下图是提示用户将要授权给第三方应用,是否同意授权的页面

下图提示用户已授权成功的信息

一些服务提供商不仅仅仅实现了OAUTH协议上的功能,还提供了一些更友好的服务,比如管理第三方软件的授权服务。下图就是YAHOO管理软件授权的页面,用户可以取消都某些应用的授权。

TCP协议与UDP协议

从专业的角度说,TCP的可靠保证,是它的三次握手机制,

这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,所以不可靠。不过UDP的速度是TCP比不了的,而且UDP的反应速度更快,QQ就是用UDP协议传输的,HTTP是用TCP协议传输的,不用我说什么,自己体验一下就能发现区别了。再有就是UDP和TCP的目的端口不一样(这句话好象是多余的),而且两个协议不在同一层,TCP在三层,UDP不是在四层就是七层。
TCP/IP协议介绍
TCP/IP的通讯协议
这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。
TCP/IP整体构架概述
TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:
应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
TCP/IP中的协议
以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的:
1. IP
网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。
IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。
高层的TCP和UDP服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IP source routing,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说,使用了该选项的IP包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。
2. TCP
如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。
3.UDP
UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询—应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网落时间协议)和DNS(DNS也使用TCP)。
欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。
4.ICMP
ICMP与IP位于同一层,它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。
5. TCP和UDP的端口结构
TCP和UDP服务通常有一个客户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。
两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
源IP地址 发送包的IP地址。
目的IP地址 接收包的IP地址。
源端口 源系统上的连接的端口。
目的端口 目的系统上的连接的端口。
端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

A place nearby |天涯若比邻->牛仔裤的夏天 The Sisterhood of the Traveling Pants 主题曲之一

大学时候在老校区早上经常听到的一首歌,早上很多时候就是被这首歌叫醒的,经典歌曲,回忆啊…………….

歌曲试听:

http://mp3.baidu.com/m?f=ms&rf=idx&tn=baidump3&ct=134217728&lf=&rn=&word=a+place+nearby&lm=-1

剧情简介   · · · · · ·

写在牛仔裤上的女孩儿的情谊,婉转动听,异常温暖。
也许是上帝的安排,卡门、堤比、莲娜和布莉姬这四个女孩的缘分是在她们都在娘胎里就注定的。同在夏末出生的她们性格迥异却从小亲如姐妹。十五岁这年夏 天,四姐妹第一次面对分离,各自渡过一个没有对方的夏天。意外的,她们发现了一条牛仔裤,身材相差很大的四姐妹穿上居然都很合适。于是,神奇的牛仔裤变成 了友情的信物,伴随她们开始各自的旅程。
大胆而无拘束的布莉姬(布雷克•莱伍丽 饰)来到了炎热的墨西哥,加入足球训练营;漂亮羞涩的莲娜(艾丽克西斯•布莱德尔 饰)前往圣洁的希腊,用画笔勾勒爱琴海的神秘;冲动敏感的卡门盼望与在她儿时就搬走的父亲共度美好的暑假,而叛逆另类的堤比(安贝•坦布琳 饰)也为录制她自己的电视节目而忙碌着。牛仔裤承载着友谊与勇气在她们之间传递,陪伴她们,学着去爱,学着长大。