• 文件处理类


    <?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;
    }
    }
  • 相关阅读:
    mysql的CURRENT_TIMESTAMP【转】
    php开发中emoji表情的问题3种方法轻松处理【转】
    JavaScript 正则表达式【转】
    使用 内置函数strtok()函数实现 loadrunner 字符串替换
    python打开文件失败,报错'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence
    txt文本程序 打开python文件 另存为原来的文件名,不能覆盖原来的文件解决
    linux 文件解压
    tar.xz 解压
    设置xampp开机自动启动
    Can’t connect to local MySQL server through socket的解决方法
  • 原文地址:https://www.cnblogs.com/csjoz/p/7244016.html
Copyright © 2020-2023  润新知