第一章 PHP简介

 更新时间:2016年11月25日 15:16  点击:1608

第一章 PHP简介

PHP 是一种服务器内置式的script 语言,它的出现使得在unix上快速地开发动态web成为现实。

  PHP是Rasmus Lerdorf在1994年秋天构思出来的。最早的未发行版本是他在自己的主页上来用来和观看他的在线简历的人保持联系的。第一个交付用户使用的版本是在1995年初发行的,它只是被当作一个个人主页制作工具。当时它仅包括一个只能懂得很少几条宏指令的非常简单的分析引擎和一组用于主页信息反馈的工具(一个留言簿,一个计数器和一些其他的东西)。1995年年中,Rasmus重写了整个解析器,并取名为PHP/FI 2。FI来源于他写的另外一个html表单集成数据的软件包。他把个人主页工具,表单集成工具合并在一起,并加入了mSQL数据库的支持,这样就有了PHP/FI。此后PHP/FI便以一种令人惊异的速度传播开来,人们开始大量使用它编写程序。

  我们无法确切的统计它的使用范围,但是根据估计到1996年底,世界上已经有至少15,000个站点在使用PHP/FIl。到了1997年年中这个数字已经增长到超过50,000个站点。 1997年年中我们也发现了PHP发展过程中一个重大的转折。这就是PHP的开发从Rasmus个人的爱好升级到一群程序员们有组织的工作。 再后来,这个解析器被Zeev Suraski和Andi Gutmans重写,通过这次全面的重写,大量PHP/FI的功能被移植到PHP中,并且成为了PHP的基本雏形。

  到1998年年中时,已经有大量的商业化产品,例如 C2的 StrongHold web server和RedHat Linux捆绑了PHP/FI解析器或PHP解析器,根据NetCraft估计的保守数据,PHP已经被世界上150,000个站点所采用。通过进一步分析,我们知道其使用数量远比使用Netscape公司旗舰产品--企业级WEB服务器的站点多。 PHP大量采用了C, Java和Perl语言的语法,并加入了各种PHP自己的特征。它与javascript等语言的一个区别就是PHP是在服务器执行,客户机所看到的是其在服务器上运行的结果,这意味着您若想采用PHP scrpit,必须得有 WEB SERVER 支持。

  PHP支持HTTP的身份认证、cookie、GIF图象创建,它的一个最有代表性的特点是它的数据库层,它使得编写基于数据库的网页变得非常简单。下列出了目前所支持的数据库:

Oracle ,Sybase , mSQL ,MySQL ,Informix ,Solid dBase ,ODBC, Unix dbm, PostgreSQL ,Adabas D,FilePro Velocis。

PHP也支持与采用POP3、HTTP、SNMP、NNTP、IMAP等协议的服务进行网络编程。

PHP的程序模式

  有三种方法从HTML进入"PHP程序模式":
  第一种方法: <?php PHP语句; ?>

如:

<?php echo("this is the simplest, an SGML processing instructionn"); ?>

  第二种方法:  <?php  PHP语句; ?>

如:

<?php echo("if you want to serve XML documents, do like thisn"); ?>
  第三种方法: 

<script language="php">
PHP语句;
</script>

如:

<script language="php">
echo("some editors (like FrontPage) don't like processing instructions");
</script>

第二章 变 量

PHP支持下面类型的变量:

(一)、内部变量

  主要有整数(interger),浮点数(float-point numbers),字符串(string),数组(array),对象(object)。

1 初始化变量

  要在PHP中初始化变量, 你只要简单的给它赋值即可。对于大多数类型,这是最直接的。对于数组和对象,可以使用其它方法。

2 初始化数组

  数组可以使用这两种方法之一来赋值: 使用一系列连续数值,或使用array()函数构造 (见 Array functions 部分)。

  要将连续的数值加进数组,你只需将要赋值赋给不带下标的数组变量。该值会作为数组的最后元素加进数组中。

  例:

   $names[] = "Jill"; // $names[0] = "Jill"
   $names[] = "Jack"; // $names[1] = "Jack"

与c、perl相似,数组下标也是从0开始。

3 初始化对象

要初始化一个对象,需用new语句建立该类型的变量。

       class foo {
        function do_foo() {
          echo "Doing foo.";
                 }
            }
        $bar = new foo;
        $bar->do_foo();

4 变量作用域

很多人都在问这个问题.下面来看看吧.

<?php
require_once("boke/inc/re_conn.php");
$id =isset($_GET['id'])?$_GET['id']:'';
if(!is_numeric($id)){
 exit('unkown');
}else{
 $sql ="update filecontent set filebrower=filebrower+1 where id=$id";
 mysql_query($sql);
 $result =mysql_query("select id,filebrower from filecontent where id=$id");
 $rs  =mysql_fetch_array($result);
 
}
?>
document.write('<?php echo $rs[1];?>人次');

  我想要使用PHP和MySQL,但是如何安装和运行呢?什么是最基本的事情我应该知道的,以便让一个简单
的PHP - MySQL应用程序工作?

  这是一个基本的教程。没有怪异的代码,只是一些基础。

  多说一句,现在有大量的教程是基于UNIX机器的,这个教程将集中在基于Windows平台上。然而,除了
安装部分,有或多或少的针对于Windows的说明外,其它部分对所有的平台都是一样的。

  在这个教程中,我们将一步一步地建立一个小的网站,使用了PHP和MySQL的下面特性:

  1. 查看数据库;
  2. 编辑数据库的记录;
  3. 修改数据库的记录;
  4. 删除数据库的记录。

  我们将同时学习MySQL和PHP,一起去感觉它们。

第一节 - 收集和建立必要的项目

  好,开始工作。为了开始PHP-MySQL我们需要一些预备:

  1. 运行web服务器;
  2. 增加PHP扩展;
  3. 运行MySQL。

  第一步,得到和安装Web服务器

  让我们假设一下在你的机器上已经有一个运行着的web服务器。在Windows下有几个好用的web服务器应
用程序。要注重一件事,为了运行php/mysql你所选的web服务器应当可以支持扩展。

  一个在Windows上最轻易安装的服务器是OmniHTTPd(http://www.omnicron.ab.ca/httpd/,它是一个非
常好的自由web服务器。

  一旦你从站点上得到了安装文件,双击它并且安装web服务器。假如你在安装时全部选择了使用缺省值,
那么你将会把它安装在c:httpd下。一旦安装成功,安装程序将启动web服务器,带有一个欢迎窗口,在
windows的系统托盘中可以看到一个新的图标。

  好了,第一步做完了。

  第二步,下载和安装PHP发行版

  得到PHP Win32发行版很轻易:只要去http://www.php.net/download-php.php3,并且选择一个最好的
位置就可以了。

  在OmniHTTPd上安装PHP非常简单。

  最先Unzip安装文件到你的硬盘上,比如展开在c:php。

  拷贝文件'php3.ini-dist'到你的'%WINDOWS'目录下去,并改名'php3.ini'(在Win95/98为c:windows,在
WinNT/Win2k为c:winnt)。

  按下面编辑php3.ini文件:

  改变'extension_dir'设置为你的PHP安装目录(c:php),或存放'php3_*.dll'的目录。

  选择想在PHP启动时装入的模块。你应该将'extension=php3_*.dll'行的注释去掉来装入这些模块(一定
要确认去掉了extension=php3_mysql.dll的注释)。一些模块要求有额外的库安装在你的系统上才能正常工作。

  PHP问答集(http://www.php.net/FAQ.php3)有更多关于如何得到支持库的信息。你可以通过使用:
dl("php_*.dll")动态地装入一个模块。

  PHP扩展库以'php3_'为前缀。这个可以防止在PHP扩展与它们的支持库之间发生混淆。

  现在跟着简单的步骤配置OmniHTTPd:

  在系统托盘中右击蓝色的OmniHTTPd图标,选项属性(Properties)项;

  点击Web Server Global Settings项;

  点中'External'tab标签。现在,在"Virtual"域中输入".php3",在"actual"域中输入"c:phpphp.exe",
然后单击"Add"。

  选择Mime tab标签并且在"Vritual"中输入"wwwserver/stdcgi",在"Actual"中输入".php3",并单
击"Add"。

  单击 OK。

PHP功能的强大首先在于它的大量的内置函数库,它可以让初学者也能执行许多复杂的任务,而不必安装新的库和关心底层的具体情况,而这恰恰是其它流行的诸如Perl这样的客户端语言所不具备的。由于这个教程的限制,我们仅仅学习了一些与MySQL数据库相关的一些函数(事实上,即使是这种函数,我们也没有学全)。在这最后的部分,我们会稍微扩大一下范围来看看其它对于建立一个数据库驱动的网站有用的PHP的特征。
我们首先将学习PHP的include函数,使用这个函数,我们可以在许多页面中重复使用同一个PHP代码段。我们还看到如何利用这个函数提高我们的网站的安全性。
虽然PHP一般是相当快速和有效率的,但是它会加重服务器的运行时间和工作量。对于一个高流量的站点来说,这种负担可能会达到无法接受的程度。但是这并不意味着我们需要放弃我们的站点的数据库驱动的特征。我们会看到如何使用PHP在后台建立半动态页面而不必过分加重服务器的负担。
经常有人问论坛是如何利用一个<INPUT TYPE=FILE>标记来接受文件的上载的。我们也将学习到如何用PHP实现这种功能,而且我们还会看到假如将其有效地结合到一个数据库驱动的站点中。
最后,PHP还有一个相当强大的功能是可以很简单地将动态生成的内容很方便地作为email的信息发送出去。不论你是想要使用PHP使得访问者将你的站点的内容发送给它们的朋友,还是仅仅想提供一种方法让用户可以得到他们遗忘的口令,PHP的email函数都可以很好地实现这种功能!
PHP的服务器端包含
假如你已经在Internet上工作过一段时间,你也许接触过服务器端包含(SSI)这个术语;假如你没有接触过,你可以参看有关这个问题的Matt Mickiewicz的迷你指南。
从本质上说,SSI答应你将存储在你的Web服务器上的某一个文件的内容插入到另一个文件中去,最常见的应用是将一个网站的公用设计部分写入一个小的HTML文件当中,这个文件可以被Web页面所包含。对这个小文件的所有变动立即会影响所有包含它的文件。就象一个PHP脚本一样,Web的浏览者不需要对此有所了解,因为Web服务器会在将被请求的页面发送到浏览器之前做好所有的工作。
PHP有一个函数可以提供类似的功能。但是在包含文件中除了可以含有正式的HTML以及其它静态的内容以外,还可以含有脚本程序。让我们来看看下面这个例子:
&lt;!-- include-me.inc --&gt;<br>
&lt;?php<br>
echo( &quot;&lt;P&gt;Soylent Green is made from people! &quot;);<br>
?&gt;<br>

在上面的文件中,include-me.inc包含了一些简单的PHP代码。请注重这个文件的文件名的结尾是.inc,而不是.php。这表示这个文件与一般的Web服务器所认为的PHP脚本有所不同。这会保证这个文件只有被插入到一个.php文件中才会被执行,此外这也有助于你分辨你的PHP Web页面和PHP包含文件。
你还需要下面的文件:
<!-- testinclude.php -->
<HTML>
<HEAD>
<TITLE> Test of PHP Includes </TITLE>
</HEAD>
<BODY>
<?php
include("include-me.inc");
?>
</BODY>
</HTML>


这个文件和我们以前使用过的PHP脚本差不多,它的扩展名是.php extension(假如你的服务器需要,也可以是.php3)。请注重对include函数的调用。我们指定了我们要插入的文件名(include-me.inc),PHP会试图获取这个文件并将其插入到现在的文件中以取代include。将这两个文件都上载到你的Web服务器(或者将它们拷贝到你的Web服务器的文档文件夹,假如你正在这个服务器上工作的话),然后用你的浏览器装载testinclude.php。你会看到一个包含我们的插入文件信息的Web页面的,一切和你当初预料的没有什么两样。
假如这个例子不能工作,你也许需要配置你的php.ini文件中的include_path选项。用你常用的文本编辑器打开这个文件找到以include_path开始的一行(一般是在文件的中间)。就象你所熟悉的系统PATH环境变量的设置一样,这里包含了一个目录的列表,PHP会从这些位置寻找你所要包含的文件。它应该包括"."(当前目录)。
根据你的服务器的操作系统是Windows还是UNIX,你也许需要确定是否要用到引号:
对于UNIX:
include_path=.:/another/directory

对于Windows:
include_path=".;c:anotherdirectory"

利用插入文件提高安全性
PHP脚本有时会包含一些诸如用户名、口令以及其它一些你不想公开的敏感信息。你也许已经使用过mysql_connect函数,这个函数要求你在需要访问数据库的PHP脚本中输入你的MySQL用户名和口令。虽然你可以简单地对MySQL进行设置以使得这个用户名和口令只能供PHP使用,而为会被可能出现的黑客利用(通过在第八章中学习的方法对用户表的主机字段进行设置),你也许还是需要其它的比较方便的对你的用户名和口令的保护。
“但是等一下,”可能你会这样说,“因为PHP是由服务器处理的,没人会看到我的口令,对吗?”不错,但是你是否考虑到这样一个情况,服务器对PHP的解析可能会因为偶然的原因而停止。这可能是因为某个善意的同事对软件的错误配置,也可能是因为其它的因素,假如发生了这样的情况,PHP页面会当成纯文本文件来处理,于是你的所有的PHP代码(包括你的口令)将是完全公开的!
为了预防这样的安全漏洞,你可以将包含敏感信息的代码放到一个插入文件中,然后将它放到一个不属于你的Web服务的目录结构的目录中去。将这个目录添加到你的PHP的include_path中(在php.ini中添加),你可以指定PHP包含函数所使用的目录,而不必担心其中文件的安全,因为你的Web服务器不会将其作为Web页来显示。
例如,假如你的Web服务器定义所有的Web页面必须存在于/home/httpd/及其子目录中,你可以建立一个名为/home/phplib/来保存你的包含文件。将这个目录添加到你的include_path中,这样就行了!下面的例子显示了如何将你的数据库连接代码放置到一个包含文件中:
<!-- dbConnect.inc (in /home/phplib/) -->

配置php4或者php5的过程中,php4,5的配置的步骤大致一样的,但是配置内容有一些差别。在LINUX等环境下编译,一般来说,只要编译的选项正确,配置也就正确了;在windows配置则需要注重以下不同点:

1. php4ts.dll 和 php5ts.dll

这个文件要拷贝到apache的bin目录下或者系统目录下

2. httpd.conf 文件加载的模块

示例如下:
# For PHP4 apache1.x.xx
LoadModule php4_module d:/www/webserver/php4/sapi/php4apache.dll
AddType application/x-httpd-php .php

# For PHP4 apache2.x.xx
LoadModule php4_module d:/www/webserver/php4/sapi/php4apache2.dll
AddType application/x-httpd-php .php

# 其中d:/www/webserver/php4是php的所在目录。

# For PHP5 apache1.x.xx
LoadModule php5_module d:/www/webserver/php5/php5apache.dll
AddType application/x-httpd-php .php

# For PHP5 apache2.x.xx
LoadModule php5_module d:/www/webserver/php5/php5apache2.dll
AddType application/x-httpd-php .php

# 其中d:/www/webserver/php5是php的所在目录。

3. 加载mysql的方式不同

在php4以及以前的版本中,mysql是集成在php中的;
而在PHP5(包括BETA)版本,mysql是作为一个模块加载的,需要设置php.ini来加载,例如
extension_dir = "D:/www/WebServer/PHP5/ext/"
extension=php_mysql.dl l

另外,PHP4,PHP5都需要系统目录下的libmysql.dll的支持,假如版本不对,即使你设置了正确的extension_dir和php_mysql.dll的参数,也会造成apache启动的时候提示phpp_mysql.dll找不到的错误。

[!--infotagslink--]

相关文章

  • http 402错误是什么 http 402简介

    http 402错误是什么?402错误较为少见,一般不轻易出现,下面小编就来告诉大家402错误是什么吧。 HTTP 402错误是HTTP状态码的一种,表示“要求付费”; 所求的...2017-01-22
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • 谈谈PHP中相对路径的问题与绝对路径的使用

    经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • jQuery+PHP+MySQL实现无限级联下拉框效果

    这篇文章主要介绍了jQuery+PHP+MySQL实现无限级联效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-02-21
  • php图片添加文字水印实现代码

    这篇文章主要为大家详细介绍了php图片添加文字水印实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-03-17
  • php有序列表或数组中删除指定的值的实现代码

    这篇文章主要介绍了php有序列表或数组中删除指定的值的实现代码,删除给定的值之后,得到一个新的有序列表,长度-1,下面是具体的实现方法...2021-08-22