用户认证的原理很简单:首先需要用户在页面上填入用户名和密码,当然没注册的用户需要先注册。然后调用数据库搜索是否有相应的用户。如果有就确认,没有则提醒用户先注册。使用PHP来完成这一切很简单,但需要注意的是如果想在以后的页面中都能确认用户身份。
第一步是做一个登录的页面。
第二步开始登录后的确认程序的设计。
以下为引用的内容:
login.php:
mysql_connect("localhost","user","password")
/*连接数据库,用户名和密码自行修改*/
or die("无法连接数据库,请重试");
mysql_select_db("userinfo")
or die("无法选择数据库,请重试");
$today=date("Y-m-d H:i:s");
$query="
select id
from usertbl
where name=$name and password=$password
/*从数据库中搜索和登录用户相应的资料*/
";
$result=mysql_query($query);
$numrows=mysql_num_rows($result);
if($numrows==0){
/*验证是否能找出相同资料的用户,不能则未注册*/
echo 非法用户
;
echo 请注册先
;
echo 重试
;
}
else{
$row=mysql_fetch_array($result);
$id=$row[0];
$query="
update usertbl
set lastlogin=$today
where id=$id ......
用户认证的原理很简单:首先需要用户在页面上填入用户名和密码,当然没注册的用户需要先注册。然后调用数据库搜索是否有相应的用户。如果有就确认,没有则提醒用户先注册。使用PHP来完成这一切很简单,但需要注意的是如果想在以后的页面中都能确认用户身份。
第一步是做一个登录的页面。
第二步开始登录后的确认程序的设计。
以下为引用的内容:
login.php:
mysql_connect("localhost","user","password")
/*连接数据库,用户名和密码自行修改*/
or die("无法连接数据库,请重试");
mysql_select_db("userinfo")
or die("无法选择数据库,请重试");
$today=date("Y-m-d H:i:s");
$query="
select id
from usertbl
where name=$name and password=$password
/*从数据库中搜索和登录用户相应的资料*/
";
$result=mysql_query($query);
$numrows=mysql_num_rows($result);
if($numrows==0){
/*验证是否能找出相同资料的用户,不能则未注册*/
echo 非法用户
;
echo 请注册先
;
echo 重试
;
}
else{
$row=mysql_fetch_array($result);
$id=$row[0];
$query="
update usertbl
set lastlogin=$today
where id=$id ......
<?php
/**
* Mysql DB
*
* @author Administrator
* @package defaultPackage
*/
class MySqlDB{
private $_db;
private static $_instance;
private function __construct(&$db_type){
global $connectionstr;
$conn_db=$connectionstr[$db_type];
$this->_db=mysql_pconnect($conn_db["servername"],$conn_db["usernmae"],$conn_db["pwd"]);
if(!$this->_db){
die("'Could not connect: ".mysql_error());
}
mysql_select_db($conn_db["dbname"],$this->_db);
}
private function __clone(){
}
public static function getInstance(&$db_type){
if(!(self::$_instance instanceof self)){
self::$_instance=new self($db_type);
}
return self::$_instance;
}
function query($sql){
mysql_query("SET NAMES 'GBK'",$this->_db);
return mysql_query($sql,$this->_db);
}
function get_result_sql($sql){
return $this->query($sql);
}
/***根据sql,返回数组数据,有错误提示***/
function getarray($sql){
$result_ay=array();
if($re= ......
<?php
/**
* Mysql DB
*
* @author Administrator
* @package defaultPackage
*/
class MySqlDB{
private $_db;
private static $_instance;
private function __construct(&$db_type){
global $connectionstr;
$conn_db=$connectionstr[$db_type];
$this->_db=mysql_pconnect($conn_db["servername"],$conn_db["usernmae"],$conn_db["pwd"]);
if(!$this->_db){
die("'Could not connect: ".mysql_error());
}
mysql_select_db($conn_db["dbname"],$this->_db);
}
private function __clone(){
}
public static function getInstance(&$db_type){
if(!(self::$_instance instanceof self)){
self::$_instance=new self($db_type);
}
return self::$_instance;
}
function query($sql){
mysql_query("SET NAMES 'GBK'",$this->_db);
return mysql_query($sql,$this->_db);
}
function get_result_sql($sql){
return $this->query($sql);
}
/***根据sql,返回数组数据,有错误提示***/
function getarray($sql){
$result_ay=array();
if($re= ......
1、安装libeven
memcached的使用需要libeven的支持,我们得先装上libeven。
官方网站:http://www.monkey.org/~provos/libevent/
libevent安装方式比较简单:
./configure && make
make install
检查是否 已经安装
ls -l /usr/local/lib/ | grep even
2、安装memcached
官方网站:http://www.danga.com/memcached/download.bml
memcached安装需要些参数:
以下是代码片段:
./configure
make
make install
3、测试
/usr/local/bin/memcached -h
正常ok
常见错误
/usr/local/bin/memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
解决办法
LD_DEBUG=libs memcached -v
输出
32179: find library=libevent-1.4.so.2 [0]; searching
32179: search cache=/etc/ld.so.cache
32179: search path=/lib/tls/i686/sse2:/lib/tls/i686:/lib/tls/sse2:/lib/tls:/lib/i686/sse2:/l ......
这篇文章的出发点是我对插件机制
的理解,及其在PHP中的实现。此方案仅是插件机制在PHP中的实现方案之一,写下来和大家分享,欢迎大家一起讨论。
插件
,亦即Plug-in,是指一类特定的功能模块(通常由第三方开发者实现),它的特点是:当你需要它的时候
激活它,不需要它的时候禁用/删除它;且无论是激活还是禁用都不影响系统核心模块的运行,也就是说插件是一种非侵入式的模块化设计,实现了核心程序与插件
程序的松散耦合。一个典型的例子就是Wordpress中众多的第三方插件,比如Akimet插件用于对用户的评论进行Spam过滤。
一个健壮的插件机制,我认为必须具备以下特点:
插件的动态监听和加载(Lookup)
插件的动态触发
以上两点的实现均不影响核心程序的运行
要在程序中实现插件,我们首先应该想到的就是定义不同的钩子(Hooks);“钩子”是一个很形象的逻辑概念,你可以认为它是系统预留的插件触发条
件。它的逻辑原理如下:当系统执行到某个钩子时,会判断这个钩子的条件是否满足;如果满足,会转而先去调用钩子所制定的功能,然后返回继续执行余下的程
序;如果不满足,跳过即可。这有点像汇编中的“中断保护”逻辑。
某些钩子可能 ......
一、什么是数组
数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。数组的每个实体都包含两项:键和值。
二、声明数据
在PHP中声明数组的方式主要有两种:一是应用array()函数声明数组,一是直接为数组元素赋值。
<1>array()函数声明的数组的方式array([mixed...]) 参数mixed的语法为key=>value
如,<?php
$array=array("1"=>"编","2"=>"程","3"=>"词","4"=>"典");
print_r($array);
echo "<br>";
echo $array[1]; //注意:下标默认是从0开始
echo $array[2];
echo $array[3];
echo $array[4];
?>
<2>直接为数组元素赋值。如果在创建数组时不知所创建数组的大小,或在实际编写程序时数组的大小可能发生变化,采用这种数组创建的方法较好。
如,<?php
$array[1]="I";
$array[2]="love";
......
1.直接使用mysql_insert_id()获取上一次插入的数据的AUTO_INCREMENT的变量的编号,比使用mysql语句获取方便极多。但注意要在query()后立刻使用,保证时间正确性,如多线程访问数据库是产生误差。
2.等号左右各留一空格,清晰便于阅读。
3.PHP中,单双引号均可以套string,区别在于:
"this is a simple $test" = 'this is a simple '.$test
双引号可识别出其中的变量,但单引号需要断开用.连接变量。
推荐使用最外层单引号,中间遇变量断开,如需要可直接内部嵌套双引号。
避免类似于"this is a /"test/""的情况,需要打两次转移符号。
4.使用
//page1.php
header("location: page2.php?id=123&do=test");
//page2.php
$id = $_GET["id"];
$test = $_GET["do"];
传值时,注意 ? 后等号左右不能加空格,否则会导致获取变量失败。
to be continued... ......