PHP防止错误显示
防止错误信息出现在浏览器上,可以在相应的语句前面加上@符号,比如下面的连接数据库的语句,在数据库连接失败时不在浏览器上显示错误信息:
$db=@mysql_connect(...);
防止错误信息出现在浏览器上,可以在相应的语句前面加上@符号,比如下面的连接数据库的语句,在数据库连接失败时不在浏览器上显示错误信息:
$db=@mysql_connect(...);
一直想直接用JavaScrip调用Xurrency.com 的 SOAP,实现汇率的AJAX,找到个JavaScript SOAP Client做了测试。本机上IE,Chrome成功返回,firefox与在host上报错,"access to restricted URI DENIED"不知其所以然。
决定放弃。改用php soapclient+jquery ajax实现。
JavaScript SOAP Client测试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>XHTML-document</title> <script type="text/javascript" src="soapclient.js"></script> <script type="text/javascript"> function currency (){ var url = "http://xurrency.com/servidor_soap.php"; var pl = new SOAPClientParameters(); pl.add("amount", 5); pl.add("base", "usd"); pl.add("target", "eur"); SOAPClient.invoke(url, "getValue", pl, true, Currency_callBack); } function Currency_callBack(r){ alert(r); } </script> </head> <body> <form action=""> <input type=button value="Invoke" onclick="currency();" /> </form> </body> </html> |
disable your ZendOptimizer and eaccelerator
download ZendDebugger.os place to /usr/local/lib/php/20060613/
ZendDebugger.so for freebsd (2.2 MiB, 5 hits)
You need to be a registered user to download this file.
edit your php.ini. For me php.ini is in /usr/local/etc/
[Zend]
zend_extension=/usr/local/lib/php/20060613/ZendDebugger.so
zend_debugger.allow_hosts=10.10.2.0/24
zend_debugger.expose_remotely=always
zend_debugger.connector_port=10001
restart your apache
Look in the phpinfo( ) got the result below!
本来写PAYPAL IPN response 时用来防止反复尝试的函数,保护性很差,后来改成原地址审核($hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);if(!preg_match('/paypal\.com$/', $hostname)) {.....),所以个就弃用了。在删之前记录不来,应该有更好的算法,不知道谁有研究。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | if (!avoid_refresh ('15')) die ("Hacking Attempt!!"); ..... ..... ..... function avoid_refresh ($time){ session_start(); if (isset($_SESSION["post_sep"])) { if (time() - $_SESSION["post_sep"] < $time) { $_SESSION["post_sep"] = time(); return false; } else { $_SESSION["post_sep"] = time(); return true; } } else { $_SESSION["post_sep"] = time(); return true; } } |
数据加密在我们生活中的地位已经越来越重要了,尤其是考虑到在网络上发生的大量交易和传输的大量数据。如果对于采用安全措施有兴趣的话,也一定会有兴趣了解PHP提供的一系列安全功能。在本篇文章中,我们将介绍这些功能,提供一些基本的用法,以便你能够为自己的应用软件中增加安全功能。
在详细介绍PHP的安全功能之前,我们需要花点时间来向没有接触过这方面内容的读者介绍一些有关密码学的基本知识,如果对密码学的基本概念已经非常熟悉,就可以跳过去这一部分。
密码学可以通俗地被描述为对加/解密的研究和实验,加密是将易懂的资料转换为不易懂资料的过程,解密则是将不易懂的资料转换为原来易懂资料的过程。不易懂的资料被称作密码,易懂的资料被称作明码。
数据的加/解密都需要一定的算法,这些算法可以非常地简单,如著名的凯撒码,但当前的加密算法要相对复杂得多,其中一些利用现有的方法甚至是无法破译的 。
PHP的加密功能只要有一点使用非Windows平台经验的人可能对crypt()也相当熟悉,这一函数完成被称作单向加密的功能,它可以加密一些明码,但不能够将密码转换为原来的明码。尽管从表面上来看这似乎是一个没有什么用处的功能,但它的确被广泛用来保证系统密码的完整性。因为,单向加密的口令一旦落入第三方人的手里,由于不能被还原为明文,因此也没有什么大用处。在验证用户输入的口令时,用户的输入采用的也是单向算法,如果输入与存储的经加密后的口令相匹配,则输入的口信一定是正确的。
PHP同样提供了使用其crypt()函数完成单向加密功能的可能性。我将在这里简要地介绍该函数:
string crypt (string input_string [, string salt])
其中的input_string参数是需要加密的字符串,第二个可选的salt是一个位字串,它能够影响加密的暗码,进一步地排除被称作预计算攻击的可能性。缺省情况下,PHP使用一个2个字符的DES干扰串,如果你的系统使用的是MD5(我将在以后介绍MD5算法),它会使用一个12个字符的干扰串。顺便说一下,可以通过执行下面的命令发现系统将要使用的干扰串的长度:
print “My system salt size is: ”. CRYPT_SALT_LENGTH;
系统也可能支持其他的加密算法。crypt()支持四 种算法,下面是它支持的算法和相应的salt参数的长度:
算法 Salt长度
CRYPT_STD_DES 2-character (Default)
CRYPT_EXT_DES 9-character
CRYPT_MD5 12-character beginning with $
CRYPT_BLOWFISH 16-character beginning with $
一旦你的插件编程工作已结束,另一个值得考虑的方面就是怎样将你的插件国际化(当然,这是建立在你想把你的作品发布给公众的前提上)。“国际化”就是一个建设你的软件使之能被本地化的过程;而“本地化”就是将你软件显示文本翻译成各种语言的过程。WordPress 已被来自全世界各个地方的爱好者使用,所以它以将国际化和本地化功能融入其结构,包括插件程序的本地化功能。想了解更多的 GNU gettext 本地化的背景知识,请参照翻译 WordPress。
极力推荐你将你的插件进行国际化,这样来自五湖四海的用户名都可以本地化它。而且这整个过程也是十分直接明了:
__() 用来将 message 作为一个参数传递给另外一个函数。 _e() 用来直接把 message 写到页面上。
js文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 | var BT_open_wait = 500; //time in millis to wait before showing dialog var BT_close_wait = 0; //time in millis to wait before closing dialog var BT_cache_enabled = true; function BT_setOptions(hash) { if(hash["openWait"] != null) BT_open_wait = hash["openWait"]; if(hash["closeWait"] != null) BT_close_wait = hash["closeWait"]; if(hash["cacheEnabled"] != null) BT_cache_enabled = hash["cacheEnabled"]; } |
HTML传值:
1 2 3 4 5 6 | <script type="text/javascript" src="path-to/XXX.js"></script>
<script type="text/javascript">
$(function(){
BT_setOptions({openWait:2000, closeWait:4000, enableCache:false});
})
</script> |