当前位置: 首页 > news >正文

让你不再恐惧--轻松接触 PHP

曾几何时,php之火在中国的大地燃烧,那熊熊烈火,至今也不因 .net 而熄灭!有理由相信,php 的高效运行效率,它的丰富免费资料,可以让它继续生存。  

  介绍 php 又怎么会忘记 php 的老换档 mysql 数据库呢,此两者常常成双成对,出双入对,就像影子一样,你不离开我,我不离开你!  

 PHP简介  

  PHP是一种用于创建动态WEB页面的服务端脚本语言。如同ASP和ColdFusion,用户可以混合使用PHP和HTML编写WEB页面,当访问者浏览到该页面时,服务端会首先对页面中的PHP命令进行处理,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器。但是与ASP或ColdFusion不同,PHP是一种源代码开放程序,拥有很好的跨平台兼容性。用户可以在Windows NT系统以及许多版本的Unix系统上运行PHP,而且可以将PHP作为Apache服务器的内置模块或CGI程序运行。  

  除了能够精确的控制WEB页面的显示内容之外,用户还可以通过使用PHP发送HTTP报头。用户可以通过PHP设置cookies,管理用户身份识别,并对用户浏览页面进行重定向。PHP具有非常强大的数据库支持功能,能够访问几乎目前所有较为流行的数据库系统。此外,PHP可以与多个外接库集成,为用户提供更多的实用功能,如生成PDF文件等。  

用户可以直接在WEB页面中输入PHP命令代码,因而不需要任何特殊的开发环境。在WEB页面中,所有PHP代码都被放置在“< ?php”和“ ? >”中。此外,用户还可以选择使用诸如< SCRIPT LANGUAGE="php" >< /SCRIPT >等的形式。PHP引擎会自动识别并处理页面中所有位于PHP定界符之间的代码。  

  PHP脚本语言的语法结构与C语言和Perl语言的语法风格非常相似。用户在使用变量前不需要对变量进行声明。使用PHP创建数组的过程也非常简单。PHP还具有基本的面向对象组件功能,可以极大的方便用户有效组织和封装自己编写的代码。    


PHP语法概述  

A. 基本语法  

即使初次接触PHP的用户也会发现自己对PHP的语法风格并不陌生。  
例如:  

< ?php  

echo “Hello!”;  

? >  

显示结果为“Hello!”。  

PHP中,所有的变量都以标识“$”开头。我们可以对上述代码做如下改动:  
< ?php  

$greeting = “Hello!”;  

echo $greeting;  

? >  

改变后的代码显示结果不变。  
PHP中使用“.”符号连接不同的字符串,而其它的算术运算符则继承了流行编程语言的风格。举例如下:  

< ?php  

$greeting = “Hello!”;  

$num = 3 + 2;  

$num++;  

echo “$greeting $num people!”;  

? >  

显示结果为“Hello!6 people!”。  

  PHP对各种运算符及运算规则都有一套完整的规定,如果用户具有C或C++语言的编程背景的话,可以发现一切都得心应手。  
  与Perl语言一样,在PHP中,如果在双引号包含的字符串中含有变量的话,该变量将用相应的变量值替换;如果字符串被单引号包含,则不做替换。例如:  

< ?php  

$name = ‘PETER’;  
$greeting_1 = “Hello, $name!”;  
$greeting_2 = ‘Hello, $name!’;  
echo “$greeting_1\n”;  
echo “$greeting_2\n”;  
? >  
显示结果为:  
Hello, PETER!  
Hello, $name!  
(注:上述代码中的“\n”为换行符,只能在双引号字符串下使用)  
   

B. 变量  

PHP允许用户象使用常规变量一样使用环境变量。例如,在页面http://www.nba.com/scores/index.html中包含如下代码:  

< ?php  

echo “[$REQUEST_URI]”;  

? >  

则输出结果为[/scores/index.html]  

   

C. 数组  

用户在使用PHP创建数组时,可以把数组索引(包括常规索引或关联索引)加入方括号中。例如:  

$fruit[0] = ‘banana’;  

$fruit[1] = ‘apple’;  

$favorites['animal'] = ‘tiger’;  

$favorites['sports'] = ‘basketball’;  

  如果用户在向数组赋值时不指明数组下标,PHP将自动把该对象加入到数组末尾。例如对于上述$fruit数组可以用以下方式赋值而保持结果不变,  

$fruit[] = ‘banana’;  

$fruit[] = ‘apple’;  

同样,在PHP中,用户还可以根据需要建立多维数组。例如:  

$people[‘David’][‘shirt’] = ‘blue’;  

$people[‘David’][‘car’] = ‘red’;  

$people[‘Adam’][‘shirt’] = ‘white’;  

$people[‘Adam’][‘car’] = ‘silver’;  

在PHP中,用户还可以使用array()函数快速建立数组。例如:  

$fruit = array(‘banana’,‘apple’);  

$favorites = array(‘animal’ = > ‘tiger’, ‘sports’ = > ‘basketball’);  

或者使用array()函数创建多维数组:  

$people = array (‘David’ = > array(‘shirt’ = > ‘blue’,’car’ = > ‘red’),  

‘Adam’ = > array(‘shirt’ = > ‘white’,‘car’ = > ‘silver’));  

此外,PHP还提供了内置函数count()用于计算数组中的元素数量。例如:  

$fruit = array(‘banana’, ‘apple’);  

print count($fruit);  

显示结果为2。  

   

D. 结构控制  

在PHP中,用户可以使用“for”或“while”等的循环结构语句。例如:  

for ($i = 4; $i < 8; $i++) {  

print “I have eaten $i apples today.\n”; }  

或  

$i = 4; while ($i < 8) {  

print “I have eaten $i apples today.\n”;  

$i++;  

}  

返回结果为:  

I have eaten 4 apples today.  

I have eaten 5 apples today.  

I have eaten 6 apples today.  

I have eaten 7 apples today.  

此外,用户还可以使用“if”和“elseif”等的选择性结构语句。例如:  

if ($user_count > 200) {  

print “The site is busy right now!”;}  

elseif ($user_count > 100) {  

print “The site is active right now!”;  

else {  

print “The site is idle - only $user_count user logged on.”;  

}  
PHP的安装(1)-PHP及其模块的安装  

  我们知道 ASP 的运行需要 PWS 或者 IIS 服务器的支持,没有这两个服务器,它就运行不了。 ASP 的服务器支持安装通常都包括了 ASP  

语言解释器与 WEB 服务器。  

  与之相同,PHP的安装,也分为两个部分:一为PHP及其模块的安装,二为WEB服务器的置。PHP及其模块的安装,包括PHP核心文件的安装,  

相关扩展模块的安装及PHP。INI文件的各种选项的设定。  

  PHP如果没有WEB服务器中,是发挥不了多大的作用的,所以必须安装一个WEB服务器,并且进行必要的配置,使得WEB服务器能够处理PHP脚  

本。  

  现在我们多数的操作系统都是微软的 windows 系统,接下来我们就先介绍 windows 操作平台下 php 运行环境与及 WEb 服务器的安装  

一、PHP及其模块的安装  

  PHP的安装比较简单。首先我们要从 http://www.php.net/ 站点上下载适应自己平台的PHP压缩包(例子中使用到的压缩包为php-4.1.2.tar.gz),把它们解压开来,然后点击安装,通常我们把它安装到C:\PHP目录(这个看个人的操作系统盘符所决定)。  

  对于所需的所有外挂模块都要有相应的动态链接库。如果你安装的模块文件没有包含于PHP,你可以到 http://www.php.net/ 网站查找并下载,然后复制到C:\PHP目录。这样就完成安装。  

  接下来的一步是需要集中精神的时候了,对于刚接触PHP,开始学习PHP的人来说,这一步相当重要,因为如果没有设置正确,将无法解释任何的PHP脚本,也就是说你所需要的PHP基本运行条件也没有建立起来。  

  接下来我们要和PHP的配置文件 php.ini 。把PHP的安装目录下的文本配置文件PHP.INI-DIST复制到你的Windows目录(c:\windows或c:\winnt)下。并且把文件后缀名修改成php.ini。在此有一个相当重要的问题要注意,如果在windows目录和php目录中同时有php.ini文件,那么php目录里的文件优先及高,也就是说,php解释器将把PHP目录里的文件当作php的配置文件,windows目录里的将不起作用。  

  细心的朋友将会注意到,php目录里还有一个php.ini-optimized的文件,跟phin.ini-dist同样是PHP解释器的配置文件,两者的配置内容相类似,但前者在某些选项里作了优化,目的为了减少系统内存的占用。但是,建议对PHP不甚了解不甚熟悉的朋友不要用此文件,因为它是php3时保留下来的,用于php4可能导致部分模块功能失效。  


通过PHP连接MYSQL的两种方法  


  mysql可通过两种方式通过PHP与web相连,一种通过php的mysql相关函数,另一种通过php的ODBC相关函数  

相关函数如下:  

MYSQL函数  

mysql_affected_rows: 得到 MySQL 最后操作影响的列数目。  
mysql_close: 关闭 MySQL 伺服器连线。  
mysql_connect: 开启 MySQL 伺服器连线。  
mysql_create_db: 建立一个 MySQL 新资料库。  
mysql_data_seek: 移动内部传回指标。  
mysql_db_query: 送查询字串 (query) 到 MySQL 资料库。  
mysql_drop_db: 移除资料库。  
mysql_errno: 传回错误讯息代码。  
mysql_error: 传回错误讯息。  
mysql_fetch_array: 传回阵列资料。  
mysql_fetch_field: 取得栏位资讯。  
mysql_fetch_lengths: 传回单列各栏资料最大长度。  
mysql_fetch_object: 传回物件资料。  
mysql_fetch_row: 传回单列的各栏位。  
mysql_field_name: 传回指定栏位的名称。  
mysql_field_seek: 设定指标到传回值的某栏位。  
mysql_field_table: 获得目前栏位的资料表 (table) 名称。  
mysql_field_type: 获得目前栏位的型态。  
mysql_field_flags: 获得目前栏位的旗标。  
mysql_field_len: 获得目前栏位的长度。  
mysql_free_result: 释放传回占用记忆体。  
mysql_insert_id: 传回最后一次使用 INSERT 指令的 ID。  
mysql_list_fields: 列出指定资料表的栏位 (field)。  
mysql_list_dbs: 列出 MySQL 伺服器可用的资料库 (database)。  
mysql_list_tables: 列出指定资料库的资料表 (table)。  
mysql_num_fields: 取得传回栏位的数目。  
mysql_num_rows: 取得传回列的数目。  
mysql_pconnect: 开启 MySQL 伺服器长期连线。  
mysql_query: 送出一个 query 字串。  
mysql_result: 取得查询 (query) 的结果。  
mysql_select_db: 选择一个资料库。  
mysql_tablename: 取得资料表名称。  
ODBC函数  

使用ODBC函数需安装MYSQL ODBC  

odbc_autocommit: 开关自动更动功能。  
odbc_binmode: 设定二进位资料处理方式。  
odbc_close: 关闭 ODBC 连结。  
odbc_close_all: 关闭所有 ODBC 连结。  
odbc_commit: 更动 ODBC 资料库。  
odbc_connect: 连结至 ODBC 资料库。  
odbc_cursor: 取得游标名。  
odbc_do: 执行 SQL 指令。  
odbc_exec: 执行 SQL 指令。  
odbc_execute: 执行预置 SQL 指令。  
odbc_fetch_into: 取得传回的指定列。  
odbc_fetch_row: 取得传回一列。  
odbc_field_name: 取得栏位名称。  
odbc_field_type: 取得栏位资料形态。  
odbc_field_len: 取得栏位资料长度。  
odbc_free_result: 释出传回资料的记忆体。  
odbc_longreadlen: 设定传回栏的最大值。  
odbc_num_fields: 取得栏位数目。  
odbc_pconnect: 长期连结至 ODBC 资料库。  
odbc_prepare: 预置 SQL 指令。  
odbc_num_rows: 取得传回列数目。  
odbc_result: 取得传回资料。  
odbc_result_all: 传回 HTML 表格资料。  
odbc_rollback: 撤消当前交易。  
odbc_setoption: 调整 ODBC 设定。  
建立灵巧结构的PHP程序  
出处:奥索网  
责任编辑:zwg  

[02-2-22 17:43] 作者:sharetop  

  很早就想写这篇文章了,但一直没有时间完成它。不是说我来告诉大家如何做,我更希望本文只是做为一个引子,与大家来讨论关于如何建立一个有效地、灵活的网络应用程序。  

  经过了2-3年的网络应用程序开发工作,我的开发经验变得更加生动了,回过头来看我以前为Geocrawler写的代码,简直不敢相信这是我的。由于GPL的原因,在PHPBuilder中的源码也是良莠不齐的。  

  最近我做为一个有经验的PHP开发者,一直在帮着写SourceForge,我想这显示出了最终结果的一个范围。好的代码应被分成了多个部分,合适的库及函数调用,清楚的数据库结构,站点的每一个部分与其它部分都是相对独立的。  

  但是,这仍不是最好的。如果我可以重做,我将更多的关注于HTML层与数据层的分离,通过对象及清楚的函数库实现这一点。  

优美的图形  

  我知道经理们喜欢用优美的图形及图表来描述它们,这将给我们留下最好的印象。用这种隐藏在一个结构后的想法,你可以把你的逻辑与外观分离,这意味着任何一个复杂的程序都可以用"API/Data Access Layer"来表述。  

  与其你把安全检测、更新的句子等放在HTML层中,不如把它们整体地放在你的API层里。而这个HTML层只含有简单的函数调用和返回的数组、对象或自定的其它什么,以及一些数据库的检索结果的集合等。  

  如果你这样做了,顶层将是非常的瘦小,你可以方便地创建及维护它。  

  如下的例子中,这个HTML接口中只有一些API层中的函数的直接调用,一些HTML工具库(它能生成一个弹出框等等),和一些从数据库抽象层中调用的数据库操作方法(你不需要绑定某一个特别的数据库)。  

灵活的PHP程序结构最基本的方面有以下几点:  

数据库无关性  
界面无关性  
可移植性  
面向对象或至少应由函数库组成  

还有其它的?  
当然还有一些其它的东西,但我认为那都是太大了,或许你自己能指出它们。  


让我们详细地谈谈它们每一条吧。  

1、数据库无关性  

  你从不知道你的站点将会在哪里运行,当然在你创建它时,你希望它变和得很大并且有很高的流量。所以你不想把你自己约束在 MS Access 上面或者其它什么轻便的数据库系统。虽然你不能立刻地插入各种不同的数据库系统,但是你有可能很方便地在它们中间切换。你有一些不同的选择可以把你的数据库调用抽象出来。在PHP中一个奇特的方法是你不得不为每个不同的数据库系统写出不同的代码,因为在PHP中对每一种不同的数据库的访问函数是不同的。为了避开这点,你可以使用一个抽象地数据库访问层,就象PHPLib、下一个版本的PEAR、及我们在SourceForge中描述的那样。  

2、界面无关性  

  一个应用程序是它的技术更重要还是它所运行的站点更重要?我们并不能真正地知道。我从来不相信这一点--HTML是一个标准。特别是对于一个网络应用程序而言,界面发生了改动,意味着我们不得不总是重写。但是如果你的应用程序是很大很复杂的,你就要为你的数据库建立一些其它的接口了,只要你不想在你的站点程序中到处copy&paste你的访问检查等代码。这也意味着,如果你正确地设计了你的应用程序,你可以很容易地改写你的站点让它适应WAP,只要简单地写一个小的WAP界面,并让它调用你的数据库访问对象而已。但若你没有很好地设计你的程序,你把你的HTML版改成WAP版是一个复杂的工程。  

  我把这个想法也带入了SourceForge中,我们有一个巨大的用户群,为我们发送/接收bugs、任务等。首先,我们指出所有的这些将通过我们的web页面接口,然后,由于Eric Raymond 和其他人给的压力,我们决定用XML来做数据库的外部接口。  

  幸运的是我们曾在四月已把程序的核心逻辑代码与它的界面分离了。我将试着表达我们是如何做的,希望对你的工作有所帮助。  

  这个SourceForge的bugs跟踪器和其它的一些工具被分成两个库 - 这个HTML库和数据访问库。这个数据访问库检查输入的值的正确性,处理安全校验,并且当成功/失败时返回TRUE 或 FALSE。  

  由于简化的原因,这个例子并没有基于一个完善的对象模式,那样我还要解释这个基类和它的一些衍生类等等,我想这个例子将给你一个最普通的想法。  
HTML 库的例子  


//connect to database  
require ("database.php");  

//common utils like header/footer HTML  
require ("html.php");  

//data access library  
require ("bug_data.php");  

echo site_header("Page Title");  

echo "  

Updating A Bug  


";  

if (bug_data_update($field1,$field2,$field3)) {  

echo "  

Update Failed!  
";  

} else {  

echo "  
Updated Bug Successfully  
";  
//echo the global error string  
echo $feedback;  
}  

echo site_footer();  

?>  


Data 访问库的例子  

/**  
*  
* controls access to updating a bug in the  
* database. Validates data and checks security  
* Returns true on success, false on failure  
*  
*/  

function bug_data_update ($field1,$field2,$field3) {  
//global string to report back errors  
global $feedback;  

//$field1 and $field2 are required  
if (!$field1 || !$field2) {  
$feedback="Field 1 And Field 2 Are Required";  
return false;  
}  

//make sure this user has permission to update  
if (!user_isadmin()) {  
$feedback="You Must Be An Admin To Update a Bug";  
return false;  
}  

//now let's update the bug  

$result=db_query("UPDATE bug ".  
"SET field2='$field2',".  
"field3='$field3' ".  
"WHERE id='$field1'");  

//now check your query for success/failure  
if (!$result) {  
//update failed  
return false;  
} else {  
return true;  
}  
}  

?>  


3、可移植性  

  毫无疑问,你不想让你的代码只能用于一个固定的站点,将来我们可能改变色彩的选择、元素的名称、字体或其它一些什么,这样应设置一个config文件,它被多个页面所包含。更好的观点是你的站点被模块化,你不需要copy&paste任何一个HTML文件,我倾向于把这些放入一个函数,在任何需要的地方调用它们。  

  同样的方法可用于数据库的密码、数据库连接字串等,这些可以放入一个数据库处理的抽象层中。  


4、面向对象/函数化  

  我们不是用COBOL开发,所以这意味着我们可以把进程分成多个函数的调用。每个调用都是一个自动的行为,有时仅仅是调用一小段其它的函数并返回这个结果。  

  一个好的例子是在每一个页面校验用户是否登录,你可以用cookie或查询数据库来完成这个功能,但一旦你想改变你的验证系统,你不得不改动每一个页面,其实你应该可以通过改动函数库里一个普通的函数就完成这个变动的。任何时候,你写一段代码,如果它将会被用于多于一个地方,你就要考虑把它放入一个库里了。  

其它还有什么?  

  显然还有很多我没有谈到的事,告诉我你的想法,我将在下一篇文章中来讨论它们。特别地是,如果你写了一个大型的、复杂的应用程序,我想听听你是如何规划它的及你重做时不什么不同的想法。

相关文章:

  • 学习PHP必备的函数集
  • 深入剖析PHP变量的具体使用方法
  • 学习PHP动态网页技术收集的几个有用函数
  • 一分钟破解WPA/WPA2
  • [转]dedeCMS SEO实战
  • 域环境下的渗透
  • 分享几个超级不错的流量操作方法
  • 网站优化应该从哪里开始?
  • 如何修改VirtualBox下的Ubuntu的分辨率
  • PHP操作MYSQL函数手册大全
  • mysql命令集
  • 常用htaccess.文件配置,轻松上手
  • 中国移动、联通QQ刷钻方法 (9月8日)
  • 不同操作系统安装最新的metasploit3.5.2
  • Ubuntu10.04下使用metasploit对win2000 server进行MS08-067溢出
  • 【Leetcode】101. 对称二叉树
  • 【译】JS基础算法脚本:字符串结尾
  • [译]前端离线指南(上)
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Angular 4.x 动态创建组件
  • C++类中的特殊成员函数
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • QQ浏览器x5内核的兼容性问题
  • ReactNativeweexDeviceOne对比
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 基于组件的设计工作流与界面抽象
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 判断客户端类型,Android,iOS,PC
  • 前端相关框架总和
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • Java总结 - String - 这篇请使劲喷我
  • # Java NIO(一)FileChannel
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (南京观海微电子)——COF介绍
  • (转) Face-Resources
  • .libPaths()设置包加载目录
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 中 GetProcess 相关方法的性能
  • .Net各种迷惑命名解释
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • @Autowired多个相同类型bean装配问题
  • @Data注解的作用
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [Android]使用Git将项目提交到GitHub
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [cocos2d-x]关于CC_CALLBACK
  • [exgcd] Jzoj P1158 荒岛野人
  • [Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率
  • [HDU3710]Battle over Cities
  • [hdu4622 Reincarnation]后缀数组
  • [JS入门到进阶] 7条关于 async await 的使用口诀,新学 async await?背10遍,以后要考!快收藏
  • [LeetCode] NO. 387 First Unique Character in a String
  • [Lucene] Lucene 全文检索引擎简介