存档

‘PHP’ 分类的存档

PHP数组函数in_array与array_diff

2010年7月27日 admin 2 条评论

in_array — 检查数组中是否存在某个值
例子:

1
2
3
4
5
6
7
8
9
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}
?>

array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
例子:

1
2
3
4
5
6
7
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
 
print_r($result);
?>

用处
判断变量是否在数组中( in_array )
对不在其一数组中的键值进行操作:
例:

1
2
3
4
5
6
7
8
$subArr=array('0'=>'isTitle','1'=>'isUrl','2'=>'isIntro','3'=>'isAuthor','4'=>'isPub_Date','5'=>'isPub_Time', );
$notSelect = array_diff($subArr,$data); //取数组交集,判断没有选中的对象
foreach($notSelect AS $key=>$val)
    {
      $queryNo[]=$val.'=0';
	}
$queryNo=implode(',',$queryNo);
$queryNo= " UPDATE ......   ";
分类: PHP 标签: , , ,

[转]PHP程序61条面向对象分析设计的经验原则

2010年7月14日 admin 没有评论

你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起 。 —– Arthur J.Riel

  (1)所有数据都应该隐藏在所在的类的内部。

  (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。

  (3)尽量减少类的协议中的消息。

  (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。

  (5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。

  如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。

  (6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。

  (7)类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。

  (8)类应该只表示一个关键抽象。

  包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响 .

  (9)把相关的数据和行为集中放置。

  设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。

  (10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。

  朝着稳定的方向进行依赖.
阅读全文…

分类: PHP 标签: ,

Memcached在大型网站中应用

2010年7月11日 admin 没有评论

原文链接:http://tomore.myoow.com/showlog351.html
===================================================
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端, 同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcached作者对分布式cache的理解和解决方案。memcached完全可以用到其他地方 比如分布式数据库, 分布式计算等领域。
阅读全文…

分类: PHP 标签: ,

ThinkPHP导入Excel

2010年6月22日 admin 2 条评论

前面写过一篇PHP读取EXCEL插入Mysql数据库中,应用phpExcelReader导入, 这次做毕业设计时用的ThinkPHP,有个上传学生信息(excel)插入数据库的功能,其实原理一样,先是上传,然后读取内容,然后根据phpExcelReader的read读取各sheet值然后插入数据库。其代码为:
import.html

1
2
3
4
5
6
7
<form method="post" action="__URL__/import" name="form1" enctype="multipart/form-data">
                <table cellspacing="0" cellpadding="0" border="1">
                    <tr>
		<td ><input type="file" name="myfile" /> <input type="submit" class="mybutton" name="import" value="导入" ></td>
                    </tr>
                </table>
	</form>

StudentsAction.class.php

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class StudentsAction extends Action
{
public function import()
	{   
		 header("Content-Type:text/html; charset=utf-8");
		 Vendor('Excel.reader'); // 加载reader类。
        if(!$this->isPost())
    	{
    		$this->display();
    	}
    	else
    	{
        if($_FILES['myfile']['name']!='')
	     {
			$tmp_file=$_FILES['myfile']['tmp_name'];
			$file_types=explode(".",$_FILES['myfile']['name']);
			$file_type=$file_types[count($file_types)-1];
			if(strtolower($file_type)!="xls"){
				//  echo "<span style=\"color:red;line-height: 25px;\">格式错误 <a href=\"#\" onclick=history.go(-1);>请返回</a> </span>";
			 $this->assign('jumpUrl',__URL__/import);
    		        $msg="格式错误,请重新上传";
    		        $this->success($msg);
			}
			$savePath="Excel/xls/";
			$str = date('Ymdhis');
			$file_name=$str.".".$file_type;
			if(!copy($tmp_file,$savePath.$file_name)){
				//echo "<span style=\"color:red;line-height: 25px;\">上传错误请重试!!<a href=# onclick=history.go(-1);>[返回]</a></span>";
				$this->assign('jumpUrl',__URL__/import);
    		        $msg="上传错误,请重新上传";
    		        $this->success($msg);
 
			}else{
			    $data = new Spreadsheet_Excel_Reader();
				$data->setOutputEncoding('utf-8');
		$data->read("Excel/xls/".$file_name);
					for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) { 
                                    $number=$data->sheets[0]['cells'][$i][1];                               $passwd=$data->sheets[0]['cells'][$i][1];	                       $name=$data->sheets[0]['cells'][$i][2]; 
                                    $catid=$data->sheets[0]['cells'][$i][3];
                                    $sex=$data->sheets[0]['cells'][$i][4];
                                    $tel=$data->sheets[0]['cells'][$i][5];
                                    $home=$data->sheets[0]['cells'][$i][6];
                                    $minzu=$data->sheets[0]['cells'][$i][7];
                                    $Students=D("Students");
				 $info=array(
            	                                               'number'=>$number,
				         'passwd'=>$passwd,
				         'name'=>$name,
				         'catid'=>$catid,
				         'sex'=>$sex,
				         'tel'=>$tel,
				         'home'=>$home,
            	                                                'minzu'=>$minzu,
                                                             );
		           $Students->create($info);
    		            $Students->add();
                   }
		       $this->assign('jumpUrl',__URL__);
    		        $msg="学生信息导入成功";
    		        $this->success($msg);
              	}
	     }
	  }
	}
}
分类: PHP 标签: ,

[转]GPC的思考:$_REQUEST、$_GET、$_POST、$_COOKIE 的关系和区别

2010年6月13日 admin 没有评论

原文地址:http://52php.com.cn/index.php/archives/6/

总结:
$_REQUEST、$_GET、$_POST、$_COOKIE 的关系和区别。
1.关系:$_REQUEST包含了$_GET、$_POST、$_COOKIE的所有内容,是它们的集合体。
2.$_GET、$_POST、$_COOKIE在$_REQUEST中都有一个副本。改变$_REQUEST的值不影响$_GET等,反之亦然。
3.GET和POST同名的情况下,$_REQUEST取的是POST的值。COOKIE与GET或POST重名的情况下,$_REQUEST取的是COOKIE的值。COOKIE的优先级最高。

测试开始。

测试1:

echo ‘

';//源格式打印
//URL加上m=xxoo来测试$_GET
    print_r($_REQUEST);//首先打印内容
    print_r($_GET); 

    $_REQUEST = array();//清空$_REQUEST
    echo $_GET['m'];
echo '

‘;
测试结果:$_GET['m']的值是xxoo。

测试2:

echo ‘

';//源格式打印
//URL加上m=xxoo来测试$_GET
    print_r($_REQUEST);
    print_r($_GET); 

    $_GET = array();//清空
    print_r($_REQUEST);
echo '

‘;
测试结果:$_REQUEST['m']的值是xxoo。

结论:对$_REQUEST的操作没有影响到$_GET,反之亦然。$_REQUEST只是包含了一个$_GET的副本(the same as $_POST 哈哈)。

————————————华丽的分隔线 :) —————————————————
好。继续
测试3

//POST-GET重名测试
//从其他页面POST传送一个m的值为post,action地址加上m=get
print_r($_REQUEST);
print_r($_GET);
print_r($_POST);
结果:$_REQUEST['m'] == ‘post’。
结论:同时提交GET和POST且同名,$_REQUEST取的是POST的值。(可能是POST优先级更高。)

测试4

//cookie与post\get 重名测试
setcookie(‘m’, ‘cookie’, time()+3600);//先把COOKIE种上,名字为m,值为cookie。然后刷新。(COOKIE要刷新才生效)

//从其他页面POST传送一个m的值为post,action地址加上m=get
print_r($_REQUEST);
结果:$_REQUEST['m'] == ‘cookie’。结论:COOKIE的优先级最高。

分类: PHP 标签: ,

数组&&字符串 相互转换函数(PHPCMS)

2010年5月15日 admin 没有评论

将数组类型直接插入MYSQL时插入不进为ARRAY
插入数据前把你的数组序列化:
serialize($list);
读出的时候再使用
unserialize($list);

PHPCMS直接将数组存入数据库的函数。
数组转化为字符串: array2string

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function array2string($string, $isformdata = 1)
{
	if($string == '') return '';
	if($isformdata) $string = new_stripslashes($string);
	return addslashes(var_export($string, TRUE));
}
 
 
function new_stripslashes($string)
{
	if(!is_array($string)) return stripslashes($string);
	foreach($string as $key => $val) $string[$key] = new_stripslashes($val);
	return $string;
}

stripslashes 函数:
Returns a string with backslashes stripped off. (\’ becomes ‘ and so on.) Double backslashes (\\) are made into a single backslash (\).
该函数用于清理从数据库或 HTML 表单中取回的数据。
删除由 addslashes() 函数添加的反斜杠。

字符串转化为数组:输出。

1
2
3
4
5
6
function string2array($data)
{
	if($data == '') return array();
	eval("\$array = $data;");
	return $array;
}

eval
将值代入字符串之中。

语法: void eval(string code_str);
传回值: 无
函式种类: 数据处理

内容说明:
本函式可将字符串之中的变量值代入,通常用在处理数据库的数据上。参数 code_str 为欲处理的字符串。值得注意

的是待处理的字符串要符合 PHP 的字符串格式,同时在结尾处要有分号。使用本函式处理后的字符串会沿续到 PHP

程序结束。

分类: PHP 标签: , , ,

mysql备份还原数据库

2010年5月7日 admin 没有评论

1:使用命令。
备份:

c:\mysql\bin>mysqldump -uroot -h127.0.0.1 -proot  数据库>d:\sql.sql

一条mysqldump语句
mysqldump -u用户名 -h主机地址 -p密码 数据库名>导出的位置:\名称.sql

导入:

mysql>use database name;
Database changed
mysql>source d:\sql.sql;

OK
2:PHPMyadmin
众所周知, PhpMyadmin 是一款很好的可视化mysql管理软件,
选择数据库— 导出–选择SQL 另存为文件; OK
导入的时候同样 import
3:其他
Navicat MysqlFront 等等其他一些mysql可视化软件同样可以备份 还原数据库。

分类: PHP 标签: , ,

PHP读取EXCEL插入Mysql数据库中

2010年4月11日 admin 没有评论

最近公司有个客户需要将几千条的excel表数据导入,给人家导一下吧,以前到也看过一些导入的例子,方法很多,有的转换成csv格式的,txt的,什么都有,但是好多出现乱码情况的,网上PHP读取EXCEL的例子也很多,找了一个很好的类—phpExcelReader ,测试了几次,很不错。 下载地址

下载下后, 更改下 Excel– reader.php 的第31行

require_once 'Spreadsheet/Excel/Reader/OLERead.php';

改为

require_once 'OLERead.ince';

它给的例子的excel我这运行不了, 可能是我装的office的事吧 ^_^。
自己写一个, 现在写一个读取表 插入数据库的实例:

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<?php 
require_once 'Excel/reader.php';         //加载所需类
$data = new Spreadsheet_Excel_Reader();  // 实例化
$data->setOutputEncoding('gbk');  //设置编码
$data->read('新建 Microsoft Excel 工作表.xls');  //read函数读取所需EXCEL表,支持中文
$conn= mysql_connect('localhost', 'root', ' ') or die("Can not connect to database.");    //连接数据库
mysql_query("set names 'gbk'");//设置编码输出
mysql_select_db('excel'); //选择数据库
for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {
$sql = "INSERT INTO test VALUES('".  $data->sheets[0]['cells'][$i][1]."','".  $data->sheets[0]['cells'][$i][2]."','".  $data->sheets[0]['cells'][$i][3]."','".  $data->sheets[0]['cells'][$i][4]."','".  $data->sheets[0]['cells'][$i][5]."','".  $data->sheets[0]['cells'][$i][6]."')";  
echo $sql.'<br />';  
 
//$insert = mysql_query($sql);  插入部分 注释掉,实际可以自己插入。
}
?>

注意事项
我这的 for $i=2 是从表的第二行开始(一般第一行都得是字段说明,就不插入数据库了。)
注意sheet段
numRows 为你表的行数
cells 表的列数,示例中 插入的是6列的excel表
如果excel是上传的,先上传然后在读取路径 表名,插入数据库。

分类: PHP 标签: , ,

最近的生活

2010年4月8日 admin 没有评论

工作了2周了,每天9点上班, 6点起床,8点半到公司。6点下班,8点回宿舍,挺规律的生活。第一次上班,什麽都不知道,需要学的还很多哇。
在公司做了1个礼拜的前端,页面仔,学到些没注意过的细节什么的。最近一周开始做程序,接触PHPCMS, 用开源系统做网站, 回头写个小教程,整理下思路。

分类: PHP 标签: ,

phpmyadmin导入出错:SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”

2010年3月19日 admin 没有评论

今天在给一个网站导入 mysql 时出错。
SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”
MySQL 返回:
#1193 – Unknown system variable ‘SQL_MODE’

google了一下,是因为备份的mysql版本是5.0以上的,而导入的myssql是4.X的。

怎么解决这个问题呢,那就是在到导出sql文的时候选择:SQL compatibility mode 为mysql40,而不是NONE。

分类: PHP 标签: ,