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

[笔记] php常见简单功能及函数

获取远程文件(图片等)

有三种方式

  1. file_get_contents($url);
    使用file_get_contents()函数获取文件,在用file_put_contents()函数把文件写到本地。

  2. 使用curl

//获取到文件
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,60);
$file=curl_exec($ch);
curl_close($ch);
//写入本地
$fp=fopen($save_dir.$filename,'a');
fwrite($fp,$file);
fclose($fp);

3 . 使用ob_start()

//获取文件
ob_start();    //打开缓冲区
readfile($url);
$file=ob_get_contents();
ob_end_clean();
//写入本地
$fp=fopen($save_dir.$filename,'a');
fwrite($fp,$file);
fclose($fp);

多个进程写入同一个文件(加锁)

$fp = fopen("lock.txt","w+");
if(flock($fp,LOCK_EX)){
    //获得写锁,写数据
    fwrite($fp,"write something");
    //解除锁定
    flock($fp,LOCK_UN);
}else{
    echo "file is locking";
}
fclose($fp);

跳转的方法

header('Location:http://www.baidu.com');        //立刻跳转
header('refresh:3;url=http://www.baidu.com');    //三秒后跳转
//php函数跳转缺点:执行前不能有输出

//meta跳转
echo "<meta http-equiv='refresh' content='5;url=http://www.baidu.com' >";

创建多级目录

function create_dir($path,$mode=0777){
    if(is_dir($path)){
        return true;
    }else{
        if(mkdir($path,$mode,true)){
            return true;
        }else{
            return false;
        }
    }
}

无限极分类

function getCat($data,$pid=0,$level=0){
    static $res;
    foreach($data as $k=>$v){
        if($v['pid']=$pid){
            $v['level'] = $level;
            $res[] = $v;
            getCat($data,$v['id'],$level+1);
        }
    }
    return $res;
}

取出url中的扩展名

function getExt($url){
    $arr = parse_url($url);  //解析url,返回数组
    $file = basename($arr['path']);  //取文件名部分
    $ext = explode('.',$file);
    return $ext[count($ext)-1];
}
function getExt($url){
    $url = basename($url);
    $pos1 = strpos($url,'.');
    $pos2 = strpos($url,'?');
    if(strstr($url,'?')){
        return substr($url,$pos1+1,$pos2-$pos1-1);
    }else{
        return substr($url,$pos1+1);
    }
}

读取文件夹下的所有子目录和子文件夹

function my_scandir($dir){
    $files = array();
    if(is_dir($dir)){
        if($handle = opendir($dir)){
            while(($file = readdir($handle)) != false){
                if($file!='.' && $file!='..' ){
                    if(is_dir($dir.'/'.$file)){
                        $files[$file] = my_scandir($dir.'/'.$file);
                    }else{
                        $files[] = $dir.'/'.$file;
                    }
                }
            }
            closedir($handle);
            return $files;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

待续……

相关文章:

  • SQLServer 理解copyonly备份操作
  • pycharm2016序列号失效问题解决办法
  • ASP.NET Core DI 手动获取注入对象
  • 深入浅出 spring-data-elasticsearch - 基本案例详解(三)
  • 远程桌面无法复制粘贴的解决方法
  • 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.2.1 CPU基础设施基准...
  • “智能云”战略新品震撼发布,开发者如何快速上手?
  • 对于startActivity的使用改进
  • [设计模式][c++]状态切换模式
  • POJ2117-Electricity
  • HTML/CSS 知识点
  • java并发编程之:线程共享数据的方式
  • 《2017年全球数据库安全市场趋势》
  • 聊聊运维(1)证明你是坏运维的七个迹象,不要做CPR运维
  • 怎样制作C#安装程序
  • 网络传输文件的问题
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 345-反转字符串中的元音字母
  • C语言笔记(第一章:C语言编程)
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • mockjs让前端开发独立于后端
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 构建工具 - 收藏集 - 掘金
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 学习笔记:对象,原型和继承(1)
  • 源码安装memcached和php memcache扩展
  • ${factoryList }后面有空格不影响
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (六)vue-router+UI组件库
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • .gitignore
  • .Net 4.0并行库实用性演练
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 使用ajax控件后如何调用前端脚本
  • .net和php怎么连接,php和apache之间如何连接
  • .ui文件相关
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • [100天算法】-x 的平方根(day 61)
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [ajaxupload] - 上传文件同时附件参数值
  • [C++]priority_queue的介绍及模拟实现
  • [C++]——带你学习类和对象
  • [Docker]六.Docker自动部署nodejs以及golang项目
  • [Google Guava] 2.1-不可变集合
  • [hibernate]基本值类型映射之日期类型
  • [InnoDB系列] -- SHOW INNODB STATUS 探秘
  • [JavaWeb学习] Spring Ioc和DI概念思想
  • [JMS 3] ActiveMQ实现简单的helloworld
  • [jobdu]不用加减乘除做加法