PHP 能做什么?

PHP 能做任何事。PHP 主要是用于服务端的脚本程序,因此您可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功能远不局限于此。

PHP 脚本主要用于以下三个领域。

 

  • 服务端脚本。这是 PHP 最传统,也是最主要的目标领域。开展这项工作您需要具备以下三点:PHP 解析器(CGI 或者服务器模块)、WEB 服务器和 WEB 浏览器。您需要在运行 WEB 服务器时,安装并配置 PHP,然后,可以用 WEB 浏览器来访问 PHP 程序的输出,即浏览服务端的 PHP 页面。请查阅“安装”一章以获取更多信息。
  • 命令行脚本。您可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,您仅仅只需要 PHP 解析器来执行。这种用法对于依赖 cron(Unix 或者 Linux 环境)或者 Task Scheduler(Windows 环境)的日常运行的脚本来说是理想的选择。这些脚本也可以用来处理简单的文本。请参阅“PHP 的命令行模式”以获取更多信息。
  • 编写客户端的 GUI 应用程序。对于基于窗口式的应用程序来说,PHP 或许不是一种最好的语言,但是如果您非常精通 PHP,并且希望在您的客户端应用程序中使用 PHP 的一些高级特性,您可以利用 PHP-GTK 来编写这些程序。用这种方法,您还可以编写跨平台的应用程序。PHP-GTK 是 PHP 的一个扩展,在通常发布的 PHP 包中并不包含它。如果您对 PHP-GTK 感兴趣,请访问其网站以获取更多信息。

 

PHP 能够用在所有的主流操作系统上,包括 Linux、Unix 的各种变种(包括 HP-UX、Solaris 和 OpenBSD)、Microsoft Windows、Mac OS X、RISC OS 等。今天,PHP已经支持了大多数的 WEB 服务器,包括 Apache、Microsoft Internet Information Server(IIS)、Personal Web Server(PWS)、Netscape 以及 iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd 等。对于大多数的服务器,PHP 提供了一个模块;还有一些 PHP 支持 CGI 标准,使得 PHP 能够作为 CGI 处理器来工作。

综上所述,使用 PHP,您可以自由地选择操作系统和 WEB 服务器。同时,您还可以在开发时选择使用面对过程和面对对象,或者两者混和的方式来开发。尽管 PHP 目前的版本还没有支持 OOP 所有的标准,但很多代码仓库和大型的应用程序(包括 PEAR 库)仅使用 OOP 代码来开发。

使用 PHP,您并不局限于输出 HTML。PHP 还能被用来动态输出图像、PDF 文件甚至 Flash 动画(使用 libswf 和 Ming)。您还能够非常简便的输出文本,例如 XHTML 以及任何其它形式的 XML 文件。PHP 能够自动生成这些文件,在服务端开辟出一块动态内容的缓存,可以直接把它们打印出来,或者将它们存储到文件系统中。

PHP 最强大最显著的特性之一,是它支持很大范围的数据库。您会发现利用 PHP 编写数据库支持的网页简单得难以置信。目前,PHP 支持如下数据库:

 

Adabas D Ingres Oracle (OCI7 and OCI8)
dBase InterBase Ovrimos
Empress FrontBase PostgreSQL
FilePro (read-only) mSQL Solid
Hyperwave Direct MS-SQL Sybase
IBM DB2 MySQL Velocis
Informix ODBC Unix dbm

 

我们同时还有一个 DBX 扩展库使得您可以自由的使用该扩展库支持的任何数据库。另外,PHP 还支持 ODBC,即 Open Database Connection Standard(开放数据库连接标准),因此您可以连接任何其它支持该世界标准的数据库。

 

PHP 还支持利用诸如 LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM(Windows 环境)等不计其数的协议的服务。您还可以开放原始网络端口,使得任何其它的协议能够协同工作。PHP 支持和所有 WEB 开发语言之间的 WDDX 复杂数据交换。关于相互连接,PHP 已经支持了对 Java 对象的即时连接,并且可以将他们自由的用作 PHP 对象。您甚至可以用我们的 CORBA 扩展库来访问远程对象。

PHP 具有极其有效的文本处理特性,支持从 POSIX 扩展或者 Perl 正则表达式到 XML 文档解析。为了解析和访问 XML 文档,我们支持了 SAX 和 DOM 标准。您可以使用我们的 XSLT 扩展库来转换 XML 文档。

如果您将 PHP 用于电子商务领域,您会发现其 Cybercash payment、CyberMUT、VeriSign Payflow Pro 以及 CCVS 函数对于您的在线交易程序来所是非常有用的。

另外,我们还有很多其它有趣的扩展库。例如 mnoGoSearch 搜索引擎函数、IRC 网关函数、多种压缩工具(gzip、bz2)、日历转换、翻译……

由于在这里我们无法列出 PHP 所有的特性和可提供的便利,请您参阅“安装”以及“函数参考”等有关章节以获取关于这里提到的扩展库更多的信息。

人品计算

<title>一航孤帆的人品计算器</title>
<!-- 建立一个产生POST外部变量的HTML表单 -->
<form id="form1" name="form1" method="POST" action="">
<label>姓名
<input name="name" type="text" id="name" />
</label>
<label>
<input type="submit" name="Submit" value="提交" />
</label>
</form> 

<p> </p>
<?php
if(isset($_REQUEST['name']))
{if($_REQUEST["name"]=='小白')
{
$n=100;
print "你的人品值是:$n <br>";
}else if($_REQUEST["name"]=='我女朋友的名字){
$n=100;
print "你的人品值是:$n <br>";
}else if($_REQUEST["name"]=='我的名字'){
$n=100;
print "你的人品值是:$n <br>";
}else if($_REQUEST["name"]=='鱿鱼'){
$n=100;
print "你的人品值是:$n <br>";
}else if($_REQUEST["name"]=='一航孤帆'){
$n=100;
print "你的人品值是:$n <br>";
}
else {
$m=$_REQUEST["name"];
$n=ord("$m");
$n = ($n%10)*10;
print "你的人品值是:$n <br>";
} 

if($n==0) print("你一定不是人吧,怎么一点人品都没有。。。<br>");
else if(($n>0)&&($n<=5)) print("算了,跟你没什么人品好谈的。。。<br>");
else if(($n>5)&&($n<=10)) print("是我不好...不应该跟你谈人品问题的...<br>");
else if(($n>10)&&($n<=15)) print("杀过人没有?放过火没有?你应该无恶不做吧?<br>");
else if(($n>15)&&($n<=20)) print("你貌似应该三岁就偷看隔壁大妈洗澡的吧...<br>");
else if(($n>20)&&($n<=25)) print("你的人品之低下实在让人惊讶啊...<br>");
else if(($n>25)&&($n<=30)) print("你的人品太差了。你应该有干坏事的嗜好吧?<br>");
else if(($n>30)&&($n<=35)) print("你的人品真差!肯定经常做偷鸡摸狗的事...<br>");
else if(($n>35)&&($n<=40)) print("你拥有如此差的人品请经常祈求佛祖保佑你吧...<br>");
else if(($n>40)&&($n<=45)) print("老实交待..那些论坛上面经常出现的XX照是不是你的杰作?<br>");
else if(($n>45)&&($n<=50)) print("你随地大小便之类的事没少干吧?<br>");
else if(($n>50)&&($n<=55)) print("你的人品太差了..稍不小心就会去干坏事了吧?<br>");
else if(($n>55)&&($n<=60)) print("你的人品很差了..要时刻克制住做坏事的冲动哦..<br>");
else if(($n>60)&&($n<=65)) print("你的人品比较差了..要好好的约束自己啊..<br>");
else if(($n>65)&&($n<=70)) print("你的人品勉勉强强..要自己好自为之..<br>");
else if(($n>70)&&($n<=75)) print("有你这样的人品算是不错了..<br>");
else if(($n>75)&&($n<=80)) print("你有较好的人品..继续保持..<br>");
else if(($n>80)&&($n<=85)) print("你的人品不错..应该一表人才吧?<br>");
else if(($n>85)&&($n<=90)) print("你的人品真好..做好事应该是你的爱好吧..<br>");
else if(($n>90)&&($n<=95)) print("你的人品太好了..你就是当代活雷锋啊...<br>");
else if(($n>95)&&($n<=99)) print("你是世人的榜样!<br>");
else if($n>99) print("天啦!你不是人!你是神!!!<br>");}
else echo "开始计算吧";
?>

人品计算器

<html>
    <head>
        <title>Smilingcat</title>
    </head>
<body>
这是一个简易的人品计算器。
<br/><br/><br/>
嗯,很简单,真的,真的很简单。
<br/><br/><br/>
自己试试吧!
<br/><br/><br/>
<b><center>Get Ready Now!</center></b>
<br/><br/><br/>

<center><b><form action="figure.php" method="GET">
 你的名字: <input type="text" name="name" />
 <br />
 <input type="submit" value="Have a look!">
</form></b></center>

<br/>
<embed src=
"blogcastone.swf?soundFile=http://6smayw.blu.livefilestore.com/y1pyQMQKGWtbscJujNmXALH0r0_2K5suXPowcdWl67NcAioCzQbWx4-4c7p0TCSP8K0gsdAmFElxuD8Fu3z5va4Gw&amp;playerID=10&amp;bg=0xeeeeee&amp;leftbg=0x357dce&amp;lefticon=0xFFFFFF&amp;rightbg=0xf06a51&amp;rightbghover=0xaf2910&amp;righticon=0xFFFFFF&amp;righticonhover=0xffffff&amp;text=0x666666&amp;slider=0x666666&amp;track=0xFFFFFF&amp;border=0x666666&amp;loader=0x9FFFB8&amp;loop=no&amp;autostart=no"
type="application/x-shockwave-flash" wmode="transparent" height="40" width="290" />

</body>
</html>
figure.php 文件
<?php

if($_GET["name"]=='XX')
 {
	$n=95;
	print "你的人品值是:$n <br>";
 }
else if($_GET["name"]=='XXX')
 {
	$n=100;
	print "你的人品值是:$n <br>";
 }
else if($_GET["name"]=='XXX')
 {
	$n=100;
	print "你的人品值是:$n <br>";
 }
else
 {
$m=$_GET["name"];
$n=ord("$m");
$n = ($n*1209)%10*10;
print "你的人品值是:$n <br>";
 } 

if($n==0) print("你一定不是人吧,怎么一点人品都没有。。。<br>");
else if(($n>0)&&($n<=5)) print("算了,跟你没什么人品好谈的。。。<br>");
else if(($n>5)&&($n<=10)) print("是我不好...不应该跟你谈人品问题的...<br>");
else if(($n>10)&&($n<=15)) print("杀过人没有?放过火没有?你应该无恶不做吧?<br>");
else if(($n>15)&&($n<=20)) print("你貌似应该三岁就偷看隔壁大妈洗澡的吧...<br>");
else if(($n>20)&&($n<=25)) print("你的人品之低下实在让人惊讶啊...<br>");
else if(($n>25)&&($n<=30)) print("你的人品太差了。你应该有干坏事的嗜好吧?<br>");
else if(($n>30)&&($n<=35)) print("你的人品真差!肯定经常做偷鸡摸狗的事...<br>");
else if(($n>35)&&($n<=40)) print("你拥有如此差的人品请经常祈求佛祖保佑你吧...<br>");
else if(($n>40)&&($n<=45)) print("老实交待..那些论坛上面经常出现的XX照是不是你的杰作?<br>");
else if(($n>45)&&($n<=50)) print("你随地大小便之类的事没少干吧?<br>");
else if(($n>50)&&($n<=55)) print("你的人品太差了..稍不小心就会去干坏事了吧?<br>");
else if(($n>55)&&($n<=60)) print("你的人品很差了..要时刻克制住做坏事的冲动哦..<br>");
else if(($n>60)&&($n<=65)) print("你的人品比较差了..要好好的约束自己啊..<br>");
else if(($n>65)&&($n<=70)) print("你的人品勉勉强强..要自己好自为之..<br>");
else if(($n>70)&&($n<=75)) print("有你这样的人品算是不错了..<br>");
else if(($n>75)&&($n<=80)) print("你有较好的人品..继续保持..<br>");
else if(($n>80)&&($n<=85)) print("你的人品不错..应该一表人才吧?<br>");
else if(($n>85)&&($n<=90)) print("你的人品真好..做好事应该是你的爱好吧..<br>");
else if(($n>90)&&($n<=95)) print("你的人品太好了..你就是当代活雷锋啊...<br>");
else if(($n>95)&&($n<=99)) print("你是世人的榜样!<br>");
else if($n>99) print("天啦!你不是人!你是神!!!<br>");
else echo "开始计算吧";
?>

SAE上传文件到SaeStorage代码

首先这是表单:
<html>

<head>
<title>Upload</title>
<meta http-equiv=”Content-Type” content=”text/html;charset=utf-8″ />
</head>

<body>
<br>
<form enctype="multipart/form-data" action="upload.php" method="post">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="submit" />
</form>
存储遍历查找:<a href="bianli.php">Start</a>
</body>
</html>
其次是上传文件:
<?php
$s=new saestorage();
$name=$_FILES['file']['name'];
echo $s->upload('sc',$name,$_FILES['file']['tmp_name']);
echo $s->getUrl('sc', $name);
echo '<br/>';
?>
具体见这个:http://apidoc.sinaapp.com/sae/SaeStorage.html
再来就是遍历查找:
<?php
//遍历Domain下所有文件
$stor = new SaeStorage();

$num = 0;
while ( $ret = $stor->getList("sc", "*", 100, $num ) ) {
        foreach($ret as $file) {
            echo "文件名称:  {$file}n";
			echo "文件地址:  {$stor->getUrl('sc',$file)}n";
			echo "<br/><br/>";
            $num ++;
        }
}
echo "<br/>";
echo "nTOTAL: {$num} filesn";
?>

为什么 ++[[]][+[]]+[+[]] = 10 ?

首先,问这个问题的人是个天才,他怎么会遇到这样的一个问题。其次,回答这个问题的人更是一个天才,我难以想象他会回答这个问题,更难以想象的是,他的回答是如此的详细和丰富和完整,真正称得上诲人不倦。

既然遇到了这个问题,我们不妨也跟着提高一下。

这是一个Javascript语言题目,一个完全有效的等式,不信自己可以试一下,下面看看高人的题解:

++[[]][+[]]+[+[]]

 

如果把这段表达式拆分开来,它相等于:

++[[]][+[]]

+

[+[]]

 

在JavaScript里,+[] === 0 是完全正确的。 + 会把一些字符转化成数字,在这里,这个式子会变成 +”” 或 0。

因此,我们可以简化一下(++ 比 + 有更高的优先级):

++[[]][0]

+

[0]

 

因为 [[]][0] 的意思是:获取 [[]] 的第一个元素,这就得出了下面的结果:

[[]][0] 返回内部数组 ([])。根据语言规范,我们说 [[]][0] === [] 是不正确的,但让我们把这个内部数组称作 A,以避免错误的写法。

++[[]][0] == A + 1, 因为 ++ 的意思是“加一”。

++[[]][0] === +(A + 1);换句话说,你得到的永远是个数值( +1 并不一定得到的是个数值,但 ++ 一定是)。

同样,我们可以把这一堆代码简化的更清晰。让我们把 A 换回成 [] :

+([] + 1)

+

[0]

 

在JavaScript里,这也是正确的:[] + 1 === “1″,因为 [] == “” (这相当于一个空的数组的内部元素连接),于是:

+([] + 1) === +(“” + 1),并且

+(“” + 1) === +(“1″),并且

+(“1″) === 1

让我们再次简化一下:

1

+

[0]

 

同样,在Javascript里,这是正确的:[0] == “0″,因为这是相当于一个有一个元素的数组的内部元素的连接。各元素会使用,分隔。当只有一个元素时,你可以推论出这个过程的结果就是它自身的第一个元素。

所以,最终我们得到(数字 + 字符串 = 字符串):

1

+

“0″

=== “10″ // 耶!

<
(转发请注明转自:学PHP)

优秀的PHP开发者是怎样炼成的

PHP是一门高效的网络编程语言,由于它具有编写灵活、运行快速等优点,迅速成为Web程序员的首选语言。那么怎样才能成为一个优秀的PHP开发者呢?

要成为一名PHP编程高手并不容易,并不像很多人想象的那样,只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了,真正的PHP高手还需要考虑更多的其它问题。以下三条准则是一名成熟的PHP程序员在编程中应该首先遵循的准则。

◆懒惰是金

◆编写漂亮的代码

◆追求程序的速度,而不是编程的速度

  懒惰是金

做一个懒惰的程序员吗?这个想法太奇怪了!因为这个世界上最忙碌的人可能就是计算机程序员了。但正是因为程序员太忙了,所以才应该在编程时学会偷懒。对于一个程序员来说,懒惰的方法有两种:

其一,大胆使用现成的别人的程序代码,把这些代码融入到你自己的程序或者项目中去。其二是编写一些有用的代码建立一个函数库,在将来编写程序时可以顺手拈来,省去了许多重复的劳动,自然就可以懒惰一点了。这两种偷懒的方法都非常适合PHP程序员了。

首先,PHP是在自由开放的环境中诞生和成长的一门语言。在世界各地,有成千上万的程序员,他们一直在为PHP的完美而不断奋斗,他们也愿意和别人分享自己的聪明才智和自己编写的代码。你每天都可以从一些PHP网站、邮件列表、新闻组发现大量的优秀的程序代码。

这样说,我并不是鼓励你整天等着让别人为你编写代码,但是你可以“站在伟人的肩膀上”,充分发扬“拿来主义”,聪明地应用别人的程序代码可以节省你大量时间。其次,在PHP中,你可以方便地建立自己的函数库,这样可以在你以后编写程序时省去很多麻烦。

下面笔者为大家介绍几个通用的函数,这些函数有的来自网上的一些开放源代码的项目,有的精选自邮件列表。如果你能把它们加入到你自己的函数库中,迟早你将会发现自己受益无穷。

  1.通用数据库处理函数

和其它的CGI函数相比,PHP的优点之一是具有很强大的数据库处理能力。但是,在PHP中,对于不同的数据库都使用一些特定的函数来专门处理,缺少通用的数据库处理函数。这大大降低了程序代码的可移植性,这也为初学编程的朋友带来了很多不便。

在网上,许多程序员都通过封装类解决了这个问题。他们编写了统一的函数用来处理任何流行的数据库——不管是在Linux世界深受欢迎的Mysql还是在Windows平台上广泛流行的SqlServer。

就笔者个人来说,非常喜欢使用这些函数,因为可以直接使用一些简单的诸如”query”、”next_record”之类的函数,而不需要考虑数据库的连接、数据库句柄这些复杂的东西,更不需要考虑使用的是何种数据库。如果你需要这些函数,你可以通过访问以下的几个网址而得到:

◆http://phplib.netuse.de/

◆http://phpclasses.UpperDesign.com/browse.html/package/20

◆http://phpdb.linuxbox.com/

  2.变量调试函数

PHP程序的调试一直是一件让人头疼的事,它既不像VB等高级语言那样有集成的编译调试环境,也不想Perl那样可以在Linux或者DOS环境下直接运行。其实,我们完全可以通过灵活地使用echo语句来完成对PHP的调试工作。下面的几个函数可以让你随时查看程序中任何变量的类型及其值。

 

function ss_array_as_string (&$array, $column = 0) {

$str = “Array(n”;

while(list($var, $val) = each($array)){

for ($i = 0; $i < $column+1; $i++){

$str .= “    ”;

}

$str .= $var. ==> ;

$str .= ss_as_string($val, $column+1).” n”;

}

for ($i = 0; $i < $column; $i++){

$str .= “    ”;

}

return $str.);

}

function ss_object_as_string (&$object, $column = 0) {

if (empty($object->classname)) {

return “$object”;

}

else {

$str = $object->classname.”( n”;

while (list(,$var) = each($object->persistent_slots)) {

for ($i = 0; $i < $column; $i++){

$str .= “    ”;

}

global $$var;

$str .= $var. ==> ;

$str .= ss_as_string($$var, column+1).” n”;

}

for ($i = 0; $i < $column; $i++){

$str .= “    ”;

}

return $str.);

}

}

function ss_as_string (&$thing, $column = 0) {

if (is_object($thing)) {

return ss_object_as_string($thing, $column);

}

elseif (is_array($thing)) {

return ss_array_as_string($thing, $column);

}

elseif (is_double($thing)) {

return “Double(“.$thing.”)”;

}

elseif (is_long($thing)) {

return “Long(“.$thing.”)”;

}

elseif (is_string($thing)) {

return “String(“.$thing.”)”;

}

else {

return “Unknown(“.$thing.”)”;

}

}

 

需要的时候,在程序中简单地加入下面的一条代码即可查看程序中的所使用的变量(包括数组和对象)的类型和值:

echo ss_as_string($my_variable);

使用下面的语句,我们可以直接查看程序中所有的变量的值:

echo ss_as_string($GLOBALS);

  3. 控制Log信息的函数

调试PHP程序的另外一种重要的方法就是查看Log信息。如果能够方便地控制Log信息的级别以及Log信息的显示内容,将会给程序调试带来更多的便利。下面的几个函数可以方便地实现这个功能。

 

$ss_log_level = 0;

$ss_log_filename = /tmp/ss-log;

$ss_log_levels = array(

NONE => 0,

ERROR => 1,

INFO => 2,

DEBUG => 3);

function ss_log_set_level ($level = ERROR) {

global $ss_log_level;

$ss_log_level = $level;

}

function ss_log ($level, $message) {

global $ss_log_level, $ss-log-filename;

if ($ss_log_levels[$ss_log_level] < $ss_log_levels[$level]) {

// 不显示Log信息

return false;

}

$fd = fopen($ss_log_filename, “a+”);

fputs($fd, $level. – [.ss_timestamp_pretty().] – .$message.”n”);

fclose($fd);

return true;

}

function ss_log_reset () {

global $ss_log_filename;

@unlink($ss_log_filename);

}

 

在上面的函数中,有四个Log级别变量。运行PHP程序时,只有当Log的级别低于预设的级别值时,Log信息才可以被记录和显示出来。例如,在程序中加入如下的一条语句:

ss_log_set_level(INFO);

那么,运行PHP程序时,只有ERROR和INFO级别的LOG信息才能被记录和显示出来,DEBUG级的信息则被忽略了。除此之外,我们还可以设定显示的信息内容,其语句如下:

 

ss_log(ERROR, “testing level ERROR”);

ss_log(INFO, “testing level INFO”);

ss_log(DEBUG, “testing level DEBUG”);

 

你也可以随时使用下面的语句清空LOG信息:

ss_log_reset();

  4.速度测试函数

为了优化代码,我们需要一种可以测试代码运行时间的方法,从而来选择最优的代码。下面的函数可以测试运行代码所需的时间:

 

function ss_timing_start ($name = default) {

global $ss_timing_start_times;

$ss_timing_start_times[$name] = explode( , microtime());

}

function ss_timing_stop ($name = default) {

global $ss_timing_stop_times;

$ss_timing_stop_times[$name] = explode(, microtime());

}

function ss_timing_current ($name = default) {

global $ss_timing_start_times, $ss_timing_stop_times;

if (!isset($ss_timing_start_times[$name])) {

return 0;

}

if (!isset($ss_timing_stop_times[$name])) {

$stop_time = explode(, microtime());

}

else {

$stop_time = $ss_timing_stop_times[$name];

}

$current = $stop_time[1] – $ss_timing_start_times[$name][1];

$current += $stop_time[0] – $ss_timing_start_times[$name][0];

return $current;

}

 

现在可以轻松地检查任何一段代码的执行时间了,甚至我们可以同时使用多个计时器,只需在使用上述的几个函数时设定不同的参数作为计时器的名称就可以了。

  5.调试和优化数据库的操作

对于数据库来说,运行速度是至关重要的。尽管很多书籍和文章都讲授了一些快速运行数据库的方法,但是所有的方法都必须经过实践的检验。下面我们将把PHPLib函数库中的query()函数和上面介绍的几个函数综合起来编写成新的query()函数,和原先的函数相比,这个函数增加了运行时间的监测功能。

 

function query($Query_String, $halt_on_error = 1) {

$this->connect();

ss_timing_start();

$this->Query_ID = @mysql_query($Query_String,$this->Link_ID);

ss_timing_stop();

ss_log(INFO, ss_timing_current(). Secs – .$Query_String);

$this->Row = 0;

$this->Errno = mysql_errno();

$this->Error = mysql_error();

if ($halt_on_error && !$this->Query_ID) {

$this->halt(“Invalid SQL: “.$Query_String);

}

return $this->Query_ID;

}

 

编写漂亮的代码

1.将后台程序与前端程序分开

在编写PHP程序时,有些代码是用来处理一些事务,例如操作数据库、进行数学运算等,而另外的一些代码则只是事务处理的结果显示出来,例如一些使用echo语句将结果以HTML的格式显示在Web浏览器上的PHP代码以及那些直接嵌入PHP程序的HTML代码。首先我们应该清晰地区分这两种代码,把前者称为后台程序,把后者称为前端程序。

因为PHP是一种嵌入式编程语言,也就是说,所有的PHP代码都可以嵌入到HTML代码之中,这为程序的编写带来了许多便利之处。但是,“物极必反”,如果在一段较长的程序中将PHP代码和HTML代码混合编写,这将使程序杂乱无章,不利于程序的维护和阅读。

所以我们需要尽可能地将这些程序中混杂于HTML代码中的PHP代码移植出来,在专门的文件中将这些代码封装成函数,然后在HTML代码中使用include语句来包含这些文件,在适当的位置调用这些函数即可。

这种做法一方面使HTML代码和PHP代码都简单易读,另一方面因为HTML代码需要不断更新,而这种分离的方法可以确保后台程序不会被破坏。同前端程序不同,后台程序更多追求的是稳定、结构化,极少更改,所以应该认真地设计和管理。其实,在设计台程序时,投入大量时间是值得的,“现在栽树,以后乘凉”,在以后的设计工作中将可以轻松地使用现在编写的后台程序。

2.灵活使用包含文件

正如前面所说的那样后台程序应当安排在一系列的包含文件中。包含文件可以通过include语句在需要时动态装入,也可以在php.ini文件中通过使用auto_prepend_file指令预先自动装入。如果使用后一种方法的话,虽然取得了一劳永逸的好处,但是也有一些缺点值得我们注意。下面的一段代码向我们展示了解析一个庞大的包含文件需要一定的时间:

 

require(timing.inc);

ss_timing_start();

include(test.inc);

ss_timing_stop();

echo

.ss_timing_current().

;

?>

 

在上面的代码中,test.inc是一个1000行的包含文件,运行的结果显示,解析这个包含文件花费了0.6秒钟,对于一个大型网站来说,这个速度并不是可以忽略不记的。使用包含文件的另外一个缺点是:如果一个文件中的一个语句发生错误,将会使整个网站的PHP程序都无法运行。所以使用起来也及其小心。其实,对包含文件稍做处理,即可以使包含文件只在需要时进行解析。下面的代码使abc.inc文件只在程序需要时才作解析:

if ( defined( __LIBA_INC) ) return; define( __LIBA_INC, 1 ); /* * 代码… */ ?>

 

  3.使用面向对象的编程方法

PHP也是一种面向对象的语言,面向对象的编程方法是优秀的程序员们非常推崇的一种软件设计方法,在PHP编程中可以充分发挥面向对象语言的优势,对编程中的对象进行封装。在前面的代码中,我们使用了面向对象的方法,例如在管理数据库时,我们将query()函数封装进数据库类中,这极大地方便了代码的管理,增加了程序的可读性。

 

  追求程序速度,而不是编程的速度

在网站建设中,程序运行速度和网页下载速度都是关系成败的重要因素。作为一名Web程序员,应该更加注意代码的运行速度。下面介绍的几种方法都在不同程度上提高了代码的运行速度。

  1.使用内嵌的HTML代码,而不是PHP的echo语句。

因为PHP是一门嵌入式Web编程语言,可以将HTML代码和PHP代码相互嵌入。但是很多程序员担心在HTML代码中过多的使用””嵌入PHP代码会多次调用PHP解释器,从而降低了PHP代码的运行速度,所以宁愿使用PHP的echo语句来输出HTML代码,而不直接使用HTML代码。

但事实却恰恰相反。每一个PHP页面只调用一次PHP解释器来解释所有的PHP代码,所以,只在需要时才嵌入PHP代码,而大多数的时候直接使用HTML代码输入结果,不但不会降低程序的运行速度,而且因为减少了对echo语句的解析,往往可以提高代码的运行速度。下面的一段代码证明了我们的结论。在这段代码中,我们使用了前面介绍的时间测试函数。

  2.使用str-replace而不是ereg-replace

习惯使用Perl进行编程的程序员更加愿意使用ereg_replace完成字符串替换工作,因为在PHP中ereg_replace的用法和Perl中模式匹配的用法相近。但是,下面的这段代码证明,使用str_replace 代替 ereg_replace将可以大大提高代码的运行速度。测试str_replace和ereg_replace的运行速度:

 

//这段代码测试str_replace的运行速度 emphasis; ?>

for ($i=0; $i<1000; $i++) {

str_replace(i>, b>, $string).

;

}

?>

//这段代码测试ereg_replace的运行速度

for ($i=0; $i<1000; $i++) {

ereg_replace(<([/]*)i>, <1b>, $string).

;

}

?>

 

  3.注意字符串的引用

PHP和其它很多编程语言一样,可以使用双引号(“”)来引用字符串,也可以使用单引号()。但是在PHP中,如果使用双引号来引用字符串,那么PHP解析器将首先分析字符串中有没有对变量的引用,有变量的话,将对变量进行替换。如果是单引号,则没有如此复杂——直接将单引号包含起来的所有字符串直接显示出来。显然,在PHP编程中,如果使用单引号引用字符串变量要比使用双引号快速一些。

  4.在数据库中避免使用联合操作

比起其它的Web编程语言来说,PHP的数据库功能十分强大。但是在PHP中数据库的运行仍然是一件十分费时费力的事情,所以,作为一个Web程序员,要尽量减少数据库的查询操作,同时应该为数据库建立适当的索引。

另一件值得注意的事情是在用PHP操作数据库时,尽可能不使用多个数据表的联合操作,尽管联合操作可以增强数据库的查询功能,但是却大大增加了服务器的负担。为了说明这个问题,我们可以看看下面的这个简单的例子。

我们在数据库中创建了两个数据表foo和big_foo。在数据表foo中,只有一个字段,包含了从1-1000之间的所有自然数。数据表big_foo同样只有一个字段,但包含了从1-1,000,000之间的全部自然数。所以,从大小上说,big_foo等于foo与它自身进行了联合操作。

 

$db->query(“select * from foo”);

0.032273 secs

$db->next_record();

0.00048999999999999 secs

$db->query(“insert into foo values (NULL)”);

0.019506 secs

$db->query(“select * from foo as a, foo as b”);

17.280596 secs

$db->query(“select * from foo as a, foo as b where a.id > b.id”);

14.645251 secs

$db->query(“select * from foo as a, foo as b where a.id = b.id”);

0.041269 secs

$db->query(“select * from big_foo”);

25.393672 secs

 

从上面操作结果我们可以发现,对于两个有1000条记录的数据表进行联合,其速度并不比对一个1000000条纪录的大型数据表单独进行操作快多少。

  5.注意include与require的区别

在PHP变成中,include()与require()的功能相同,但在用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数。例如在下面的一个例子中,如果变量$somgthing为真,则将包含文件somefile:

if($something){ include(“somefile”); }

 

但不管$something取何值,下面的代码将把文件somefile包含进文件里:

if($something){ require(“somefile”); }

 

下面的这个有趣的例子充分说明了这两个函数之间的不同。

$i = 1; while ($i < 3) { require(“somefile.$i”); $i++; }

 

在这段代码中,每一次循环的时候,程序都将把同一个文件包含进去。很显然这不是程序员的初衷,从代码中我们可以看出这段代码希望在每次循环时,将不同的文件包含进来。如果要完成这个功能,必须求助函数include();

 

$i = 1; while ($i < 3) { include(“somefile.$i”); $i++; }

  6.注意echo和print的区别

PHP中echo和print的功能也基本相同,但是两者之间也有细微差别。在PHP代码中可以把print作为一个普通函数来使用,例如执行下面的代码后变量$res的值将为1。

$ret = print “Hello World”;

这意味着print可用在一些复杂的表达式中,而echo则不行。同样,在代码中echo语句的运行速度要略微快于print语句,因为echo语句不要求返回任何数值。

<

一些重要的php算法和应用

1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

//冒泡排序(数组排序)

function bubble_sort($array)

{

       $count = count($array);

       if ($count <= 0) return false;

       for($i=0; $i<$count; $i++){                for($j=$count-1; $j>$i; $j–){

                       if ($array[$j] < $array[$j-1]){

                               $tmp = $array[$j];

                               $array[$j] = $array[$j-1];

                               $array[$j-1] = $tmp;

                       }

               }

       }

       return $array;

}

//快速排序(数组排序)

function quick_sort($array) {

       if (count($array) <= 1) return $array;

       $key = $array[0];

       $left_arr = array();

       $right_arr = array();

       for ($i=1; $i<count($array); $i++){

               if ($array[$i] <= $key)

                       $left_arr[] = $array[$i];

               else

                       $right_arr[] = $array[$i];

       }

       $left_arr = quick_sort($left_arr);

       $right_arr = quick_sort($right_arr);

       return array_merge($left_arr, array($key), $right_arr);

}

2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组

//二分查找(数组里查找某个元素)

function bin_sch($array, $low, $high, $k){

   if ($low <= $high){

       $mid = intval(($low+$high)/2);

       if ($array[$mid] == $k){

           return $mid;

       }elseif ($k < $array[$mid]){

           return bin_sch($array, $low, $mid-1, $k);

       }else{

           return bin_sch($array, $mid+1, $high, $k);

       }

   }

   return -1;

}

//顺序查找(数组里查找某个元素)

function seq_sch($array, $n, $k){

   $array[$n] = $k;

   for($i=0; $i<$n; $i++){

       if($array[$i]==$k){

           break;

       }

   }

   if ($i<$n){

       return $i;

   }else{

       return -1;

   }

}  

3. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序

function array_sort($arr, $keys, $order=0) {

if (!is_array($arr)) {

 return false;

}

$keysvalue = array();

foreach($arr as $key => $val) {

 $keysvalue[$key] = $val[$keys];

}

if($order == 0){

 asort($keysvalue);

}else {

 arsort($keysvalue);

}

reset($keysvalue);

foreach($keysvalue as $key => $vals) {

 $keysort[$key] = $key;

}

$new_array = array();

foreach($keysort as $key => $val) {

 $new_array[$key] = $arr[$val];

}

return $new_array;

}

4. 使用五种以上方式获取一个文件的扩展名

function get_ext1($file_name){

return strrchr($file_name, ”.”);

}

function get_ext2($file_name){

return substr($file_name, strrpos($file_name, ”.”));

}

function get_ext3($file_name){

return array_pop(explode(”.”, $file_name));

}

function get_ext4($file_name){

$p = pathinfo($file_name);

return $p[''extension''];

}

function get_ext5($file_name){

return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), ”.”)));

}

(转发请注明转自:学PHP)

简单的加密解密php代码

表单:
<html>
<head>
<title>字符加密解密</title>
</head>

<body>
<form  method="post">
请输入你要加密的内容(仅支持小写英文和空格!!):
<input type="text" name="content">
<br/>

请输入你要解密的内容(Example:TTTJJJLTJJJTTLJTLJLTJ):
<input type="text" name="content2">
<br />
<input type="submit" name="submit" value="加密或解密">
<br/>
<br/>
</form>
这是你加密的内容:
<?php require("denc.php");?>
<br/>
<br/>
这是你解密的内容:
<?php require("benc.php");?>
</body>
</html>
加密:
<?php
function denc($text){
$len=strlen($text);
for($i=0;$i<$len;$i++){
switch($text[$i]){

case "a":
echo "JJJ";
break;

case "b":
echo "JJL";
break;

case "c":
echo "JJT";
break;

case "d":
echo "JLJ";
break;

case "e":
echo "JLL";
break;

case "f":
echo "JLT";
break;

case "g":
echo "JTJ";
break;

case "h":
echo "JTL";
break;

case "i":
echo "JTT";
break;

case "j":
echo "LJJ";
break;

case "k":
echo "LJL";
break;

case "l":
echo "LJT";
break;

case "m":
echo "LLJ";
break;

case "n":
echo "LLL";
break;

case "o":
echo "LLT";
break;

case "p":
echo "LTJ";
break;

case "q":
echo "LTL";
break;

case "r":
echo "LTT";
break;

case "s":
echo "TJJ";
break;

case "t":
echo "TJL";
break;

case "u":
echo "TJT";
break;

case "v":
echo "TLJ";
break;

case "w":
echo "TLL";
break;

case "x":
echo "TLT";
break;

case "y":
echo "TTJ";
break;

case "z":
echo "TTL";
break;

case " ":
echo "TTT";
break;

}
}
}
denc($_POST["content"]);
?>
解密:
<?php
function benc($text){
$len=strlen($text);
for($i=0;$i<$len;$i+=3){
if($text[$i]=="J"){
if($text[$i+1]=="J"){
if($text[$i+2]=="J") echo "a";
if($text[$i+2]=="L") echo "b";
if($text[$i+2]=="T") echo "c";
}

if($text[$i+1]=="L"){
if($text[$i+2]=="J") echo "d";
if($text[$i+2]=="L") echo "e";
if($text[$i+2]=="T") echo "f";
}

if($text[$i+1]=="T"){
if($text[$i+2]=="J") echo "g";
if($text[$i+2]=="L") echo "h";
if($text[$i+2]=="T") echo "i";
}
}

if($text[$i]=="L"){
if($text[$i+1]=="J"){
if($text[$i+2]=="J") echo "j";
if($text[$i+2]=="L") echo "k";
if($text[$i+2]=="T") echo "l";
}

if($text[$i+1]=="L"){
if($text[$i+2]=="J") echo "m";
if($text[$i+2]=="L") echo "n";
if($text[$i+2]=="T") echo "o";
}

if($text[$i+1]=="T"){
if($text[$i+2]=="J") echo "p";
if($text[$i+2]=="L") echo "q";
if($text[$i+2]=="T") echo "r";
}
}

if($text[$i]=="T"){
if($text[$i+1]=="J"){
if($text[$i+2]=="J") echo "s";
if($text[$i+2]=="L") echo "t";
if($text[$i+2]=="T") echo "u";
}

if($text[$i+1]=="L"){
if($text[$i+2]=="J") echo "v";
if($text[$i+2]=="L") echo "w";
if($text[$i+2]=="T") echo "x";
}
if($text[$i+1]=="T"){
if($text[$i+2]=="J") echo "y";
if($text[$i+2]=="L") echo "z";
if($text[$i+2]=="T") echo " ";
}
}
}
}
benc($_POST["content2"]);
?>

SAE MYSQL 连接实例

已然对PHP有了初步的了解,我觉得学到的东西已经够用了。直接上SAE吧。

对于我来说,单纯是学语法,学函数,一点意思都没有。反正我也没有啥压力,仅仅是为了自己的兴趣而学习PHP的,不如直接进入正题,做些自己感兴趣的东西吧。

SAE

不得不说,我觉得SAE做的云豆支付系统很二,一直有种让我玩网游的错觉。。。这个先不提,反正我觉得SAE并不打算对免费用户长期开放,估计Beta完之后就没有免费云豆可以拿了,现在我是能用一天就用一天吧,以后的事情就不操心了。

不过对于我这个新手来说,SAE做的还算是挺不错的。SAE自带一个PHP+MySQL的环境,而且最棒的是有一个在线编辑器,能直接对代码进行编辑,这简直是新手学PHP的神器啊。

想想吧,一个搭好的的PHP+MySQL环境,还能直接修改PHP文件的代码,自带双线服务器。而且最重要的是,这都是免费的!当初我就不应该在本地搭环境,直接上SAE学PHP就可以了。如果以后有人想学PHP,我会极力推荐直接用SAE的。

但是,我还想说但是,SAE提供的文档真是少啊。。。也许是我新手不懂行,我花了半个小时时间才找到访问MySQL的方法,而且是在示例代码里找到的。这挺让人郁闷的。
在SAE中访问MySQL

示例代码:

$con = mysql_connect(SAE_MYSQL_HOST_M.’:’.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);

用户名  : SAE_MYSQL_USER
密  码 : SAE_MYSQL_PASS
主库域名 : SAE_MYSQL_HOST_M
从库域名 : SAE_MYSQL_HOST_S
端  口 : SAE_MYSQL_PORT
数据库名 : SAE_MYSQL_DB

注意:在SAE中不能进行 CREATE DATEBASE 操作。
在SAE的MySQL数据库中,只有一个数据库可以进行操作,名字是:app_(你的应用名)

我的测试代码:(访问数据库,并建立一个名为Persons的数据表)

$con = mysql_connect(SAE_MYSQL_HOST_M.’:’.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);

mysql_select_db(“app_***”, $con);
$sql = “CREATE TABLE Persons (
FirstName varchar(15),
LastName varchar(15),
Age int
)”;
mysql_query($sql,$con);
?>

早上那些事

今天早上做作业的时候发现自己老走神。。

然后百度了下,有位大神说:

有个很有意思的游戏:在一张5*5的表格上,写1-25 25个数字,然后尽可能

的快的从1一直找到25.因为这个可以锻炼注意力滴~~~

然后我试了下,还真的蛮好玩的。

可是,一个问题出来了。

因为手画的话,太烦了。

所以,我请出了PHP~~~

见效果:http://thetownes.coolpage.biz/focus.php

见代码:

<html>
<head>
<title>test</title>
</head>
<body>
<?php
$numbers = range (1,25);
shuffle($numbers);
?>
<table border=”1″>
<tr><td><?php echo $numbers[0] ?></td><td><?php echo $numbers[1] ?></td><td><?php echo $numbers[2] ?></td><td><?php echo $numbers[3] ?></td><td><?php echo $numbers[4] ?></td></tr>
<tr><td><?php echo $numbers[5] ?></td><td><?php echo $numbers[6] ?></td><td><?php echo $numbers[7] ?></td><td><?php echo $numbers[8] ?></td><td><?php echo $numbers[9] ?></td></tr>
<tr><td><?php echo $numbers[10] ?></td><td><?php echo $numbers[11] ?></td><td><?php echo $numbers[12] ?></td><td><?php echo $numbers[13] ?></td><td><?php echo $numbers[14] ?></td></tr>
<tr><td><?php echo $numbers[15] ?></td><td><?php echo $numbers[16] ?></td><td><?php echo $numbers[17] ?></td><td><?php echo $numbers[18] ?></td><td><?php echo $numbers[19] ?></td></tr>
<tr><td><?php echo $numbers[20] ?></td><td><?php echo $numbers[21] ?></td><td><?php echo $numbers[22] ?></td><td><?php echo $numbers[23] ?></td><td><?php echo $numbers[24] ?></td></tr>
</table>
</body>
</html>