PHP4用户手册:流程控制-require

 更新时间:2016年11月25日 15:19  点击:1659
TABLE border=0 cellPadding=0 cellSpacing=0 height="100%" width="100%">
require()
require() 语句用它指定的文件代替它自己,这很像C中的预处理#include 的功能。
如果在PHP中"URL fopen wrappers"项是打开的(这是默认的配置),你可以在require()中使用URL代替本地路径。更多的信息参见Remote files和fopen()。
一个重要的提示是:当一个文件被include()或require()时,是怎样工作的,从目标文件开始分析PHP模块和HTML模块的点滴,在结束时重新摘要PHP模块。
前提是,有一些被有效地PHP开始和结束标签包含着的可执行的PHP代码在文件中。
require() 实际上不是一个PHP函数:正确的说,它是一个语言的构成部分。它的规则与函数有一些不同。如,require() 不会受包含控制结构的控制。另外,它不会返回任何值;尝试从require()调用中读取一个返回值的结果是解析错误。
不同的是include(), require() 将总是读目标文件,即使它没有可执行的行。如果你想有条件的包含一个文件,请使用include()。条件语句不会影响require()。
 可是,if the line on which the require() occurs is not executed, neither will any of the code in the target file be executed.
类似的,循环控制也不会影响require()的行为。
 尽管包含文件仍然受循环的控制,但是require() 只执行一次。
这意味着,你不能把require() 语句放在一个循环语句中,期待着它能在每一次循环中包含不同的文件。要这样做,请使用include() 语句。
 
require ('header.inc');
 
当一个文件被require()包含时, 包含着的代码将继承发生require() 那行的变量作用域。在调用文件行的任何可用变量在被调用文件中都将可用。如果require() 发生在正在调用文件中的函数里,这时被调用文件中的全部代码就好像已经被定义在了函数中一样。
如果require()包含的文件是经过HTTP使用fopen打开的,如果目标服务器能作为PHP代码解析目标文件,变量可以使用带有URL的有HTTP GET请求字符串的require()传递。严格的说require()一个文件和继承它的父文件的变量作用域是不同的:这个脚本实际上是运行在远程服务器上,在本地脚本中包含的是它的结果。
 
/* 这人例子假设someserver已经配置了.php的解析而不是.txt文件。
 * 同样,'works' 意味着被包含文件中的变量$varone 和$vartwo 是可用的*/
  这里可以看到另外一个语句Limit,Limit语句就是用来针对具体的请求方法来设定访问控制的,其中可以使用GET、POST等各种服务器支持的请求方法做Limit的参数,来设定对不同请求方法的访问限制。一般可以打开对GET、POST、 HEAD三种请求方法,而屏蔽其他的请求方法,以增加安全性。Limit语句中,可以用Order 、Allow、Deny,Allow和Deny中可以使用匹配的方法针对域名和IP进行限制,只是对于域名是从后向前匹配,对于IP地址则从前向后匹配。
 

  DirectoryIndex index.html
  很多情况下,URL中并没有指定文档的名字,而只是给出了一个目录名。那么Apache服务器就自动返回这个目录下由DirectoryIndex定义的文件,当然可以指定多个文件名字,系统会这个目录下顺序搜索。当所有由DirectoryIndex指定的文件都不存在时,Apache服务器可以根据系统设置,生成这个目录下的所有文件列表,提供用户选择。此时该目录的访问控制选项中的Indexes选项(Options Indexes )必须打开,以使得服务器能够生成目录列表,否则Apache将拒绝访问。
 

  AccessFileName .htaccess
  AccessFileName定义每个目录下的访问控制文件的文件名,缺省为.htaccess,可以通过更改这个文件,来改变不同目录的访问控制限制。
 

Order allow,deny
Deny from all
  除了可以针对目录进行访问控制之外,还可以根据文件来设置访问控制,这
就是File语句的任务。使用File 语句,不管文件处于哪个目录,只要名字匹配, 就必须接受相应的访问控制。这个语句对于系统安全比较重要,例如上例将屏蔽所有的使用者不能访问.htaccess文件,这样就避免.htaccess中的关键安全信息不至于被客户获取。
 

  #CacheNegotiatedDocs
  缺省情况下如果代理服务器和Apache服务器协商是否缓存其网页,Apache给
予否定的回答,不希望自己的网页被代理服务器缓存。然而这样就不能有效的利用代理服务器的优势,因此可以设置CacheNegotiatieDocs 选项, 使得代理服务器可以对网页进行缓存。然而即使不设置这个选项,有的代理服务器(或通过调整设置)也能对网页进行缓存。
 

  UseCanonicalName On
  打开这个UseCanonicalName是Web服务器的标准做法,因为客户发送的大部分请求都是对本服务器的引用,这样服务器就能使用ServerName和Port选项的设置内容构建完整的URL,并回应客户,使浏览器能得到规范的URL。如果将这个参数设置为Off,那么Apache将使用从客户请求中获得服务器的名字和端口值(支持HTTP 1.1的客户的请求中将会有这些信息),重新构建URL。
TABLE border=0 cellPadding=0 cellSpacing=0 height="100%" width="100%">
 
(PHP 3, PHP 4 >= 4.0.0)
file -- 读取整个文件到数组
描述
 
array file (string filename [, int use_include_path])
 
除了file()返回的是数组,其它的与readfile()一样。数组的每个元素对应文件的每一行,而带有换行符。
注意:在结果数组中的每行包含着行结尾,如果你不想要行结尾你可使用trim() 函数去掉它。
如果你想在包含路径中搜索文件,你可以使用可选的第二个参数并把它设置为"1"。
 
 
<?php
// 获得一个网页的数组并打印它
$fcontents = file ('http://www.php.net/');
while (list ($line_num, $line) = each ($fcontents)) {
      echo "<b>Line $line_num:</b>; ", htmlspecialchars ($line), "<br> ";
}
// 获得一个网页到字符串中
$fcontents = join (', file ('http://www.php.net/'));
?>
 
 
警告
这个函数不能用于二进制!
 
提示:如果"fopen wrappers"配置已经打开,你可以在这个函数中使用 URL 作为文件名。
参见readfile(), fopen(), fsockopen(), 和 popen().
 

DIV class=sect1>
for 循环是PHP中非常复杂的循环。它的行为象C语言中的一样。以下是循环的语法:
 
for (expr1; expr2; expr3) statement
 
第一个表达式(expr1)是循环无条件开始的值。
在每次反复开始,表达式expr2 被计算。如果值为TRUE,则继续循环,执行嵌套的语句。如果值为FALSE,执行循环以后的
在每次反复,表达式expr3 被计算(执行)。
每个表达式都可以为空。expr2 为空则意味着循环将不确定的运行(PHP 隐暗认为它为真,象C语言一样)。
 这不可能想你想的那样结束,你可以使用break语句去代替for事实表达式去结束循环。
考虑以下的例子。它们将显示1至10的数字:
 
/* 例 1 */
for ($i = 1; $i <= 10; $i++) {
      print $i;
}
/* 例 2 */
for ($i = 1;;$i++) {
      if ($i > 10) {
     break;
      }
      print $i;
}
/* 例 3 */
$i = 1;
for (;;) {
      if ($i > 10) {
     break;
      }
      print $i;
      $i++;
}
/* 例 4 */
for ($i = 1; $i <= 10; print $i, $i++);
 
当然,从第一个例子看出是简略的(或是第四个),但是你可以发现有很多的机会你可以使用空表达式。
PHP 仍然支持循环的“冒号语法”。
 
for (expr1; expr2; expr3): statement; ...; endfor;
 
另我的语言有一个 foreach 语句去操作数组或散列。PHP 3 中没有这样的构造;PHP 4 有(参见 foreach)。在PHP 3中,人可以用while、list() 和each() 函数去完成相同的功能。参见这些函数的文档。

DIV class=chapter>
目录列表
基础
固定变量
变量作用域
变量的变量
PHP外的变量
变量的描述:在PHP中是一个美元符后跟随变量的名字。变量名是大小写敏感的。
变量名的命名与PHP中其他标签的一致。一个有效变量名是以一个字线或下划线开始的,随后是一些字线,数字或下划线。当作正则表达式看待,它将是这样的:'[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*'
注意:一个字母是 a-z, A-Z, 和ASCII 字符127 through 255 (0x7f-0xff).
 
 
$var = "Bob";
$Var = "Joe";
echo "$var, $Var";      // 输出 "Bob, Joe"
$4site = 'not yet';     // 错误; 开始不能是数字
$_4site = 'not yet';      // 有效; 开始可以是下划线
$täyte = 'mansikka';      // 有效:'ä' 是ASCII 228.
 
在PHP 3中,变量通过是被赋值的。换句话说,当你分配一个表达式给一个变量时,原始表达式的值被复制到目的变量。
这意味着,分配一个变量的值到另外的变量,只改变那些变量的值不会影响其他的变量。更多的信息参见Expressions.
PHP 4提供另外的途径为变量分配值:引用分配。这意味着新的变量是简单的引用原始变量(这个新变量只是一个“化名”或“指向”)改变新变量会影响原始变量,反之亦然。这也意味着没有复制被执行:因此,分配速度更快。尽管如此,这样的加速只体现在复杂的循环或分配大的数组和对象时。
分配一个引用,只需被分配(源变量)的那个变量前加“&”号。如,下面的代码片段输出'My name is Bob'两次:
 
<?php
$foo = 'Bob';         // 分配值'Bob' 到 $foo
$bar = &$foo;         // 通过$bar引用$foo.
$bar = "My name is $bar";  // 改变 $bar...
echo $foo;            // $foo 也被改变.
echo $bar;
?>
 
一个重要的提示:只有一个被指定的变量可以被引用分配。
 
<?php
$foo = 25;
$bar = &$foo;      // 这是有效的分配.
$bar = &(24 * 7);  // 错误:引用了没有命名的表达式.
function test()
{
     return 25;
}
$bar = &test();      // 错误.
?>

[!--infotagslink--]

相关文章

  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • 源码分析系列之json_encode()如何转化一个对象

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

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • php根据用户语言跳转相应网页

    当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <&#63;php $lan = substr(&#8194;$HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
  • php有效防止同一用户多次登录

    【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24
  • 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
  • js检测用户输入密码强度

    一个用Javascript检测用户输入密码强度的效果代码,以下代码主要是从以下四个方面检测用户输入的密码的强度的,有兴趣的朋友可以自己添加或修改成自己想要的形式! 1. 如果输入的密码位数少于5位,那么就判定为弱。 2. 如果...2015-10-23
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • php ajax注册验证用户名是否存在代码

    这是注册程序是一款当用户输入完用户名是,就会自动去数据库中查询用户要注册的用户名是否己经被注册了,如果是返回提示否则提示可以注册。 conn.php文件 代...2016-11-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
  • 微信小程序用户授权最佳实践指南

    这篇文章主要给大家介绍了关于微信小程序用户授权最佳实践的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-08
  • require、backbone等重构手机图片查看器

    这篇文章主要为大家详细介绍了require、backbone等重构手机图片查看器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-11-22
  • golang与php实现计算两个经纬度之间距离的方法

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

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