600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > php 操作文件大小辅助类

php 操作文件大小辅助类

时间:2021-09-06 15:37:55

相关推荐

php 操作文件大小辅助类

php教程|PHP源码

php 操作文件大小辅助类

php教程-PHP源码

这个类可以判断文件的大小,即使大于2GB,它可以使用不同的方法来确定一个大的文件。

电商平台java源码下载,vscode与gitee连接,ubuntu密码zlg,初次运行tomcat服务,调试爬虫,php temp,义马seo排名优化,微赞网站源码,html5 企业招聘 模板lzw

getFileSize($file);echo"

";var_dump($filesize);

isWindows = (strtoupper(substr(PHP_OS, 0, 3)) == WIN);}/** * Gets the size of the specified file* * @accesspublic * @paramstringThe file path * @paramboolWhether to format the file size in KB, MB, GB, TB * @return mixed*/public function getFileSize($file, $formatted = true) {// Set the path of the file$this->path = $file;// Check for a valid file path$this->__checkFilePath();// Get the file size in bytes$this->byteSize = (float) $this->__getByteSize();// If failed to get the file size or the file size is zero, return a blank resultif (!$this->byteSize) {if (!$formatted) {return 0;}// Return a blank array$blank_size = $this->__formatFileSize();return array(0, $blank_size[0], $blank_size[1]);}// Return the bytesize if no formatting is neededif (!$formatted) {return $this->byteSize;}// Return an array containing the file size informationreturn $this->__formatFileSize();}/** * Formats the file size in KB, MB, GB, TB units* * @accessprivate * @param void * @return arrayReturn arry containing the file size information*/private function __formatFileSize() {// If the file size is zero return a blank result$_size = $this->byteSize;if (!$_size || $_size < 0) {return array(0, B, array(0, B));}// If the file size is smaller than 1KBif ($_size <= 1024) {return array(0, 1 KB, array(1, KB));}// Set an array of all file size units$size_units = Array(B, KB, MB, GB, TB, PB, EB);// Set the initial unit to Bytes$unit = $size_units[0];// Loop through all file size unitsfor ($i = 1; ($i = 1024); $i++) {$_size = $_size / 1024;$unit = $size_units[$i];}// Set the number of digits after the decimal place in the resulted file size$round = 2;// If the file size is in KiloByte we do not need any decimal numbersif ($unit == KB) {$round = 0;}// Round the file size$formatted = round((float) $_size, $round);// Return the file size datareturn array($this->byteSize, $formatted ."". $unit, array($formatted, $unit));}/** * Chek if the file is exist* * @accessprivate * @param void * @return void*/private function __checkFilePath() {clearstatcache();if (!file_exists($this->path)) {throw new Exception("File not found at $this->path");}}/** * Gets the size of the specified file in bytes* * @accessprivate * @param void * @return stringThe file size in bytes*/private function __getByteSize() {// Try the php native filesize() function.$bytesize = @filesize($this->path);if (false !== $bytesize && $bytesize >= 0) {return $bytesize;}// If filesize() fails with larger files, try to get the size using curl module.$bytesize = $this->__useCurl();if ($bytesize) {return $bytesize;}// If curl fails to get the file size try using the php native seek function.$bytesize = $this->__useNativeSeek();if ($bytesize) {return $bytesize;}// If the native seek fails to get the file size and we are on windows try using Windows COM interface$bytesize = $this->__useCom();if ($bytesize) {return $bytesize;}// If all the above methods failed to get the file size try using external program (exec() function needed)$bytesize = $this->__useExec();if ($bytesize) {return $bytesize;}// Unable to get the file size in bytesthrow new Exception("Unable to get the file size for the file". $this->path ."!");}/** * Gets the file size using curl module* * @accessprivate * @param void * @returnmixedThe file size as string or false when fail or cUrl module not available * @see/manual/en/function.filesize.php#100434*/private function __useCurl() {// If the curl module is not available return falseif (!function_exists("curl_init")) {return false;}$ch = curl_init("file://". $this->path);curl_setopt($ch, CURLOPT_NOBODY, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HEADER, true);$data = curl_exec($ch);curl_close($ch);if ($data !== false && preg_match(/Content-Length: (d+)/, $data, $matches)) {return (string) $matches[1];}}/** * Gets the file size by using native fseek function* * @accessprivate * @param void * @returnmixedThe file size as string or false when fail * @see/manual/en/function.filesize.php#79023 * @see/manual/en/function.filesize.php#102135*/private function __useNativeSeek() {// This should work for large files on 64bit platforms and for small files every where$fp = @fopen($this->path,"rb");// If failed to open the file return falseif (!$fp) {return false;}flock($fp, LOCK_SH);// Seeks past the end-of-file$res = fseek($fp, 0, SEEK_END);if ($res === 0) {// Get the current position of the file pointer$pos = ftell($fp);flock($fp, LOCK_UN);fclose($fp);// $pos will be positive int if file is 2GB = 0) {return (string) $pos;}else {return sprintf("%u", $pos);}}else {flock($fp, LOCK_UN);fclose($fp);return false;}}/** * Gets the file size by using Windows COM interface* * @accessprivate * @param void * @returnmixedThe file size as string or false when fail or COM not available*/private function __useCom() {if (!$this->isWindows || !class_exists("COM")) {return false;}// Use the Windows COM interface$fsobj = new COM(Scripting.FileSystemObject);if (dirname($this->path) == .) {$this->path = ((substr(getcwd(), -1) == DIRECTORY_SEPARATOR) ? getcwd() . basename($this->path) : getcwd() . DIRECTORY_SEPARATOR . basename($this->path));}// Get the file data$f = $fsobj->GetFile($this->path);// Convert to stringreturn (string) $f->Size;}/** * Gets the file size by using external program (exec needed)* * @accessprivate * @param void * @return mixedThe file size as string or false when fail or or exec is disabled*/private function __useExec() {// If exeec is disable return falseif (!function_exists("exec")) {return false;}//Escape the file path string to be used as a shell argument$escapedPath = escapeshellarg($this->path);// If we are on Windowsif ($this->isWindows) {// Try using the NT substition modifier %~z$size = trim(exec("for %F in ($escapedPath) do @echo %~zF"));}// If other OS (*nix and MacOS)else {// If the platform is not Windows, use the stat command (should work for *nix and MacOS)$size = trim(exec("stat -c%s $escapedPath"));}// If the return is not blank, not zero, and is numberif ($size && ctype_digit($size)) {return (string) $size;}// An error has occuredreturn false;}}

移动侦测 源码,vlang重写vscode,ubuntu 完整名称,tomcat漏洞复现,sqlite无驱动,windows搭建apache服务器,qq微信第三方登录插件下载,前端框架和后端框架怎么合并,12306爬虫犯法,英雄连php培训,刷seo关键词优化,超级漂亮网站,建站网页用什么软件,dz模板仿制教程,html显示时间并刷新页面,新闻网站后台管理系统模板,phpwed小程序开发lzw

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。