php 数组的处理详解(1/3)

 更新时间:2016年11月25日 15:08  点击:1788

php教程 数组的处理详解
 
1.1 数组的创建和初始化:
1.arrary()函数创建数组,默认情况下0元素是数组的第一个元素,
count()和sizeof()函数获得数据元素的个数
2.使用变量建立数组
compact()在当前的符号表中查找该变量名并将它添加到输出的数组中,变量名成为键名而变量的内容成为该键的值.
复制代码 代码如下:
<?php
$num=10;
$str="string";
$array=array(1,2,3);
$newarray=compact("num","str","array");
print_r($newarray);
/*结果
array([num]=10 [str]=>string [array]=>array([0]=>1 [1]=>2 [2]=>3))
*/
?>

extract() 将数组中的单元转为变量
复制代码 代码如下:
<?php
$array=array("key1"=>1,"key2"=2,"key3"=3);
extract($array);
echo "$key1 $key2 $key3";//输出1 2 3
?>

3.使用两个数组创建一个数组
复制代码 代码如下:
array_combine(array $keys, array $values)
<?php
$a=array('green','red','yellow');
$b=array(' volcado','apple','banana');
$c=array_combine($a,$b);
print_r($c);
?>

4.建立指定范围数组
range()
5.自动建立数组
1.2 键名和值的操作
本小节只讲常用的
。检查数组是否存在某个键名和值可以使用。array_key_exists()和in_arrary函数,isset()检查数组中的键名,当键名为NULL时,isset()返回           false,而array_key_exists()返回true.
。array_search()函数用于检查数组的键值是否存在,不存在返回NULL。
。key()函数可以取得数组当前单元的键名.
。list()函数,将数组中值赋给指定的变量。在数组遍历中非常有用。
<?php
$arr=array("红色","蓝色","白色");
list($red,$blue,$white)=$arr;
echo $red; //红色
echo $blue; //蓝色
echo $white; // 白色
。array_fill()和array_fill_keys()可以用给定的值班填充数组的值和键名
。array_filp()可以交换数组中的键名和值,另外如果交换数组中有相同的值,则相同的值转换为键名后,值保留最后一个
。array_keys()和array_values()函数可以取得数组中的键名和值,并保存到一个新的数组中。
。array_splice(arry $input,int $offset[,int $length[,array $replacement]])将数组中的一个或多个单元删除并用其它值代替。
。array_unique(),可以移除数组中的重复的值,返回一个新数组,并不会破坏原有的数组。
1.3 数组的遍历与输出
1.使用while 循环访问数组
应用while、list()、each()函数对数组遍历
2. for循环访问数组
3.使用foreach循环访问数组
复制代码 代码如下:
<?php
$color=array("a"=>"red","blue","white");
foreach($color as $value)
{
echo $value."<br>";//输出数组的值
}
foreach($color as $key=>$value)
{
echo $key."=>".$value."<br>";//输出数组的键名和值
}
?>

htmlspecialchars 和 htmlentities 的区别分析

htmlentities() 函数把字符转换为 HTML 实体。

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &#039;
< (小于) 成为 &lt;
> (大于) 成为 &gt;

The translations performed are:

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'
htmlspecialchars 只转化上面这几个html代码,而 htmlentities 却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。

例子
<html>
<body>
<?php教程
$str = "John & 'Adams'";
echo htmlentities($str, ENT_COMPAT);
echo "<br />";
echo htmlentities($str, ENT_QUOTES);
echo "<br />";
echo htmlentities($str, ENT_NOQUOTES);
?>
</body>
</html>浏览器输出:

John & 'Adams'
John & 'Adams'
John & 'Adams'如果在浏览器中查看源代码,会看到这些 HTML:

<html>
<body>
John &amp; 'Adams'<br />
John &amp; &#039;Adams&#039;<br />
John &amp; 'Adams'
</body>
</html>

我们可以拿一个简单的例子来做比较:

$str='<a href="test.html">测试页面</a>';
echo htmlentities($str);
// &lt;a href=&quot;test.html&quot;&gt;&sup2;&acirc;&Ecirc;&Ocirc;&Ograve;&sup3;&Atilde;&aelig;&lt;/a&gt;
 
$str='<a href="test.html">测试页面</a>';
echo htmlspecialchars($str);
// &lt;a href=&quot;test.html&quot;&gt;测试页面&lt;/a&gt;
结论是,有中文的时候,最好用 htmlspecialchars ,否则可能乱码

<html>
<body>
<?php
$str = "John & 'Adams'";
echo htmlspecialchars($str, ENT_COMPAT);
echo "<br />";
echo htmlspecialchars($str, ENT_QUOTES);
echo "<br />";
echo htmlspecialchars($str, ENT_NOQUOTES);
?>
</body>
</html>浏览器输出:

John www.111cn.net & 'Adams'
John & 'Adams'
John & 'Adams'如果在浏览器中查看源代码,会看到这些 HTML:

<html>
<body>
John www.111cn.net &amp; 'Adams'<br />
John &amp; &#039;Adams&#039;<br />
John &amp; 'Adams'
</body>
</html>

另外参考一下这个自定义函数

function my_excerpt( $html, $len ) {
    // $html 应包含一个 HTML 文档。
    // 本例将去掉 HTML 标记,网页特效 代码
    // 和空白字符。还会将一些通用的
    // HTML 实体转换成相应的文本。
    $search = array ("'<script[^>]*?>.*?</script>'si",  // 去掉 javascript
                    "'<[/!]*?[^<>]*?>'si",           // 去掉 HTML 标记
                    "'([rn])[s]+'",                 // 去掉空白字符
                    "'&(quot|#34);'i",                 // 替换 HTML 实体
                    "'&(amp|#38);'i",
                    "'&(lt|#60);'i",
                    "'&(gt|#62);'i",
                    "'&(nbsp|#160);'i",
                    "'&(iexcl|#161);'i",
                    "'&(cent|#162);'i",
                    "'&(pound|#163);'i",
                    "'&(copy|#169);'i",
                    "'&#(d+);'e");                    // 作为 PHP 代码运行
    $replace = array ("",
                     "",
                     "1",
                     """,
                     "&",
                     "<",
                     ">",
                     " ",
                     chr(161),
                     chr(162),
                     chr(163),
                     chr(169),
                     "chr(1)");
    $text = preg_replace ($search, $replace, $html);
    $text = trim($text);
    return mb_strlen($text) >= $len ? mb_substr($text, 0, $len) : '';
}

1.正则表达式基础知识
含义:由普通字符和(a-z)和一些特殊字符组成的字符串模式
功能:有效性验证。
替换文本。
从一个字符串提取一个子字符串。
分类:POSIX和Perl
POSIX风格更容易掌握,但不能用于二进制模式,而perl相对比较复杂。
2.POSIX风格的正则表达式
1.编写正则表达式
表4.3 POSIX正则表达式语法格式列表
字 符
 描 述
 

 转义字符,用于转义特殊字符。例如,'.'匹配单个字符,'.'匹配一个点号。'-'匹配连字符'-',''匹配符号''
 
^
 匹配输入字符串的开始位置。例如'^he'表示以'he'开头的字符串
 
$
 匹配输入字符串的结束位置。例如,'ok$'表示以'ok'结尾的字符串
 
*
 匹配前面的子表达式零次或多次。例如,'zo*'能匹配"z"以及"zoo"。*等价于{0,}
 
+
 匹配前面的子表达式一次或多次。例如,'zo+'能匹配"zo"以及"zoo",但不能匹配"z"。+等价于{1,}
 
?
 匹配前面的子表达式零次或一次。例如,'do(es)?'可以匹配"do"或"does"中的"do"。'?'等价于{0,1}
 
{n}
 n是一个非负整数。匹配确定的n次。例如,'o{2}'不能匹配"Bob"中的'o',但是能匹配"food" 中的两个'o'
 
{n,}
 n是一个非负整数。至少匹配n次。例如,'o{2,}'不能匹配"Bob"中的'o',但能匹配"foooood" 中的所有'o'。'o{1,}'等价于'o+'。'o{0,}'则等价于'o*'
 
{n,m}
 m和n均为非负整数,其中n≤m。最少匹配n次且最多匹配m次。例如,"o{1,3}"将匹配"fooooood"中的前三个'o'。'o{0,1}'等价于'o?'。请注意在逗号和两个数之间不能有空格
 
?
 当该字符紧跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串"oooo",'o+?'将匹配单个"o",而'o+' 将匹配所有'o'
 
.
 匹配除"n"之外的任何单个字符,要匹配包括'n' 在内的任何字符,可以使用'[.n]'的模式
 
(pattern)
 匹配pattern并获取这一匹配。所获取的匹配保存到相应的数组中。要匹配圆括号字符,请使用 '(' 或 ')'
 
(?:pattern)
 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储。这在使用"或"|"来组合一个模式的各个部分时很有用。例如,'industr(?:y|ies).就是一个比'industry|industries'更简略的表达式
 
(?=pattern)
 正向预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows(?=95|98|NT|2000)'能匹配"Windows 2000"中的"Windows",但不能匹配"Windows 3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
 
(?!pattern)
 负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows(?!95|98|NT|2000)'能匹配"'Windows 3.1"中的"Windows",但不能匹配"Windows 2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
 
x|y
 匹配x或y。例如,'z|food' 能匹配"z"或"food",'(z|f)ood'则匹配"zood"或"food"
 
[xyz]
 字符集合。匹配所包含的任意一个字符。例如,'[abc]'可以匹配"plain"中的'a'
 
[^xyz]
 负值字符集合。匹配未包含的任意字符。例如,'[^abc]'可以匹配"plain"中的'p'
 
[a-z]
 字符范围。匹配指定范围内的任意字符。例如,'[a-z]'可以匹配'a'到'z' 范围内的任意小写字母字符
 
[^a-z]
 负值字符范围。匹配不在指定范围内的任意字符。例如,'[^a-z]'可以匹配不在'a' 到'z'范围内的任意字符
 
以下是几个简单的正则表达式的例子:
●'[A-Za-z0-9] ':表示所有的大写字母、小写字母及0到9的数字。
●'^hello':表示以hello开始的字符串。
●'world$':表示以world结尾的字符串。
●'.at':表示以除"n"外的任意单个字符开头并以"at"结尾的字符串,如"cat"、"nat"等。
●'^[a-zA-Z]':表示一个以字母开头的字符串。
●'hi{2}':表示字母h后跟着两个i即hii。
●'(go)+':表示至少含有一个'go'字符串的字符串,如'gogo'
身份证号码一般由18位数字或17位数字后面加一个X或Y字母组成,要匹配身份证号码,可以写作:
^[0-9]{17}([0-9]|X|Y)$
Email地址的正则表达式可以写作:
^[a-zA-Z0-9-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$
2.字符串的匹配
ereg()和eregi()函数
使用ereg()函数可以查找字符串与子字符串匹配的情况,并返回匹配字符串的长度,还可以借助参数返回匹配字符的数组。语法格式如下:
int ereg(string ($pattern) , string $string [, array $regs ])
复制代码 代码如下:

<?php教程
/*本例检查字符串是否是ISO格式的日期(YYYY-MM-DD) */
$date="1988-08-09";
$len=ereg ('([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})', $date, $regs);//日期格式为YYYY-MM-DD
if ($len)
{
echo "$regs[3].$regs[2].$regs[1]". "<br>"; //输出"09.08.1988"
echo $regs[0] ."<br>"; //输出"1988-08-09"
echo $len; //输出10
}
else
{
echo "错误的日期格式: $date";
}
?>

1.UNIX时间戳
php教程d 处理数据,特别是对数据库教程中时间类型数据进行格式化时,需先将时间类型的数据转化为UNIX时间戳进行处理。不同的数据库系统对时间类型的数据
不能兼容 转换,这时就需要将时间转化为UNIX时间戳。这样京实现了不同数据库系统的跨平台性。
2.时间转化为时间戳
如果要将用字符串表达的日期和时间转化为时间戳的形式,可以使用strtotime()函数。
语法格式如下:
int strtotime(string $time [, int $now ])
例如:
复制代码 代码如下:
<?php
echo strtotime('2009-03-05'); //输出1236211200
echo strtotime('2009-03-05 10:24:30'); //输出1236248670
echo strtotime("10 September 2000"); //输出968544000
?>

另一个取得日期的UNIX时间戳的函数是mktime()函数,
语法格式如下:
int mktime([int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year]]]]]])
3.获取日期和时间
1.data()函数
是将时间戳照给定的格式转化为具体的日期和时间字符串。
语法格式如下:
string date(string $format [, int $timestamp ])
说明:
$format指定了转化后的日期和时间的格式,
$timestamp是需要转化的时间戳,如果省略则使用本地当前时间,即默认值为time()函数的值。
time()函数返回当前时间的时间戳
date函数的$format参数的取值如下表。
表4.6 date()函数支持的格式代码
字 符
 说 明
 返回值例子
 
d
 月份中的第几天,有前导零的2位数字
 01~31
 
D
 星期中的第几天,用3个字母表示
 Mon到Sun
 
j
 月份中的第几天,没有前导零
 1~31
 
l
 星期几,完整的文本格式
 Sunday~Saturday
 
N
 ISO-8601格式数字表示的星期中的第几天
 1(星期一)~7(星期天)
 
S
 每月天数后面的英文后缀,用2个字符表示
 st、nd、rd或th,可以和j一起用
 
w
 星期中的第几天,数字表示
 0(星期天)~6(星期六)
 
z
 年份中的第几天
 0~366
 
W
 ISO-8601格式年份中的第几周,每周从星期一开始
 例如:42(当年的第42周)
 
F
 月份,完整的文本格式,如January或March
 January~December
 
m
 数字表示的月份,有前导零
 01~12
 
M
 三个字母缩写表示的月份
 Jan~Dec
 
n
 数字表示的月份,没有前导零
 1~12
 
t
 给定月份所应有的天数
 28~31
 
L
 是否为闰年
 如果是闰年为1,否则为0
 
o
 ISO-8601格式年份数字。这和Y的值相同,只是如果ISO的星期数(W)属于前一年或下一年,则用那一年
 例如:1999或2003
 
Y
 4位数字完整表示的年份
 例如:1999或2003
 
y
 2位数字表示的年份
 例如:99或03
 
a
 小写的上午和下午值
 am或pm
 
A
 大写的上午和下午值
 AM或PM
 
B
 Swatch Internet标准时
 000~999
 
g
 小时,12小时格式,没有前导零
 1~12
 
G
 小时,24小时格式,没有前导零
 0~23
 
h
 小时,12小时格式,有前导零
 01~12
 
H
 小时,24小时格式,有前导零
 00~23
 
i
 有前导零的分钟数
 00~59
 
s
 秒数,有前导零
 00~59
 
e
 时区标志
 例如:UTC,GMT,Atlantic/Azores
 
I
 是否为夏令时
 如果是夏令时为 1,否则为0
 
O
 与格林尼治时间相差的小时数
 例如:+0200
 
P
 与格林尼治时间(GMT)的差别,小时和分钟之间用冒号分隔
 例如:+02:00
 
T
 本机所在的时区
 例如:EST,MDT
 
Z
 时区偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的
 -43200~43200
 
c
 ISO 8601格式的日期
 2004-02-12T15:19:21+00:00
 
r
 RFC 822 格式的日期
 Thu, 21 Dec 2000 16:01:07 +0200
 
U
 从UNIX纪元开始至今的秒数
 time()函数
 
2.getdate()函数
可以获得日期和时间信息数组,
语法格式如下:
array getdate([ int $timestamp ])
说明:$timestamp是要转化的时间戳,如果不给出则使用当前时间。
函数根据$timestamp返回一个包含日期和时间信息的数组,数组的键名和值如表4.7所示
键 名
 说 明
 值 的 例 子
 
seconds
 秒的数字表示
 0~59
 
minutes
 分钟的数字表示
 0~59
 
hours
 小时的数字表示
 0~23
 
mday
 月份中第几天的数字表示
 1~31
 
wday
 星期中第几天的数字表示
 0(表示星期天)~6(表示星期六)
 
mon
 月份的数字表示
 1~12
 
year
 4位数字表示的完整年份
 例如:1999或2003
 
yday
 一年中第几天的数字表示
 0~365
 
weekday
 星期几的完整文本表示
 Sunday~Saturday
 
month
 月份的完整文本表示
 January~December
 
0
 自UNIX 纪元开始至今的秒数
 系统相关,典型值从-2147483648~2147483647
 
4.6.4 其他日期和时间函数
1.日期和时间的计算
复制代码 代码如下:
<?php
$oldtime=mktime(0,0,0,9,24,2008);
$newtime=mktime(0,0,0,10,12,2008);
$days=($newtime-$oldtime)/(24*3600); //计算两个时间相差的天数
echo $days; //输出18
?>

2.检查日期
checkdate()函数可以用于检查一个日期数据是否有效,语法格式如下:
bool checkdate( int $month , int $day , int $year)
复制代码 代码如下:
<?php
var_dump(checkdate(12,31,2000)); //输出bool(TRUE)
var_dump(checkdate(2,29,2001)); //输出bool(FALSE)
?>

3.设置时区
系统默认的是格林尼治标准时间,所以显示当前时间时可能与本地时间会有差别。PHP提供了可以修改时区的函数date_default_timezone_set(),
语法格式如下:
bool date_default_timezone_set (string $timezone_identifier)
参数$timezone_identifier为要指定的时区,
中国大陆可用的值是Asia/Chongqing,Asia/Shanghai,Asia/Urumqi(依次为重庆,上海,乌鲁木齐)。北京时间可以使用PRC。
4.5实例-生成日历
复制代码 代码如下:
<?php
$year=@$_GET['year']; //获得地址栏的年份
$month=@$_GET['month']; //获得地址栏的月份
if(empty($year))
$year=date("Y"); //初始化为本年度的年份
if(empty($month))
$month=date("n"); //初始化为本月的月份
$day=date("j"); //获取当天的天数
$wd_ar=array("日","一","二","三","四","五","六"); //星期数组
$wd=date("w",mktime(0,0,0,$month,1,$year)); //计算当月第一天是星期几
//年链接
$y_lnk1=$year<=1970?$year=1970:$year-1; //上一年
$y_lnk2=$year>=2037?$year=2037:$year+1; //下一年
//月链接
$m_lnk1=$month<=1?$month=1:$month-1; //上个月
$m_lnk2=$month>=12?$month=12:$month+1; //下个月
echo "<table cellpadding=6 cellspacing=0 width=200 bgcolor=#eeeeee><tr align=center bgcolor=#cccccc>";
//输出年份,单击“<”链接跳到上一年,单击“>”链接跳到下一年
echo "<td colspan=4><a href='EX4_15.php?year=$y_lnk1&month=$month'>
<</a>".$year."年<a href='EX4_15.php?year=$y_lnk2&month=$month'>></a></td>";
//输出月份,单击“<”链接跳到上个月,单击“>”链接跳到下个月
echo "<td colspan=3><a href='EX4_15.php?year=$year&month=$m_lnk1'>
<</a>".$month."月<a href='EX4_15.php?year=$year&month=$m_lnk2'>></a></td> </tr>";
echo "<tr align=center>";
for($i=0;$i<7;$i++)
{
echo "<td>$wd_ar[$i]</td> "; //输出星期数组
}
echo "</tr>";
$tnum=$wd+date("t",mktime(0,0,0,$month,1,$year)); //计算星期几加上当月的天数
for($i=0;$i<$tnum;$i++)
{
$date=$i+1-$wd; //计算日数在表格中的位置
if($i%7==0) echo "<tr align=center>"; //一行的开始
echo "<td>";
if($i>=$wd)
{
if($date==$day&&$month==date("n")) //如果是当月的当天则将天数加黑
echo "<b>".$day."</b>";
else
echo $date; //输出日数
}
echo "</td> ";
if($i%7==6) echo "</tr> "; //一行结束
}
echo "</table>";
?>

 

1.文件目录操作
最顶层止录是磁盘根目录,用'/'或'//'
当前目录 ./
../表示apache的目录即htdocs目录
1.创建与删除目录 mkdir
复制代码 代码如下:
<?php教程
if(mkdir("./path",0700)) //在当前目录中创建path目录
echo "创建成功";
?>

2.获取和更改当前目录
使用getcwd()函数可以取得当前的工作目录,该函数没有参数。成功则返回当前的工作目录,失败则返回FALSE
3.打开和关闭目录句柄
opendir($dir)
closed($dir_handle)
4.读取目录内容
readdir(),该参数是一个已经打开的目录句柄,与while循环可以实现对目录的遍历
5.获取指定路径中的目录与文件 。
array scandir(string $directory [, int $sorting_order [, resource $context ]])
说明:$directory为指定路径。参数$sorting_order默认是按字母升序排列,如果设为1表示按字母的降序排列。
$context是可选参数,是一个资源变量,可以用stream_context_create()函数生成,这个变量保存着与具体的操作对象有关的一些数据。
函数运行成功则返回一个包含指定路径下的所有目录和文件名的数组,失败则返回FALSE
2.操作文件的一般方法
3.文件的打开与关闭
1.打开文件
resource fopen(string $filename , string $mode [, bool $use_include_path [, resource $context ]])
●$filename参数。fopen()函数将$filename参数指定的名字资源绑定到一个流上
●$mode参数。$mode参数指定了fopen()函数访问文件的模式,取值见表4.5。
$mode
说 明
'r'
只读方式打开文件,从文件头开始读
'r+'
读写方式打开文件,从文件头开始读写
'w'
写入方式打开文件,将文件指针指向文件头。如果文件已经存在则删除已有内容,如果文件不存在则尝试创建它
'w+'
读写方式打开文件,将文件指针指向文件头。如果文件已经存在则删除已有内容,如果文件不存在则尝试创建它
'a'
写入方式打开文件,将文件指针指向文件末尾,如果文件已有内容将从文件末尾开始写。如果文件不存在则尝试创建它
'a+'
读写方式打开文件,将文件指针指向文件末尾。如果文件已有内容将从文件末尾开始读写。如果文件不存在则尝试创建它
'x'
创建并以写入方式打开文件,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建它。此选项被PH及以后的版本所支持,仅能用于本地文件
'x+'
创建并以读写方式打开文件,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建它。此选项被PH及以后的版本所支持,仅能用于本地文件
'b'
二进制模式,用于连接在其他模式后面。如果文件系统能够区分二进制文件和文本文件(Windows区分,而UNIX不区分),则需要使用到这个选项,推荐一直使用这个选项以便获得最大程度的可移植性

●$use_include_path参数。如果需要在include_path(PHP的include路径,在PHP的配置文件设置)中搜寻文件,
可以将可选参数 $use_include_path的值设为1或TRUE,默认为FALSE。
●$context参数。可选的$context参数只有文件被远程打开时(如通过HTTP打开)才使用,它是一个资源变量,
其中保存着与fopen()函数具体的操作对象有关的一些数据。如果fopen()打开的是一个HTTP地址,
那么这个变量记录着HTTP请求的请求类型、HTTP版本及其他头信息;如果打开的是FTP地址,
记录的可能是FTP的被动/主动模式
2.关闭文件
bool fclose(resource $handle)
4.文件的写入
文件写入前需打开文件,不存在先创建它,一般用fopen()函数创建
●fwrite().文件打开后,向文件写入内容
int fwrite(resource $handle , string $string [, int $length ])
说明:参数$handle是写入的文件句柄,
$string是将要写入文件中的字符串数据,
$length是可选参数,如果指定了$length,则当写入了$string中的前$length个字节的数据后停止写入。
●file_put_contents()函数。PHP 5还引入了file_put_contents()函数。这个函数的功能与依次调用fopen()、fwrite()及fclose()函数的功能一样。语法格式如下:
int file_put_contents(string $filename , string $data [, int $flags [, resource $context ]])
说明:$filename是要写入数据的文件名。
$data是要写入的字符串,$data也可以是数组,但不能为多维数组。
在使用FTP或HTTP向远程文件写入数据时,可以使用可选参数$flags和$context,这里不具体介绍。
写入成功后函数返回写入的字节数,否则返回FALSE。
●fputcsv()函数。CSV是一种比较常用的文件格式,一般以.csv作为扩展名。CSV格式把文件的一行看做是一条记录,记录里的字段使用逗号分隔。
在PHP中使用 fputcsv()函数可以把指定的数组格式化为符合CSV文件格式的内容,并写入文件指针指向的当前行。语法格式如下:
int fputcsv(resource $handle [, array $fields [, string $delimiter [, string $enclosure ]]])
说明:参数$handle是要写入的文件句柄。
参数$fields是要格式化的数组。
可选的$delimiter参数用于设定字段分界符(只允许一个字符),默认为逗号。
可选的$enclosure参数设定字段环绕符(只允许一个字符),默认为双引号
5 文件的读取
1.读取任意长度
fread()函数可以用于读取文件的内容,语法格式如下:
string fread(int $handle, int $length)
说明:参数$handle是已经打开的文件指针,
$length是指定读取的最大字节数,$length的最大取值为8192。
如果读完$length个字节数之前遇到文件结尾标志(EOF),则返回所读取的字符,并停止读取操作。
如果读取成功则返回所读取的字符串,如果出错返回FALSE。
注意:在读取文件后显示文件内容时,文本中可能含有无法直接显示的字符,如HTML标记。
这时需要使用htmlspecialchars()函数将HTML标记转化为实体才能显示文件中的字符。
2.读取整个文件
●file()函数。file()函数用于将整个文件读取到一个数组中,语法格式如下:
array file(string $filename [, int $use_include_path [, resource $context ]])
说明:本函数的作用是将文件作为一个数组返回,数组中的每个单元都是文件中相应的一行,包括换行符在内,
如果失败则返回FALSE。参数$filename是读取的文件名,参数$use_inclue_path和$context的意义与之前介绍的相同
●readfile()函数。readfile()函数用于输出一个文件的内容到浏览器中,语法格式如下:
int readfile(string $filename [, bool $use_include_path [, resource $context ]])
●fpassthru()函数。fpassthru()函数可以将给定的文件指针从当前的位置读取到EOF,并把结果写到输出缓冲区。
要使用这个函数,必须先使用fopen()函数打开文件,然后将文件指针作为参数传递给fpassthru()函数,
fpassthru()函数把文件指针所指向的文件内容发送到标准输出。如果操作成功返回读取到的字节数,否则返回FALSE。
●file_get_contents()函数。file_get_contents()函数可以将整个或部分文件内容读取到一个字符串中,
功能与依次调用fopen()、fread()及fclose()函数的功能一样。语法格式如下:
string file_get_contents(string $filename [, int $offset [, int $maxlen ]])
说明:$filename是要读取的文件名,可选参数$offset可以指定从文件头开始的偏移量,
函数可以返回从$offset所指定的位置开始长度为$maxlen的内容。如果失败,函数将返回FALSE

[!--infotagslink--]

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • 源码分析系列之json_encode()如何转化一个对象

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

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • Windows批量搜索并复制/剪切文件的批处理程序实例

    这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
  • BAT批处理判断服务是否正常运行的方法(批处理命令综合应用)

    批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。这篇文章主要介绍了BAT批处理判断服务是否正常运行(批处理命令综合应用),需要的朋友可以参考下...2020-06-30
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • C# 拷贝数组的几种方法(总结)

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • PHP file_get_contents设置超时处理方法

    file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • C#多线程中的异常处理操作示例

    这篇文章主要介绍了C#多线程中的异常处理操作,涉及C#多线程及异常的捕获、处理等相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 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
  • 将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'jack'  ),  array(    'id'=>'34',    'name'=>'mary'  ),  array(    'id...2014-05-31