一段数据库备份代码

    $dbname = 'database';
    $sql  = '';
    //创建数据库
    $arr  = $db->QueryFirst("SHOW CREATE DATABASE {$dbname}");
    $sql .= "/* 创建数据库 {$dbname} */\r\n";
    $sql .= "DROP DATABASE IF EXISTS {$dbname};\r\n{$arr['1']};\r\n";
    $sql .= "USE {$dbname};\r\n";

    //创建表
    $tables = $db->select("SHOW TABLES", "Tables_in_{$dbname}");
    $tables = array_keys($tables);
    foreach ($tables as $table) {
        $arr  = $db->QueryFirst("SHOW CREATE TABLE {$table}");
        $sql .= "\r\n/* 创建表 {$dbname}.{$table} */\r\n";
        $sql .= "DROP TABLES IF EXISTS {$table};\r\n{$arr['1']};\r\n";

        //获取数据
        $res    = $db->Query("SELECT * FROM {$table}");
        $values = array();
        while ($row = $db->FetchArray($res, MYSQL_ASSOC)) {
            $values[] = '(\'' . join('\',\'', array_map('addslashes', $row)) . '\')';
        }
        $values = join(',', $values) . ';';
        if ($values != ';') {
            $sql .= "\r\n/* 插入数据 {$table} */";
            $sql .= "\r\nINSERT INTO {$table} VALUES {$values}\r\n";
        }
    }

IBM出品PHP教程文章

IBM出品PHP教程文章

概述
PHP 简介

部署
安装 XAMPP 进行方便集成开发

源代码控制
利用 PHP 和 Subversion 从零开始创建一个 blog

开发
学习 PHP
开始了解 PHP V5 中的对象
用 PHP 走向动态
学习 PHP,第一部分
学习 PHP,第二部分
学习 PHP,第三部分
用 PHP 开发健壮的代码,第 1 部分
用 PHP 开发健壮的代码,第 2 部分:有效地使用变量
用 PHP 开发健壮的代码,第 3 部分:编写可重用函数 — 充分利用函数
PHP 例解,第 1 部分:轻松的 Webzine 编辑和发送
PHP 例解,第 2 部分:深入研究 Webzine 编辑和发送

高级 PHP
高级 PHP V5 对象
用 PHP 构建 Web 服务
用 PHP 绘制 3-D 图像
使用 PHP 创建图形的巧妙方法
如何在 PHP 中使用正则表达式
结合 PHP 使用 HTML 表单
用 PHP 读取和编写 XML DOM
通过 PHP 脚本访问企业应用

PHP 设计
MVC 模式、类封装还是黑客代码——合理设计 PHP 项目

PHP 应用
使用 PHP 构建搜索优化应用程序,第 1 部分:入门
用 OpenLaszlo 装点 PHP 应用,第 1 部分: 创建交互式界面
用 OpenLaszlo 装点 PHP 应用,第 2 部分: PHP REST 和数据绑定
用 OpenLaszlo 装点 PHP 应用,第 3 部分: 添加数据库
使用 Snort 和 PHP 构建一个小型网络防御系统
用 PHP 使 Web 数据分析进入更高境界 — 设计您的数据分析,做比简单原始计数更多的事
用 PHP 实现的简单线性回归:第 1 部分 — 数学库在 PHP 中的重要性
用 PHP 实现的简单线性回归,第 2 部分 — 解决输出和概率函数缺陷的数据研究工具

调试和监测
PHP 程序员的调试技术

集成
IBM 数据库服务器
使用 DB2 UDB 进行应用程序开发
用 PHP 开发 IBM Cloudscape 和 DB2 通用数据库应用程序
通过 PDO 将 PHP 连接到 DB2 和 Cloudscape
Zend Core for IBM 技术路线图
Zend Core for IBM – PHP 开发人员指南
DB2 Express-C:IBM 提供的免费大餐

IBM Web 和应用服务器
在 IBM HTTP Server 上部署 PHP 应用程序
IBM WebSphere 开发者技术期刊: 使用 PHP 和 J2EE 来实现通用的 Web 应用程序基础架构
在 Apache Geronimo 中运行 PHP 应用程序

第三方服务
使用 Web 服务和 eBay SDK 开发应用程序,第 1 部分: 构建 eBay 搜索引擎
使用 Web 服务和 eBay SDK 开发应用程序,第 2 部分:使用 eBay SOAP API 构建一个 eBay 搜索引擎
用 PHP、Derby 和 PayPal 创建 Web 店面,第 1 部分:设置基本数据库
用 PHP、Derby 和 PayPal 创建 Web 店面,第 2 部分:收集付款
用 PHP、Derby 和 PayPal 创建 Web 店面,第 3 部分: 设置订单、送货和电子邮件
用 PHP 创建 Amazon 店面,第 1 部分:用 Amazon ECS 获得内容

扩展
PHP 服务数据对象简介
如何使您的 PHP 应用程序变成聊天机器人
在 PHP 世界中选择最合适的模板

PEAR(PHP Extension and Application Repository)
PEAR 简介:用 PEAR 来写你的下一个 PHP 程序
PEAR 简介:常用模块
PEAR 简介:使用 PHPDoc 轻松建立你的 PEAR 文档
PEAR 简介:创建中间的数据库应用层
PEAR 实践:PHP 中 MVC 机制的实现

安全性
确保 PHP 应用程序的安全
审计 PHP,第 1 部分:理解 register_globals

PHP Zend 框架
理解 Zend 框架,第 1 部分:基础 — 介绍 Zend 框架
理解 Zend 框架,第 2 部分: 模型-视图-控制器及添加数据库
理解 Zend 框架,第 3 部分: 提要(RSS)
理解 Zend 框架,第 4 部分: 使用 Zend_HTTP_Client 获取无提要的内容
理解 Zend 框架,第 5 部分: 创建 PDF 文件
理解 Zend 框架,第 6 部分: 发送电子邮件
理解 Zend 框架,第 7 部分: 搜索
理解 Zend 框架,第 8 部分:添加相关信息和服务
理解 Zend 框架,第 9 部分: 用 Ajax 和 JSON 添加交互性

PHPer的历练-转

身为一名中级PHPer菜鸟..无聊了就爱在各个PHP论坛瞎转.看到了好多PHP初学者都问到了很多相同的问题.而且我学PHP的时候也都遇到过.为了让PHP初学者少走一些弯路.所以突然神经恍惚.决定写下此文章.仅供PHP初学者参考.如有错误.还望指出.不甚感激.

PHP其实是一种很简单易学的语言.如果要精通PHP多则三年.少则一年就足够了.但是为什么三年之后我们照样是菜鸟?

不知道从什么开始.学习PHP我们不得不学习数据库.学习架构.学习面向对象.学习前端.学习linux.学习协议甚至美工等直接导致了现在PHPer都是最累的一种程序员.

最累就不算什么了.往往PHP会被认为是下等的程序.拿着最低级的工资.却要掌握web方面几乎全部的知识.这实在是不公平.

可喜的是 我们逐渐在国内看到了转变.国内越来越多的公司从Java或者C#等转到了PHP.所以各位PHPer一定要有自己的梦想.你们都会很牛B的.请坚信.

扯远了.回到我要说的重点上.下面几个问题包含着我遇到的问题.也许我说的不一定对或者你不一定同意我的看法.十分愿意接受你的意见.总之我们只是想让PHPer都雄起:-)

1.编码的问题

这不光是PHP..只要是程序上.就会遇到.至少我和我身边的人都遇到了.而且在Web方面.往往编码问题更是非常难解决.非常难调试.有时候程序出了莫名其妙的问题,很难想到是编码出了问题等等.

这些问题总是困扰着我们.所以我建议PHP初学者.一定要编码统一.并且强烈建议统一为UTF-8.中文不建议使用GBK或者GB2312等.因为在AJAX中传输的时候是不认识这种编码的.

如果要统一编码,就要在编码可能出现的任何地方注意一下.

1) header头的编码

个人建议在你的PHP中都应该加上下面这句话(特殊header除外)

header(“Content-type: text/html;charset=utf-8″);

这样可以避免一些问题.比如我们可以看到有些网站submit后就是一个alert然后跳转.但是他们没有设置编码.如果他的编码跟浏览器的默认编码不一致.就会出现乱码了.
你是单纯的HTML.一定要记得把meta的编码标签放到title标签前面. 如果你不理解就记住把编码的信息放到head标签的第一行就可以了.最终的效果是这样的

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
2) 文件的编码

我们保存文件的时候,选择编码一定要统一.如果按照上面的.我们就应该选择UTF-8.
一般的编辑器都有此文件的编码信息.如果你发现不是UTF-8.请马上更改.
比如我们在Dreamweaver中打开了一个模板文件.发现右下角显示 GB2312(简体中文).此时不要做任何更改.马上CTRL+J 然后选择编码更改成UTF-8模式并保存.

文件的编码不一定是PHP文件的.也得保证你的JavaScript文件与css文件都为UTF-8编码.

另外还有一个重要的一点.就是BOM..这个东东PHP是不太欢迎的.所以我们在保存的时候要选择UTF-8无BOM格式.如果你用的编辑器是UE.那么请你着重注意这一点.

3) 数据库的编码

这个我就不想多说了.网上有太多的文章.如果你是MySQL记得每次连接后进行SET NAMES = ‘utf8′就可以了.并且那个utf8中间是没有横线的.

2.MVC的问题

程序员理论上来说应该是个完美主义者.他们不光想着把程序写的运行就可以了.而且还要优雅.

但是话说回来.把程序按照MVC做了以后我们的代码就优雅了吗? 答案当然是否定的.

学习架构是一个理解的过程.当你真正体会到这个架构的好处的时候.才会理解其真正的含义.切勿盲目.

有时候我们会做这样的打算.用这个月的时间去学习MVC.好吧.我想你应该这样去做.你学会给自己定目标了.

但是一个月后我们也许并不能真正的理解MVC..但是至少我们会根据他的模式他的基本.换句话说也许我们没有学会葵花宝典.但是我们应该会用辟邪剑法了.

3.面向对象的问题

关于PHP面向对象的问题.一直都纠缠不清.有的人不觉得PHP面向对象是个好的东西.有的人甚至不认为面向对象是个好的玩意,比如Linus.

我们不必去纠缠这个东西到底好不好.至少我们应该知道从面向对象诞生到现在.经过了这么多年的演变.运用到各种项目甚至语言中.我们有理由相信存在即有其道理.

实践是检验真理的唯一标准.这么多年面向对象越发展形势越好.看来我们学习就变得是种必须了.

与一些架构的知识类似.面向对象也不是那么好学的.面向对象是种理念.但是具体到某种语言的时候.其意义也会发生一些微妙的变化.

PHP的面向对象很灵活.再加上其特有的魔术方法.会造就出一种特别形势的面向对象.也许这跟你平时看Java的面向对象不太一样.

不一定把你需要的方法放到一个类中就是面向对象.当你真正体会到面向对象给你的编码带来快捷.带来方便.你就对面向对象有更深的一层理解了.

正所谓欲速则不达.切勿心急.你想几天之内理解相对论那纯粹是扯淡.

4.算法的问题

似乎PHP与算法总是相距甚远的.PHP大多数算法都是基于数组实现的.而我们又知道PHP的数组的特性就注定当数组变得非常大的时候.效率会直线下降.

其实PHP就是个做网站的.大家不要也不必给她带什么高帽子.在Web方面尤其是在PHP所服务的前端的实际情况下会涉及到算法的地方会非常少.

PHP的算法面试题无非就是对数组或者对字符串的操作..动动脑子加上手册.那基本就没问题了.

那你也许会问.我想学习PHP.那我还学习算法吗?

我觉得你需要学.并且更需要学数据结构.这门功课就像是一门内功.会在潜移默化中影响你的编码.

这时候再配合上我们前面的辟邪剑法.恭喜你 你已经学会葵花宝典了!

5.框架的问题

PHP的框架是各种语言中最多的.用不用框架.选什么框架这又成为一个争议的话题..

我的建议是非常推荐学习至少一款框架.这可以加深你对PHP的认识.我们学习框架不是说要学这个框架怎么用.怎么做项目.

我们要去看它的源码.看看他是怎么实现的.这时候你就可以选择自己开发一个小型的框架.不求做的多好.不求别人多少项目去运用.

我们只是为了学习而已.

6.JavaScript的问题

可以说我看过这么多语言.最神奇就莫过于JavaScript了.平时Java一直宣称自己一切皆对象.其实我更觉得JavaScript才是一切皆对象.

JavaScript好学吗? 好学!其实在平时Web运用时候.一般的JavaScript操作就是DOM操作.

JavaScript难学吗? 难学!如果我们被其他语言的面向对象的思维束缚了.就很难理解JavaScript的面向对象.并且JavaScript里面概念也非常多.

prototype arguments call apply callee caller 闭包等概念就让我们不知所措.再加上诡异的JavaScript的代码风格与其难调试的特征直接导致我们这些菜鸟避而远之.

曾经我转发过一段实现document.ready的代码.其诡异程度不得不佩服.

个人觉得看一些JavaScript框架的源码就是最好的学习方法.曾经在写我的PHP框架的时候.由于使用了统一入口+自己定义的URL规则.所以再使用普通属性为get的form的时候就会获取不到参数.

这时候我就想到了jQuery.form中的formSerialize方法.摘选出来并做了一些修改.就可以拿来使用了.

7.CSS问题

我之所与把CSS跟JavaScript分开来说.我觉得CSS的学习更有特点.

其实要我说CSS是最简单的东西了.我们只是知道了一些基本的CSS属性.写页面绝对不成问题.

CSS的主要特征在于必须动手.你看N本CSS的书不如实际动手去写一个页面.

CSS另外一个特点就是得多试.也许这个属性不能达到你的效果.那你就换一个.这也是最笨最有效的办法:-)

当然 这只是初级CSS的要求. 会了这些之后 我们还得兼容浏览器. 其实这个也不难 无非就是几个浏览器同时开着一个属性一个属性的试.

也可以熟记一些hack 比如IE6认识_ IE都认识*等.如果你觉得这样写CSS不够标准.那么把hack放到不同的css文件中.比如ie6的就叫ie6.css

然后再页面上用下面的代码就可以了.
<!--[if lt IE 6]>
	<link href="css/ie6.css" rel="stylesheet" type="text/css" />
<![endif]-->
更高级的当然是用户的体验与设计了.这个我也不懂就不说了@_@ 希望达人补充.

8.linux的问题

个人强烈建议每人的电脑上都安装一个linux系统.如果你觉得太折腾 可以选择wubi方式安装Ubuntu.对于懒人这个是最简单有效的方法了.

你无聊的时候可以下载一份PHP源码自己编译下试试.切忌apt-get.因为往往服务器版本不是rhel就是centos.那里是没有这个命令的.

而且apt-get到的往往不是最新的版本.并且又不能自己定制.

linux总会出现这样活着那样莫名其妙的问题.比如环境稍微不一样就编译不通过.服务起不来.

这时候不要着急.看错误提示 看日志.Google下自己尝试解决.

编译完不要觉得就完了 试试不同的配置.而且修改一下源码再编译试试.

比如我们下载了一份nginx的源码.然后修改下header头等一些地方. 就可以编译一份属于自己的HTTP Web Server了.

当然 你如果叫BWS或者GWS也行:-)

还有个问题 linux需要背命令吗? 这个是无可厚非的. 熟记一些常用的命令可以提高速度.这点我需要反思.经常一些常用的命令还需要看下参数..

另外一个就是Shell的问题. Shell其实不难.但是语法在我看来比较丑陋@_@. 看看wiki就可以学习大半了..主要还得是联系. 我们可以看到一个现象.一些公司在招聘高级PHPer的时候这条也列为必须条件了.

其实网上linux的资料非常多. 大多数你遇到的问题别人都会遇到.所以善于用Google. 并且熟读英语.

9.语言的问题

这个的问题就太多口水战了.最终谁也没有战胜谁.我们不必去参与这些无聊的事情.这些都是年轻粪青要做的.

你再牛B你有Linus牛B吗? 他喷C++的喷了这么多年.C++怎么样了?

所以我们不必纠缠这些.做好自己做的就OK了.

既然你选择了PHP.就不要犹豫.

也许我们在做项目的时候PHP显得不够用了.那我们可以用Java或者C来做个中间件.这又何尝不可.

一种语言发挥她的最大最用才是真理.

10.态度的问题

态度一定要谦虚谨慎. 这是作为一个程序员应该有的美德.切勿自我膨胀.

你学的越多 你就会发现自己不足就越多.

等你牛B了你可以说一些狂妄的话.但是现在我们都不牛B.至少如果你看到我写的这篇文章.你应该还不太牛B. 我说了这篇文章是面向初学者的:-)

11.女人的问题

呃..这个自己解决吧@_@

原文地址: http://www.skiyo.cn/2010/03/22/phpers-experiences/

生成缩略图函数

/**
 * 生成图片缩略图
 *
 * @param   string  $src        原图地址
 * @param   string  $savePath   缩略图保存路径
 * @param   integer $width      缩略图宽
 * @param   integer $height     缩略图高
 * @return  true
 */
function buildThumb($src, $savePath, $width = 220, $height = 180)
{
    $arr = getimagesize($src);

    if (!is_array($arr)) {
        return false;
    }

    //1,2,3分别为gif,jpg,png
    if ($arr['2'] > 4) {
        return false;
    }

    $func = 'imagecreatefrom';
    switch ($arr['2']) {
        case 1  : $func .= 'gif'; break;
        case 2  : $func .= 'jpeg'; break;
        case 3  : $func .= 'png'; break;
        default :  $func .= 'jpeg';
    }

    $srcIm = $func($src);
    $im    = imagecreatetruecolor($width, $height);
    imagecopyresized($im, $srcIm, 0, 0, 0, 0, $width, $height, $arr['0'], $arr['1']);
    imagejpeg($im, $savePath);
    imagedestroy($srcIm);
    imagedestroy($im);
    return true;
}

使用方法

buildThumb('./src.jpg', './thumb.jpg', 100, 50);

stdClass的介绍

阅读: 29 评论: 0 作者: 小恺 发表于 2010-02-01 21:05 原文链接

原文: http://www.21andy.com/blog/20080508/1104.html

一维数组,我现在特别喜欢把它写成对象,因为键盘打起来比较顺手,看起来也顺眼,如

$andy = array();
$andy['a'] = 1;
$andy['b'] = 2;
$andy['c'] = 3;

我喜欢把它变成这样

$andy = array();
$andy = (object)$andy;
$andy->a = 1;
$andy->b = 2;
$andy->c = 3;

新建空数组只要$andy = array();
新建空对像却要$andy = new Andy; 而且还得先有个class Andy{}
或者得2行
$andy = array();
$andy = (object)$andy;
用array直接改类型成object有点别扭,今天找到了答案,感谢phpx的兄弟

====================================================================

顺便转一下stdClass的介绍

$user = new stdClass();
$user->name = gouki;

这样的代码,这是干嘛用的呢?
翻开手册,搜索stdClass,你会发现,手册上几乎没有介绍,如果你再次搜索google,看到的也几乎全是英文解释。
其实,stdClass在PHP5才开始被流行。而stdClass也是zend的一个保留类。似乎没有其他作用。也几乎没有任何说明。

或者,我们可以这么理解:stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,就是没有方法。
凡时用new stdClass()的变量,都不可能会出现$a->test()这种方式的使用。

或者,我们可以又这么理解一下,正因为PHP5的对象的独特性,对象在任何地方被调用,都是引用地址型的,所以相对消耗的资源会少一点。在其它页面为它赋值时是直接修改,而不是引用一个拷贝。

例如:

$user = new stdClass();
$user->name = gouki;
$myUser = $user;
$myUser->name = flypig;

如果在PHP4时代,这样的代码就是在消耗系统资源。因为:
$myUser = $user;
这是创建了一个拷贝。所以,在PHP4的时候,都是这样使用:
$myUser = & $user;

有人说,为什么不用数组呢?数组不是更方便吗?而且对于PHP这样的弱类型程序来说,用数组应该是最方便的。
确实。数组在程序的使用中应该是最方便的,然而数组的每次被引用($a = $b),其实都是创建了一个副本,而且,数组被unset后,还是占用了内存(这个是听人说来的,我没有测试……也不知道怎么测试,如果有人知道,请告诉我,谢谢 )
不过SPL的标准类库里,还有一个函数arrayobject,可以直接将数组转化为对象这也是一个好办法哦。

评论: 0 查看评论 发表评论

找优秀程序员,就在博客园


最新新闻:
· Nvidia放弃对开源驱动的支持(2010-03-27 12:01)
· 经济观察报:网络实名既不应该也不可行(2010-03-27 11:55)
· 俄搜索引擎Yandex推出客户化版谷歌Chrome(2010-03-27 11:54)
· Facebook聘谷歌高管抓广告业务 或推虚拟货币(2010-03-27 11:50)
· 谷歌进军云计算企业应用 聘甲骨文老臣任副总(2010-03-27 11:48)

编辑推荐:博客园简历功能调查

网站导航:博客园首页