zoukankan      html  css  js  c++  java
  • 文件处理类

    <?php
    /**
    * Tiny - A PHP Framework For Web Artisans
    * @author Tiny <tinylofty@gmail.com>
    * @copyright Copyright(c) 2010-2014 http://www.tinyrise.com All rights reserved
    * @version 1.0
    */
    /**
    * 文件处理类
    *
    * @author Tiny
    * @class File
    */
    class File
    {
    private $file;
    private $fileName;
    /**
    * 构造方法
    *
    * @access public
    * @param mixed $file
    * @param string $mode
    * @return mixed
    */
    public function __construct($file=null,$mode='r+')
    {
    if(!is_null($file)){
    $this->fileName = $file;
    $dir=dirname($this->fileName);
    if(!file_exists($dir))$this->mkdir($dir);
    $this->file = fopen($file,$mode);
    }
    }
    /**
    * 析构关闭成功
    *
    * @access public
    * @return mixed
    */
    public function __destruct()
    {
    if(is_resource($this->file)){
    fclose($this->file);
    unset($this->fileName);
    unset($this->file);
    }
    }
    /**
    * 写入数据
    *
    * @access public
    * @param mixed $str
    * @return mixed
    */
    public function write($str)
    {
    $falg = false;
    if(is_writeable($this->fileName) && flock($this->file, LOCK_EX | LOCK_NB)){
    if(is_object($str) || is_array($str)) $str = serialize($str);
    $flag = fwrite($this->file,$str)>0?true:false;
    }
    unset($str);
    flock($this->file, LOCK_UN | LOCK_NB);
    return $flag;
    }
    /**
    * 读取数据
    *
    * @access public
    * @return mixed
    */
    public function read()
    {
    $contents = fread($this->file, filesize($this->fileName));
    $tem = substr($contents,0,10);
    if(preg_match('/^[Oa]:d+:.*/',$tem)){
    $contents = unserialize($contents);
    }
    return $contents;
    }
    /**
    * 读取指定的一行记录
    *
    * @access public
    * @param int $start 开始位置
    * @param int $len
    * @return mixed
    */
    public function gets($start=0,$len=1)
    {
    if($start<=0)$start = 0;
    if($len<1) $len = 1;
    $end = $start+$len;
    $contents='';
    for($i = 0; !feof($this->file) && $i<$end-1;$i++){
    if($i >= $start-1)$contents.="line: ".($i+1)." ".fgets($this->file);
    else fgets($this->file);
    }
    return $contents;
    }
    /**
    * 取得文件内容
    *
    * @access public
    * @param mixed $fileName
    * @return mixed
    */
    public static function getContents($fileName)
    {
    return file_get_contents($fileName);
    }
    /**
    * 写入文件内容
    *
    * @access public
    * @param mixed $fileName
    * @param mixed $contents
    * @return mixed
    */
    public static function putContents($fileName,$contents)
    {
    $fileName = str_replace('/',DIRECTORY_SEPARATOR, $fileName);
    if(!file_exists($fileName)) self::mkdir(dirname($fileName));
    return file_put_contents($fileName,$contents);
    }
    /**
    * 创建目录,实现多级目录的创建
    *
    * @access public
    * @param mixed $dir
    * @param int $right
    * @return mixed
    */
    public static function mkdir($dir,$right=0777)
    {
    return is_dir($dir) || (self::mkdir(dirname($dir)) && mkdir($dir, $right));
    }
    /**
    * 删除目录下的所有文件
    *
    * @access public
    * @param mixed $dir
    * @return mixed
    */
    public static function rmdir($dir)
    {
    if (!file_exists($dir)) return true;
    if (!is_dir($dir) || is_link($dir)) return unlink($dir);
    foreach (scandir($dir) as $item) {
    if ($item == '.' || $item == '..') continue;
    if (!self::rmdir($dir . "/" . $item)) {
    chmod($dir . "/" . $item, 0777);
    if (!self::rmdir($dir . "/" . $item)) return false;
    };
    }
    return rmdir($dir);
    }
    /**
    * 目录复制功能
    *
    * @access public
    * @param mixed $source 源目录
    * @param mixed $dest 目标目录
    * @param bool $oncemore
    * @return boolean
    */
    public static function xcopy($source, $dest ,$oncemore=true)
    {
    if (!file_exists($source)){
    trigger_error("$source is not exist!",E_ERROR);
    }
    if (is_dir($source)){
    if (file_exists($dest) && !is_dir($dest)){
    trigger_error("$dest is not a dir",E_ERROR);
    }
    if (!file_exists($dest)){
    self::mkdir($dest,0777);
    }
    $od = opendir($source);
    while ($one = readdir($od)){
    if ($one=="." || $one==".."){
    continue;
    }
    $result = self::xcopy($source.DIRECTORY_SEPARATOR.$one, $dest.DIRECTORY_SEPARATOR.$one, $oncemore);
    if ($result !== true){
    return $result;
    }
    }
    closedir($od);
    }else{
    if (file_exists($dest) || is_dir($dest) ){
    if ( func_num_args()>2 || $oncemore===true ){
    trigger_error("$dest is not a dir",E_ERROR);
    }
    $result = self::xcopy($source, $dest.DIRECTORY_SEPARATOR.basename($source), $oncemore);
    if ( $result !== true ){
    return $result;
    }
    }else{
    if(!file_exists(dirname($dest))) self::mkdir(dirname($dest));
    copy($source, $dest);
    touch($dest, filemtime($source));
    }
    }
    return true;
    }
    /**
    * socket 功能访问
    *
    * @access public
    * @param mixed $url
    * @param int $limit
    * @param string $post
    * @param string $cookie
    * @param string $ip
    * @param int $timeout
    * @param bool $block
    * @return mixed
    */
    public static function socket($url, $limit = 0, $post = '', $cookie = '', $ip = '', $timeout = 20, $block = TRUE)
    {
    $return = '';
    $matches = parse_url($url);
    !isset($matches['host']) && $matches['host'] = '';
    !isset($matches['path']) && $matches['path'] = '';
    !isset($matches['query']) && $matches['query'] = '';
    !isset($matches['port']) && $matches['port'] = '';
    $host = $matches['host'];
    $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
    $port = !empty($matches['port']) ? $matches['port'] : 80;
    if($post){
    $out = "POST $path HTTP/1.0 ";
    $out .= "Accept: */* ";
    $out .= "Accept-Language: zh-cn ";
    $out .= "Content-Type: application/x-www-form-urlencoded ";
    $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT] ";
    $out .= "Host: $host ";
    $out .= 'Content-Length: '.strlen($post)." ";
    $out .= "Connection: Close ";
    $out .= "Cache-Control: no-cache ";
    $out .= "Cookie: $cookie ";
    $out .= $post;
    }else{
    $out = "GET $path HTTP/1.0 ";
    $out .= "Accept: */* ";
    $out .= "Accept-Language: zh-cn ";
    $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT] ";
    $out .= "Host: $host ";
    $out .= "Connection: Close ";
    $out .= "Cookie: $cookie ";
    }
    $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
    if(!$fp){
    return '';
    }else{
    stream_set_blocking($fp, $block);
    stream_set_timeout($fp, $timeout);
    @fwrite($fp, $out);
    $status = stream_get_meta_data($fp);
    if(!$status['timed_out']){
    while (!feof($fp)){
    if(($header = @fgets($fp)) && ($header == " " || $header == " "))break;
    }
    $stop = false;
    while(!feof($fp) && !$stop){
    $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
    $return .= $data;
    if($limit){
    $limit -= strlen($data);
    $stop = $limit <= 0;
    }
    }
    }
    @fclose($fp);
    return $return;
    }
    }

    /**
    * curl 功能
    *
    * @access public
    * @param mixed $url
    * @param array $conf
    * @return mixed
    */
    public static function curl_open($url, $conf = array())
    {
    if(!function_exists('curl_init') or !is_array($conf)) return FALSE;
    $post = '';
    $purl = parse_url($url);
    $arr = array(
    'post' => FALSE,
    'return' => TRUE,
    'cookie' => APP_ROOT.'data/cookie.txt',);
    $arr = array_merge($arr, $conf);
    $ch = curl_init();

    if($purl['scheme'] == 'https'){
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    }

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, $arr['return']);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $arr['cookie']);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $arr['cookie']);
    if($arr['post'] != FALSE){
    curl_setopt($ch, CURL_POST, TRUE);
    if(is_array($arr['post'])){
    $post = http_build_query($arr['post']);
    } else {
    $post = $arr['post'];
    }
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
    }
    }
  • 相关阅读:
    DevOps Workshop 研发运维一体化(北京第二场) 2016.04.27
    DevOps Workshop 研发运维一体化(成都站) 2016.05.08
    TFS 2015 生成不输出任何结果
    挂起的更改中的“解析”是什么意思?原来是微软错误的翻译
    微软研发流程(ALM)管理培训会议(比亚迪汽车)
    TFS实战培训
    【实战TFS】【QQ群】了解别人是如何使用TFS的
    DevOps Workshop 研发运维一体化(广州站)
    制作Visual Studio 2017 (VS 2017) 离线安装包
    在每页(分页)报表中重复显示标题
  • 原文地址:https://www.cnblogs.com/csjoz/p/7244016.html
Copyright © 2011-2022 走看看