
文件目錄如上
1、文件處理擴展包File.php
```
<?php
namespace files;
class File {
/**
* 判斷文件是否存在
*
* @name f_has
* @param string filename 文件路徑
* @return bool
*/
public function f_has($filename = '') {
$is = is_file($filename);
return $is ? 1 : 0;
}
/**
* 判斷文件夾是否存在
*
* @name d_has
* @param string dir 目錄
* @return bool
*/
public function d_has($dir = '') {
$is = is_dir($dir);
return $is ? 1 : 0;
}
/**
* 創建目錄
*
* @name d_create
* @param string dir 目錄
* @return bool
*/
public function d_create($dir = '') {
if (!$dir || $dir == "." || $dir == "./")
return true;
if (!$this -> d_has($dir)) {
$is = mkdir($dir, 0777, true);
return $is ? 1 : 0;
}
return 1;
}
/**
* 文件寫入
*
* @name write
* @param string filename 文件路徑
* @param string data 文件中要寫入的內容
* @return bool
*/
public function write($filename = '', $data = '') {
$pathinfo = pathinfo($filename);
$dir = $pathinfo['dirname'];
$file = $pathinfo['basename'];
if (!$this->d_has($dir)) {
mkdir($dir, 0777, true);
}
$is = file_put_contents($filename, $data);
return $is ? 1 : 0;
}
/**
* 文件讀取
*
* @name read
* @param string filename 文件路徑
* @return string
*/
public function read($filename = '') {
if ($this->f_has($filename)) {
$content = file_get_contents($filename);
return $content;
} else {
return '';
}
}
/**
* 讀取文件內容,將讀取的內容放入數組中,每個數組元素為文件的一行,內容包括換行
*
* @name read_array
* @param string filename 文件路徑
* @return array
*/
public function read_array($filename = "") {
if ($this->f_has($filename)) {
return file($filename);
} else {
return array();
}
}
public function read_line_trim($filename = "", $tp = "#", $line_size = '1024')
{
$arr_ = [];
if ($this->f_has($filename)) {
$handle = fopen($filename, "r");
while (!feof ($handle)) {
$buffer = fgets($handle, $line_size);
$f_str = trim($buffer);
if (!empty($f_str) && substr($f_str, 0, 1 ) != $tp) {
array_push($arr_,$f_str);
}
}
fclose($handle);
}
return $arr_;
}
/**
* 文件刪除
*
* @name f_delete
* @param string filename 文件路徑
* @return array
*/
public function f_delete($filename = "") {
if ($this -> f_has($filename)) {
return @unlink($filename);
}
}
/**
* 文件夾刪除
*
* @name d_delete
* @param string filename 文件路徑
* @return array
*/
public function d_delete($dir = "") {
// 先刪除目錄下的文件:
if (!$this->d_has($dir))
return true;
$dh = opendir($dir);
while ($file = readdir($dh)) {
if ($file != "." && $file != "..") {
$fullpath = $dir . DIRECTORY_SEPARATOR . $file;
if (!is_dir($fullpath)) {
@unlink($fullpath);
} else {
$this -> d_delete($fullpath);
}
}
}
closedir($dh);
// 刪除當前文件夾:
if (rmdir($dir)) {
return true;
} else {
return false;
}
}
/**
* 拷貝文件或目錄
*
* @name copy_
* @param string $new 拷貝目錄或者文件
* @param string $old 目標目錄或者文件
* @param $type $type 0為刪除拷貝目錄 1為不刪除拷貝目錄
* @return bool
*/
public function copy_($new, $old, $type = 1) {
$is = false;
if (!file_exists($old) && !is_dir($old))
return false;
$pathinfo_new = pathinfo($new);
$path = isset($pathinfo_new['extension']) ? $pathinfo_new['dirname'] : $new;
if (!is_dir($path))
mkdir($path, 0777, true);
if (is_file($old)) {
if (!isset($pathinfo_new['extension'])) {
$pathinfo = pathinfo($old);
$is = copy($old, $new . DIRECTORY_SEPARATOR . $pathinfo['basename']);
} else {
$is = copy($old, $new);
}
} else {
if (!isset($pathinfo_new['extension'])) {
$dir = scandir($old);
foreach ($dir as $filename) {
if (!in_array($filename, array('.', '..'))) {
if (is_dir($old . DIRECTORY_SEPARATOR . $filename)) {
$is = $this -> copy_($new . DIRECTORY_SEPARATOR . $filename, $old . DIRECTORY_SEPARATOR . $filename, $type);
if (!$is)
return false;
continue;
} else {
$is = copy($old . DIRECTORY_SEPARATOR . $filename, $new . DIRECTORY_SEPARATOR . $filename);
}
}
}
}
}
return $is;
}
/**
* 獲取目錄下的所有文件路勁 包括子目錄的文件
*
* @name get_all_dir
* @param string dir 文件夾路徑
* @return array
*/
public function get_all_dir($dir) {
$result = array();
$handle = opendir($dir);
if ($handle) {
while (($file = readdir($handle)) !== false) {
if ($file != '.' && $file != '..') {
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($cur_path)) {
$files = $this -> get_all_dir($cur_path);
if ($files)
$result = $result ? array_merge($result, $files) : $files;
} else {
$result[] = $cur_path;
}
}
}
closedir($handle);
}
return $result;
}
/**
* 判斷文件或者文件夾是否有對象權限
*
* @name is_write
* @param string $file 文件或者文件夾路徑
* @return int
*/
function is_write($file) {
$pathinfo = pathinfo($file);
$dir = $pathinfo['dirname'];
$extension = isset($pathinfo_new['extension']) ? $pathinfo_new['extension'] : NULL;
if ($extension) {
$is = $this -> write($file);
return $is ? 1 : 0;
} else {
$filename = substr($file, 0, 1) == "/" ? $file . "is_write_000000123456789.txt" : $file . DIRECTORY_SEPARATOR . "is_write_000000123456789.txt";
$is = $this -> write($filename, 'OK');
if ($is) {
$this -> f_delete($filename);
return 1;
} else {
return 0;
}
}
}
}
```
2、壓縮包處理擴展包Zip.php
```
<?php
namespace files;
class Zip
{
/**
* 初始化函數
*
* @name __construct
* @return void
*/
public function __construct()
{
$this->zip = new \ZipArchive();
$this->F = new \files\File();
}
/**
* 壓縮單個文件
*
* @name add_file
* @param string $filename 被壓縮的文件
* @param string filename_zip 在壓縮文件中的文件名稱,如果不設置為壓縮文件的名稱,默認不設置
* @return int 1 or 0
*/
public function add_file($filename, $filename_zip = null)
{
if ($filename_zip) {
$is = $this->zip->addFile($filename, $filename_zip);
} else {
$is = $this->zip->addFile($filename);
}
return $is ? 1 : 0;
}
/**
* 壓縮整個目錄
*
* @name zip
* @param string $dir 壓縮目錄路徑
* @param string $zipfilename 壓縮文件的文件名,包括路徑
* @return int 1 or 0
*/
public function zip($dir, $zipfilename = 'zip.zip')
{
$pathinfo = pathinfo($zipfilename);
if ($this->F->d_create($pathinfo['dirname'])) {
// ZipArchive::OVERWRITE 如果文件存在則覆蓋
if ($this->zip->open($zipfilename, \ZipArchive::CREATE) === TRUE) {
$this->createZip($dir);
}
return $this->zip->close();
}
return 0;
}
/**
* 解壓縮文件
*
* @name unzip
* @param string $zipfilename 解壓縮的文件
* @param string $path 解壓縮后的路徑
* @return int 1 or 0
*/
public function unzip($zipfilename = 'zip.zip', $path = '')
{
if ($this->zip->open($zipfilename) === true) {
$file_tmp = @fopen($zipfilename, "rb");
// 只讀15字節 各個不同文件類型,頭信息不一樣。
$bin = fread($file_tmp, 15);
fclose($file_tmp);
// 只針對zip的壓縮包進行處理
if (true === $this->getTypeList($bin)) {
$result = $this->zip->extractTo($path);
$this->zip->close();
return $result ? 1 : 0;
} else {
return 0;
}
}
return 0;
}
/**
* 添加目錄到zip對象
*
* @name createZip
* @param string $dir 壓縮目錄路徑
* @param string $parent 上級目錄
* @return int
*/
public function createZip($dir, $parent = null)
{
$handle = opendir($dir);
if ($handle) {
try {
while ( ( $file = readdir ( $handle ) ) !== false ) {
if ( $file != '.' && $file != '..') {
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if ( is_dir ( $cur_path ) ) {
$parentParam = $parent ? $parent . "/" . $file : $file;
$this->createZip($cur_path, $parentParam);
} else {
$filename_zip = $parent ? $parent . "/" . $file : $file;
$this->add_file($cur_path, $filename_zip);
}
}
}
closedir($handle);
return 1;
} catch(\Exception $e) {
return 0;
}
}
}
/**
* 獲取壓縮文件的列表
*
* @name get_list
* @param string $zipfilename 壓縮文件
* @return array
*/
public function get_list($zipfilename="zip.zip")
{
$file_dir_list = array();
$file_list = array();
if ($this->zip->open($zipfilename) == true) {
for ($i = 0; $i < $this->zip->numFiles; $i++) {
$numfiles = $this->zip->getNameIndex($i);
if (preg_match('/\/$/i', $numfiles)) {
$file_dir_list[] = $numfiles;
} else {
$file_list[] = $numfiles;
}
}
}
return array('files'=>$file_list, 'dirs'=>$file_dir_list);
}
/**
* 得到文件頭與文件類型映射表
*
* @name getTypeList
* @param string $bin 文件的二進制前一段字符
* @return bool
*/
public function getTypeList($bin)
{
$array = [
["504B0304", "zip"]
];
foreach ($array as $v) {
$blen = strlen(pack("H*", $v[0])); //得到文件頭標記字節數
$tbin = substr($bin, 0, intval($blen)); ///需要比較文件頭長度
if (strtolower($v[0]) == array_shift(unpack("H*", $tbin))) {
return true;
}
}
return true;
}
}
```
- 產品介紹
- 功能介紹
- 聯系合作
- 修訂記錄
- 環境安裝
- 依賴環境
- 依賴服務
- 前端環境
- 核心功能
- 流程引擎
- 流程編輯步驟
- 流程設計
- 業務表設計
- 表單設計
- 報表設計
- 節點配置
- 全局配置
- 規則引擎
- 模塊功能
- 系統管理
- 平臺架構
- 平臺(單位)管理
- 組織架構
- 用戶管理
- 角色管理
- 運維管理
- 菜單管理
- 流程管理
- 代碼管理
- 字典管理
- 車型庫管理
- 報表管理
- 產品管理
- 經銷商管理
- 數據字典
- 業務設置
- 業務報表設置
- 系統配置
- 微信小程序設置
- OCR識別
- 釘釘通知
- 釘釘登錄授權
- 云儲存設置
- 服務規劃
- 其他產品
- 教育點播
- 退役政務
- 三方報表
- 微信社群
- 場景名片
- 合同電子簽
- TP5實用封裝
- 通用封裝
- Export通用封裝
- Import通用封裝
- 配合Import通用封裝的ImportBaseVerify類
- Files通用封裝
- Directory通用封裝
- Pdf通用封裝
- Words通用封裝
- Nredis(redis封裝)
- ZipArchives壓縮zip文件封裝
- BarQrcode條形碼二維碼
- Publics公共方法封裝
- Curls(cUrl請求封裝)
- extend擴展開發
- 何時編寫擴展文件包
- 擴展文件包如何編寫
- 題外話
- 常用的compose安裝
- 一些建議及細節
- 實用工具
- 源碼分析
- 入口文件index.php
- think\Facade類詳解
- App對接Api設計
- 設計模式說明(為什么這么做)
- 代碼設計邏輯方案
- 數據庫備份
- 實用案例
- 如何“偷”JAVA代碼
- SAAS接口設計
- 1、創建saas基類文件
- 2、初始化控制器服務
- 3、身份校驗
- 4、創建登錄控制器
- 5、實現登錄服務層
- 6、服務層繼承的service類
- 7、該案例的完整模塊包
- 校驗型規則校驗擴展包
- 自定義規則解析(可供參考)
- 通用文件擴展包(File,Zip)
- PHP實現word轉PDF功能環境搭建
- 日志通用擴展包
- 定時任務
- PHP視頻處理器安裝環境搭建
- 日常開發問題記錄
- 1、mysql存儲中帶一些不可見字符
- 2、php開發規范校驗及修復