mysql_escape_string与addslashes的区别在于
mysql_escape_string总是将“'”转换成“\'”
而addslashes
在magic_quotes_sybase=on时将“'”转换成“''”
在magic_quotes_sybase=off时将“'”转换成“\'”
Written by 小锋 on 08-12-27 2:19 AM
mysql_escape_string与addslashes的区别在于
mysql_escape_string总是将“'”转换成“\'”
而addslashes
在magic_quotes_sybase=on时将“'”转换成“''”
在magic_quotes_sybase=off时将“'”转换成“\'”
Written by 小锋 on 08-12-20 11:42 AM
试用的自配服务器(php+mysql+nginx)
在网页形式下浏览数据库时
出现错误:Wrong permissions on configuration file, should not be world writable!
其实这个错误是mysql数据库的权限设置成了777所造成的
解决办法就是把数据库的根目录权限重新设置成755即可
比如数据库 phpMyAdmin的存放目录是:/opt/ppt/phpMyAdmin
则可以进行如下的操作:chmod -R 755 phpMyAdmin,这样重新设置后就可以了:-)
Written by 小锋 on 08-12-16 8:37 PM
- <?php
- set_time_limit(0);
- header("Connection: Keep-Alive");
- header("Proxy-Connection: Keep-Alive");
- for($i=0; $i<1000; $i++) {
- print 'fuck man!'.$i.'<br>';
- flush();
- sleep(3);
- clearstatcache();
- }
- ?>
Written by 小锋 on 08-12-16 11:05 AM
array_pop($GAMES)
这样就能把$GAMES里面的最后一个数组给弹显出来
然后$GAMES里面的内容就少了一个
Written by 小锋 on 08-12-14 11:24 AM
$n=round(1.95583, 2); 保留两位小数+四舍五入
Written by 小锋 on 08-12-13 12:36 AM
一般数字索引用section,常用来循环显示所取得的数据库多维结果数组,关联索引用foreach。
如果只是一维数组,直接{$数组.下标}就可取值,没必要循环取。
$uu[ 'kaixin ']= "我的最大三定律肤色地方 ";
$uu[ 'io ']= "111色地方 ";
$uu[ 'i2o ']= "111111111色地方 ";
$smarty-> assign( "StieInfo ",$uu);
这种情况用foreach
tpl:
-------------
{foreach item=value key=key from=$StieInfo}
{$key} : {$value}
{/foreach}
Written by 小锋 on 08-12-12 2:59 PM
竟然发现字符串直接去对比日期会犯错误结果-_-@
- PHP里没有内置的日期比较函数,不过处理一下格式还是可以比较的,代码如下:
- $date2=”2007-1-20″;
- $date=”2006-1-1″;
- if(date(”Y-m-d”,strtotime($date))>date(”Y-m-d”,strtotime($date2))){
- echo “Y”;
- }
- else{
- echo “N”;
- }
Written by 小锋 on 08-12-10 9:48 AM
页面只输出了 汉字没有header的话 在ie里面有可能会输出乱码。所以得要用header定义一下
- <?php
- header('Content-Type: text/html; charset=UTF-8');
- echo "编码测试";
- ?>
Written by 小锋 on 08-12-08 8:46 PM
昨天我举了个用 PHPRPC 实现 Ajax 级联下拉菜单 的例子,那个例子中我们重点要演示的是用 PHPRPC 实现 Ajax 效果是多么的简单。今天我们这个例子主要演示用 PHPRPC 内置的安全加密机制来实现安全登录是多么简单。当然它同样可以用于密码设置、其它关键保密数据的传输等领域。
这个例子比昨天的例子还要简单,先来看服务器端:
- <?php
- function login($username, $password) {
- if (($username == "root") && ($password == "admin")) {
- $_SESSION['user'] = "root";
- return true;
- }
- $_SESSION['user'] = null;
- return false;
- }
- require_once("phprpc_server.php");
- new phprpc_server(array('login'));
- ?>
这段代码太简单了,我不需要多说什么大家也能够看明白。不过大家会发现,在 login 函数中我用了 $_SESSION 变量,但是并没有在什么位置上写 session_start(),原因在于建立加密连接时,已经自动调用了 session_start(),因此不需要再单独写 session_start() 了。为了验证它是否生效,我们在后面的另一个页面中(admin.php),将判断这里设置的 $_SESSION 变量,并根据它来报告登录成功或者没成功跳回到登录页面。
那再来看看客户端,客户端我们将 JavaScript 跟 HTML 分离了,先来看看 html 页面。
- <html>
- <head>
- <script type="text/javascript" src="phprpc_client.js"></script>
- <script type="text/javascript" src="login.js"></script>
- </head>
- <body>
- <div align="center">
- 帐号:<input type="text" id="username" />
- 密码:<input type="password" id="password" />
- <input type="button" value="登录" id="loginbtn" />
- </div>
- </body>
- </html>
这个页面很简单,只是设置好了表单输入框和按钮,所有的处理都是在 login.js 中完成的。不过需要注意的是这里的 phprpc_client.js 是 full 压缩版本,因为我们需要用到它的加密传输功能。我们来看看 login.js 是怎么写的。
- // 创建 phprpc 客户端对象 rpc
- phprpc_client.create('rpc');
- // 初始化带有加密连接的 rpc 服务,第二个参数表示是否创建加密连接
- rpc.use_service('rpc.php', true);
- // 登录函数
- function login() {
- // 如果加密连接已经初始化完毕,则验证用户名密码
- if (rpc.ready) {
- // 获取用户输入的用户名和密码
- var username = document.getElementById('username').value;
- var password = document.getElementById('password').value;
- // 设置远程过程调用为单向加密,
- // 即传递的参数是加密的,但返回结果不加密
- rpc.encrypt = 1;
- // 调用远程过程验证用户名密码是否正确,并设置回调函数。
- rpc.login(username, password, function (result) {
- // 如果返回结果正确,则转到登录后的页面
- if (result === true) {
- window.location.replace('admin.php');
- }
- // 否则提示用户名密码不正确
- else {
- alert('用户名密码不正确!');
- }
- });
- }
- // 如果连接尚未初始化完毕,则等待 100 毫秒后重试。
- else {
- window.setTimeout('login();', 100);
- }
- }
- window.onload = function () {
- document.getElementById('loginbtn').onclick = login;
- }
大家会发现除了在调用 use_service 时,设置了第二个参数为 true 外,还在调用服务器端的 login 函数前,设置了 rpc.encrypt 的值为 1,这里 1 表示单向加密传输,单向加密传输是指调用的参数会以加密的方式传给服务器,但是返回的结果不加密(如果参数是引用参数的话,参数返回时也是加密的)。如果 rpc.encrypt 的值为 0,则表示不加密;如果是 2,则表示双向加密。
这里因为只有用户名和密码是敏感数据,需要保证它在传递给服务器时不被截获(即使截获也是加密的内容,无法破解),但返回的结果成功还是不成功并不是什么需要保密的数据,所以可以不加密。因此这里选择了单向加密传输。
大家也不必担心密钥是否会被截获,因为密钥是通过密钥交换算法,在服务器端和客户端(浏览器端)随机同步生成的,但没有经过网络传输,在网络上传输的是生成同步密钥的相关信息,但是只获取到这些信息是不足以算出密钥的,因此可以保证密钥的安全性。而加密算法本身也是一个强加密算法,密钥长度是 128 位,在没有密钥的情况下采用穷举法也是无法破解的。
大家会发现登录成功后,我们转向了 admin.php 页面,下面是这个页面的一个简单的例子:
- <?php
- session_start();
- if ($_SESSION['user'] == 'root') {
- echo "登录成功!";
- }
- else {
- header("Location: index.html");
- }
- ?>
这里需要自己 sestion_start() 一下了,之后就可以验证 $_SESSION[’user’] 是否设置了。
通过 PHPRPC,你不再需要为 Ajax 程序中数据的安全性而头痛,也不必为回话支持而苦恼,这一切 PHPRPC 都已经帮你自动完成了,你只需要关注具体的事务就可以了。用 PHPRPC 来做 Ajax 安全编程,就是这么简单!
Written by 小锋 on 08-11-28 9:38 AM
找了好几个检测email地址的函数 只有下面这个接近完美!
- function checkEmail($str)
- {
- if (eregi("^[0-9a-z][_.0-9a-z-]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$", $str))
- return true;
- else
- return false;
- }