PHP文件与目录操作示例解析
本文实例讲述了PHP文件与目录操作。分享给大家供大家参考,具体如下:
文件目录相关函数
<?php
// 输出目录中的文件
functionoutputcurfiles ($allowedtypes,$thedir){
//首先,我们确保目录存在。
if(is_dir($thedir)){
//现在,我们使用scandir扫描目录中的文件。
$scanarray= scandir ($thedir);
//接着我们开始解析数组。
//scandir()用“.”和“..”统计文件导航列表
//因此作为文件,我们不应该列出他们。
for($i= 0;$i<count($scanarray);$i++){
if($scanarray[$i] !="."&&$scanarray[$i] !=".."){
//现在,进行检查,以确保这是一个文件,而不是一个目录。
if(is_file($thedir."/".$scanarray[$i])){
//现在,因为我们将允许客户端编辑这个文件,
//我们必须检查它是否是可读和可写。
if(is_writable($thedir."/".$scanarray[$i]) && is_readable($thedir."/".$scanarray[$i])){
//现在,我们检查文件类型是否存在于允许的类型数组中.
$thepath=pathinfo($thedir."/".$scanarray[$i]);
if(in_array ($thepath['extension'],$allowedtypes)){
//如果文件符合规定,我们可以继续输出.
echo$scanarray[$i] ."<br />";
}
}
}
}
}
}else{
echo"对不起,这个目录不存在.";
}
}
$allowedtypes=array("txt","html");
outputcurfiles ($allowedtypes,"testfolder");
///////////////////////////////////////////////////
functionrecurdir ($thedir) {
//First attempt to open the directory.
try{
if($adir= opendir ($thedir)){
//扫描目录。
while(false !== ($anitem= readdir ($adir))){
//不统计目录中包含“.”或“..”的情况
if($anitem!="."&&$anitem!=".."){
//此时如果是一个目录,则缩进一点
//再去递归
if(is_dir($thedir."/".$anitem)){
?><span style="font-weight: bold;"mce_style="font-weight: bold;"><?phpecho$anitem; ?></span><?php
?><div style="margin-left: 10px;"mce_style="margin-left:10px;"><?php
recurdir ($thedir."/".$anitem);
?></div><?php
}elseif(is_file($thedir."/".$anitem)){
//此时输出文件.
echo$anitem."<br />";
}
}
}
}else{
thrownewexception ("Sorry, directory could not be openend.");
}
}catch(exception$e) {
echo$e->getmessage();
}
}
echo"<br />/////////////////////////////////////<br /><br />";
recurdir("testfolder");
//////////////////////////////////////////////////////////////////
echo"<br />/////////////////////////////////////<br /><br />";
functionsortfilesbydate ($thedir){
//首先,需要确保目录存在。
if(is_dir($thedir)){
//接着,我们使用scandir扫描此目录中的文件.
$scanarray= scandir ($thedir);
$finalarray=array();
//然后开始解析数组
//scandir()用“.”和“..”统计文件导航列表
//因此作为文件,我们不应该列出他们.
for($i= 0;$i<count($scanarray);$i++){
if($scanarray[$i] !="."&&$scanarray[$i] !=".."){
//现在,我们检查,以确保这是一个文件,而不是一个目录.
if(is_file($thedir."/".$scanarray[$i])){
//现在需要做的是循环数据到一个关联数组.
$finalarray[$thedir."/".$scanarray[$i]] =filemtime($thedir."/".$scanarray[$i]);
}
}
}
//至此,我们已经遍历了整个数组,现在需要做的只是asort()它。
asort ($finalarray);
return($finalarray);
}else{
echo"对不起,这个目录不存在.";
}
}
//然后,我们将函数指向我们需要查看的目录.
$sortedarray= sortfilesbydate ("testfolder");
//至此,就可以按照如下形式输出:
while($element= each ($sortedarray)){
echo"File: ".$element['key'] ." was last modified: ".date("F j, Y h:i:s",$element['value']) ."<br />";
}
?>
|
本文实例分析了PHP数组操作。分享给大家供大家参考,具体如下:
PHP的数组是很重要的一部分。操作示例如下:
<?php
functionbr() {
echo'<br />===============================================<br />';
}
$arr1=array();
$arr1[] ='x';
$arr1[] ='a';
$arr1[] ='e';
$arr1[] ='c';
$arr1[] ='h';
// 添加数组
array_push($arr1, 3, 23, 55);
// 数组长度
echo'the size of array is :'.count($arr1).'<br />';
// 反转
var_dump(array_reverse($arr1));
// 排序 - 直接作用于数组
sort($arr1);
var_dump($arr1);
// 排序 - 按字符串排序
sort($arr1, SORT_STRING);
var_dump($arr1);
// 范围
$arr2= range('a','h');
// 连接
$arrTemp1= implode('-',$arr2);
echo$arrTemp1;
echo'<br />';
// 切割
echo'['.implode('][',array_reverse(explode('-',$arrTemp1) )).']';
// 数组合并,会重排索引
$arr3=array_merge($arr1,$arr2);
var_dump($arr3);
// 删除数组元素
array_shift($arr3);
array_pop($arr3);
unset($arr3[4]);
array_splice($arr3, 6, 2);
var_dump($arr3);
// 抽取数组,原数组不变
$arr4=array_slice($arr3, 2,3);
var_dump($arr4);
// 关联数组
$fruits=array('red'=>'apple','yellow'=>'banana','green'=>'lime');
// 数组键
$colors=array_keys($fruits);
// 数组值
$fla=array_values($fruits);
var_dump($colors);
var_dump($fla);
// 查找
echoin_array('green',$colors);
echo'<br />';
echoin_array('black',$colors)?'in':'not in';
echo'<br />';
echoarray_key_exists('yellow',$fruits);
echo'<br />';
// 按键排序
ksort($fruits);
var_dump($fruits);
// 按值排序
asort($fruits);
var_dump($fruits);
// 循环
foreach($fruitsas$key=>$value) {
echo$key.' => '.$value.'<br />';
}
echo'<br />';
$f=$fruits;
while($elem= each($f)) {
echo$elem['key'].' -- '.$elem['value'].'<br />';
}
echo'<br />';
$arr5=array(2, 8, 100, 33, -18);
// 查找最大最小值
echomax($arr5);
echo'<br />';
echomin($arr5);
echo'<br />';
echoarray_sum($arr5);
echo'<br />';
functiondouble($x) {
echo($x* 2).' ';
}
// 数组元素应用函数
array_walk($arr5,'double');
functioncheck($x) {
return$x> 20;
}
// 筛选
var_dump(array_filter($arr5,'check'));
$arr6= range(1,10);
echo'random number: '.array_rand($arr6);
//统计
//count(); sizeof(); array_count_values();
$arr7=array(4,5,1,2,3,1,2,1);
$ac=array_count_values($arr7);
// 统计每个value出现的次数
var_dump($ac);
$arr8=array('key1'=>'v1','key2'=>'v2','key3'=>'v3');
extract($arr8);
echo"$key1 $key2 $key3";
//填补
$input=array(12,10,9);
var_dump(array_pad($input, 5, 0));
var_dump(array_pad($input, -5, 0));
?>
|
php 反斜杠处理函数
addslashes():对输入字符串中的某些预定义字符前添加反斜杠,这样处理是为了数据库查询语句等的需要。这些预定义字符是:单引号 (') ,双引号 (") ,反斜杠 (\) ,NULL。
stripslashes():删除由 addslashes() 函数添加的反斜杠。该函数用于清理从数据库或 HTML 表单中取回的数据。(若是连续二个反斜杠,则去掉一个,保留一个;若只有一个反斜杠,就直接去掉。)
默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。例:
if(get_magic_quotes_gpc()){
code....
}
|
addslashes() 例子:
<?php
$str="Who's John Adams?";
echo$str." This is not safe in a database query.<br />";
echoaddslashes($str) ." This is safe in a database query.";
?>
|
输出结果:
Who's John Adams? This is not safe in a database query.
Who\'s John Adams? This is safe in a database query.
|
stripslashes() 例子:
<?php
echostripslashes("Who\'s John Adams?");
?>
|
输出结果:
Who's John Adams?
|
PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展。
代码实战
先来看登录部分的代码:
//模拟登录
functionlogin_post($url,$cookie,$post) {
$curl= curl_init();//初始化curl模块
curl_setopt($curl, CURLOPT_URL,$url);//登录提交的地址
curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);//是否自动显示返回的信息
curl_setopt($curl, CURLOPT_COOKIEJAR,$cookie);//设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息
curl_exec($curl);//执行cURL
curl_close($curl);//关闭cURL资源,并且释放系统资源
}
|
函数login_post()首先初始化curl_init(),然后使用curl_setopt()设置相关选项信息,包括要提交的url地址,保存的cookie文件,post的数据(用户名和密码等信息),是否返回信息等等,然后curl_exec执行curl,最后curl_close()释放资源。注意PHP自带的http_build_query()可以将数组转换成相连接的字符串。
接下来如果登录成功后,我们要获取登录成功后的页面信息。
//登录成功后获取数据
functionget_content($url,$cookie) {
$ch= curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie);//读取cookie
$rs= curl_exec($ch);//执行cURL抓取页面内容
curl_close($ch);
return$rs;
}
|
函数get_content()中也是先初始化curl,然后设置相关选项,执行curl,释放资源。其中我们设置CURLOPT_RETURNTRANSFER为1即自动返回信息,而CURLOPT_COOKIEFILE可以读取到登录时保存的cookie信息,最后将页面内容返回。
我们的最终目的是要获取到模拟登录后的信息,也就是只有正常登录成功后才能获取的有用信息。接下来我们以登录开源中国的移动版为例,看看如何抓取到登录成功后的信息。
//设置post的数据
$post=array(
'email'=>'oschina账户',
'pwd'=>'oschina密码',
'goto_page'=>'/my',
'error_page'=>'/login',
'save_login'=>'1',
'submit'=>'现在登录'
);
//登录地址 $url = "http://m.oschina.net/action/user/login"; //设置cookie保存路径 $cookie = dirname(__FILE__) . '/cookie_oschina.txt'; //登录后要获取信息的地址 $url2 = "http://m.oschina.net/my"; //模拟登录
login_post($url,$cookie,$post);//获取登录页的信息 $content = get_content($url2, $cookie); //删除cookie文件
@ unlink($cookie);//匹配页面信息 $preg = "/<td class='portrait'>(.*)<\/td>/i";
preg_match_all($preg,$content,$arr);$str=$arr[1][0];//输出内容 echo $str;
|
使用总结
1、初始化curl;
2、使用curl_setopt设置目标url,和其他选项;
3、curl_exec,执行curl;
4、执行后,关闭curl;
5、输出数据。
相关文章
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
Jupyter Notebook读取csv文件出现的问题及解决
这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06- 今天小编就为大家分享一篇解决Pycharm的项目目录突然消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-22
- 有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
- 一、常量常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。按照惯例常量标识符总是大写的。 常量名和其它任何 PHP 标签遵循...2015-10-30
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
- 又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
- 今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- 这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
- 这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
ant design中upload组件上传大文件,显示进度条进度的实例
这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29