补码

补码 complement-number

最近搞webqq的研究,因为前台密码md5加密有太多了位运算(bit-wise operation),在将js代码转为c代码的过程中发现了一些问题。

c语言里面的位运算有与(&)或(|)非(~)异或(^)左移(<<)右移(>>)。

在32位windows xp,vc2005环境下,int和long都是4位(sizeof(int)==4)。所以我初步判断这样的环境下int和long没有区别。

int分为有符号(signed)和无符号(unsigned)。

当int为有符号时(默认)表示的范围是0x00000000(0)到0x7FFFFFFFF(2147483647)到0x800000000(-2147483648)到0xFFFFFFFF(-1)

当int为无符号时(默认)表示的范围是0x00000000(0)到0x7FFFFFFFF(2147483647)到0x800000000(2147483648)到0xFFFFFFFF(4294967295)

同理2个Bytes的short型数据类型是这样的:

signed short:0x0000(0)到0x7FFF(32767)到0x8000(-32768)到0xFFFF(-1)

unsigned short:0x0000(0)到0x7FFF(32767)到0x8000(32768)到0xFFFF(65535)

一个关于2进制在计算机中运算的形象例子:

11111 111   (进位)
  0000 1111  (15)
+ 1111 1011  (-5)
==================
  0000 1010  (10)

计算机系统中为啥非要使用补码呢?这个问题哥在上大学上汇编课的时候老师没有讲过,只是给你将转码的公式,你记住就有分了。其实大家都忘了补码存在的意义:二补数系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有号数加法,而且减法可以用一个数加上另一个数的二补数来表示,因此只要有加法电路及二补数电路即可完成各种有号数加法及减法,在电路设计上相当方便。

总之优点降低电路设计的复杂度。

more info : http://zh.wikipedia.org/wiki/二補數

libcurl 无法解析的外部符号

仔细检查以下几点,防止“无法解析的外部符号”链接问题的出现。

  • 确保curllib项目的运行时库和引用curllib.lib程序的运行时库(c/c++ ->code generation)保持一致(比如都是/MDd)。

  • 确保curllib项目和引用curllib.lib项目的程序的字符集保持一致(比如都是:使用多字节字符集)。

  • 确保curllib项目在没有LDAP支持的情况下在preprocessor definition中加入:CURL_DISABLE_LDAP(/D)。

  • 编译curllib静态库时,请在preprocessor definition中加入:CURL_STATICLIB

预览视频explorer.exe崩溃

XP有 一个 影音文件 预览功能,该功能有 时候 能 导致大型AVI文件在预览时explorer.exe崩溃,还能导致影音文件无法删除,在 命令行中输入

REGSVR32 /U SHMEDIA.DLL

就可解决这两个问题

如果要恢复视频预览功能时只要输入

REGSVR32 SHMEDIA.DLL

我的php.ini模版

[PHP]
;;;;;;;;;;;;;;;;;;;;
; Language Options ;
;;;;;;;;;;;;;;;;;;;;
engine = On
zend.ze1_compatibility_mode = Off
short_open_tag = Off
asp_tags = Off
precision    =  14
y2k_compliance = On
output_buffering = On
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func=
serialize_precision = 100
allow_call_time_pass_reference = Off
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
;open_basedir =
disable_functions =
disable_classes =
; ignore_user_abort = On
; realpath_cache_size=16k
; realpath_cache_ttl=120
expose_php = On
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 30
max_input_time = 60
;max_input_nesting_level = 64
memory_limit = 1280M
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
error_reporting  =  E_ALL
display_errors = On
display_startup_errors = On ; default Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On ;only effect in a debug compile
;report_zend_debug = 0
track_errors = Off ; Store the last error/warning message in $php_errormsg (boolean).
;xmlrpc_errors = 0
;xmlrpc_error_number = 0
;html_errors = Off
docref_root = "/phpmanual/"
docref_ext = .html
;error_prepend_string = "<div style='color=#ff0000;border:1px solid #00ffee'>"
;error_append_string = "</div>"
error_log = d:/wamp/logs/php_error.log
;error_log = syslog ; only for WinNT or higher
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
;arg_separator.output = "&"
;arg_separator.input = ";&"
variables_order = "GPCS"
register_globals = Off
register_long_arrays = Off
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
;default_charset = "iso-8859-1"
;always_populate_raw_post_data = On
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
;include_path = ".:/php/includes"
;include_path = ".;c:\php\includes"
doc_root =
user_dir =
extension_dir = "d:/wamp/bin/php/php5.2.11/ext/"
enable_dl = On
; cgi.force_redirect = 1
; cgi.nph = 1
; cgi.redirect_status_env =
; cgi.fix_pathinfo=1
; fastcgi.impersonate = 1 ; IIS:1,Default:0
; fastcgi.logging = 0
;cgi.rfc2616_headers = 0
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
file_uploads = On
upload_tmp_dir = "d:/wamp/tmp"
upload_max_filesize = 20M
;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
allow_url_fopen = On
allow_url_include = Off
;from="john@doe.com"
; user_agent="PHP"
default_socket_timeout = 60
; auto_detect_line_endings = Off
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
;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
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
[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
[Pcre]
;pcre.backtrack_limit=100000
;pcre.recursion_limit=100000
[Syslog]
define_syslog_variables  = Off
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25
sendmail_from = you@yourdomain
; For Unix only.
;sendmail_path =
;mail.force_extra_parameters =
[SQL]
sql.safe_mode = Off
[MySQL]
mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[bcmath]
bcmath.scale = 0
[browscap]
;browscap = extra/browscap.ini
[Session]
session.save_handler = files
session.save_path = "d:/wamp/tmp"
session.use_cookies = 1
;session.cookie_secure =
; session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor     = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = 0
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
;session.entropy_length = 16
;session.entropy_file = /dev/urandom
session.cache_limiter = nocache
session.cache_expire = 180 ;minutes
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[Assertion]
;assert.active = On
;assert.warning = On
;assert.bail = Off
;assert.callback = 0
;assert.quiet_eval = 0
[COM]
;com.typelib_file =
;com.allow_dcom = true
;com.autoregister_typelib = true
;com.autoregister_casesensitive = false
;com.autoregister_verbose = true
[mbstring]
;mbstring.language = Japanese
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
;mbstring.encoding_translation = Off
;mbstring.detect_order = auto
;mbstring.substitute_character = none;
;mbstring.func_overload = 0
;mbstring.strict_encoding = Off
[gd]
;gd.jpeg_ignore_warning = 0
[exif]
;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.default_config = /usr/local/lib/php/default.tcfg
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400

	

php报错链接到php manual

php报错链接到php manual

在写php程序的时候,有时候函数有误,php报错的函数紧跟着这个函数的链接,一般情况下我们打开都是不存在的页面。那是因为没有设置。

设置方法:

  1. http://php.net/docs.php下载php manual,格式选择many HTML file解压到本地 F:ookphpphp-chunked-xhtml 目录。
  2. php.ini加入以下设置:
docref_root = "/phpmanual/"
docref_ext = .html
  1. apache加入以下Alias设置:
#phpmanual
Alias /phpmanual "F:/book/php/php-chunked-xhtml/"
<Directory "F:/book/php/php-chunked-xhtml/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
        Order Deny,Allow
    Allow from all
</Directory>
  1. 重启apache服务器。点击[function.mysql_connect.html]自动跳转到对应函数的文档。

我的httpd.conf模版,适用于Apache 2.2

适用于windows版本

  • 监听80端
  • 支持php
  • 支持虚拟主机
  • 支持Alias别名
  • 支持FancyIndex,支持Index的时根据文件类型显示图标。

适用于Apache 2.2。

ServerRoot "D:/wamp/bin/apache/apache2.2.17"
Listen 80
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule php5_module "D:/wamp/bin/php/php5.2.11/php5apache2_2.dll"
ServerAdmin admin@localhost
ServerName localhost:80
DocumentRoot "D:/www/"
<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
<Directory>
<IfModule dir_module>
    DirectoryIndex index.php index.php3 index.html index.htm
<IfModule>
<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
<FilesMatch>
ErrorLog "D:/wamp/logs/apache_error.log"
LogLevel info
DefaultType text/plain
<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    #very important!!
    AddType application/x-httpd-php .php
<IfModule>
<IfModule mod_php5.c>
  PHPINIDir "../../php/php5.3.5/"
  AddType application/x-httpd-php .php
  AddType application/x-httpd-php-source .phps
<IfModule>
#autoindex
Alias /icons "D:/wamp/bin/apache/Apache2.2.17/icons/"
<Directory "D:/wamp/bin/apache/Apache2.2.17/icons/">
    Options Indexes MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
<Directory>
IndexOptions FancyIndexing VersionSort
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
#virutal hosting
NameVirtualHost *
<VirtualHost *>
    DocumentRoot "D:/www"
    ServerName default:80
    ErrorLog logs/default-error_log
<VirtualHost>
<VirtualHost *>
    <Directory "D:/www/terminalmap">
        Options -Indexes FollowSymLinks
        Allow from all
        AllowOverride All
    <Directory>
    ServerAdmin admin@terminalmap
    DocumentRoot "D:/www/terminalmap"
    ServerName terminalmap:80
    ServerAlias terminalmap
    ErrorLog logs/terminalmap-error_log
<VirtualHost>
<VirtualHost *>
    <Directory "D:/www/zencart">
        Options -Indexes FollowSymLinks
        Allow from all
        AllowOverride All
    <Directory>
    ServerAdmin admin@zencart
    DocumentRoot "D:/www/zencart"
    ServerName zencart:80
    ServerAlias zencart
    ErrorLog logs/zencart-error_log
<VirtualHost>
<VirtualHost *>
    <Directory "D:/www/wp">
        Options -Indexes FollowSymLinks
        Allow from all
        AllowOverride All
    <Directory>
    ServerAdmin admin@wp
    DocumentRoot "D:/www/wp"
    ServerName wp:80
    ServerAlias wp
    ErrorLog logs/wp-error_log
<VirtualHost>
#phpmyadmin Alias
Alias /phpmyadmin "D:/wamp/apps/phpmyadmin3.3.9/"
<Directory "D:/wamp/apps/phpmyadmin3.3.9/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
        Order Deny,Allow
    Allow from all
<Directory>
#sqlbuddy Alias
Alias /sqlbuddy "D:/wamp/apps/sqlbuddy1.3.2/"
<Directory "D:/wamp/apps/sqlbuddy1.3.2/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
        Order Deny,Allow
    Allow from all
<Directory>
#webgrind Alias
Alias /webgrind "D:/wamp/apps/webgrind1.0/"
<Directory "D:/wamp/apps/webgrind1.0/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
        Order Deny,Allow
    Allow from all
<Directory>

wampserver使用Aestan Tray Menu托盘程序制作

在windows平台编写、调试php程序最方便的一个wamp环境应该算是wampserver了。国内的phpnow在2010-09-22更新到1.5.6之后就停止了下来,版本过低,安全性受到极大影响。但是如果你会折腾,应该知道如果让phpnow套件加载你自己的amp版本。听说phpnow的作者在搞一个http库叫cutehttpd。是个神马东东暂时还不得而已。难道可以在apache、nginx之间自由的切换?呵呵

言归正传,我们都知道wampserver是基于GPL v2授权(参考程序主目录下面的license.txt),但是丫的在sf.net并木有wampserver的source code。为什吗啊。右击wampmanager.exe,看描述。其实这个程序不是wampserver作者写的。

WampServer Version 2.1
Created by Romain Bourdon (romain@romainbourdon.com)
Maintainer / Upgrade / RoadMap by Herve Leclerc (herve.leclerc@alterway.fr)
Sources are available at SourceForge
http://www.wampserver.com

而是直接没有修改源代码的情况下使用了Aestan Tray Menu(Delphi写的),这个万能托盘程序,通过修改同名exe的ini文件的读取来配置这个托盘程序的行为。

在wampserver主目录下面有三个配置文件,wampmanager.ini,wampmanager.conf,wampmanager.tpl。

wampmanager.conf定义了amp的版本,启动、停止的参数。daemon程序名字。

wampmanager.ini就是Aestan Tray Menu要读取的配置文件了。我们知道wampserver可以通过安装addons的形式来安装其他版本的AMP,安装之后可以在多个AMP版本之间自由切换。靠的就是这个ini文件。这个文件都是通过wampmanager.tpl的模版的生成的。其实这个tpl是一个php脚本,通过php-win.exe执行。所以只需要将要修改的内容设置为一个变量(比如:${c_phpCli}),然后替换就可以了。

Deprecated: Function set_magic_quotes_runtime() is deprecated

Deprecated: Function set_magic_quotes_runtime() is deprecated

导致这个提示的原因是在PHP5.3后此特性(set_magic_quotes_runtime())已经关闭。
而且在PHP6中已经完全移除此特性。
你可以注释或者删除掉出错的行,或者是在set_magic_quotes_runtime()前面加@符号。

mod_rewrite引起的internal server error

虚拟主机网站根目录下有.htaccess。而虚拟主机的配置是:

<VirtualHost *>
    <Directory "D:/www/xxx">
        Options -Indexes FollowSymLinks
        Allow from all
        AllowOverride All
    </Directory>
    ServerAdmin admin@xxx
    DocumentRoot "D:/www/xxx"
    ServerName xxx:80
    ServerAlias xxx
    ErrorLog logs/xxx-error_log
</VirtualHost>

因为是AllowOverride是All,可以.htaccess文件重载了这个虚拟主机的配置。然后.htaccess里面有Rewrite模块的指令。而httpd.conf并没有LoadModule mod_rewrite.so。所有出现了500 Internal Server Error。

解决方法要么AllowOverride修改为None,要么删除.htaccess,要么,将mod_rewrite加载进来。

关于apache Alias斜杠/的实验

Alias /icons/ "D:/wamp/bin/apache/Apache2.2.17/icons/"

访问http://localhost/icons/正常,访问http://localhost/icons 404

Alias /icons "D:/wamp/bin/apache/Apache2.2.17/icons"

访问http://localhost/icons自动加上后面的/,正常。

Alias /icons "D:/wamp/bin/apache/Apache2.2.17/icons/"

访问http://localhost/icons自动加上后面的/,正常。

Alias /icons/ "D:/wamp/bin/apache/Apache2.2.17/icons"

访问http://localhost/icons/xx.gif,404,访问http://localhost/icons 404 Not Found。

所以结论是Alias的两个路径加不加斜杠必须前后匹配。