“最难不过坚持”
本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作
有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339
- https://jueru.net/
-
- :weixiao:
-
- :shuijiao: :weiqu: :zhenbang: :leng:
-
- :yiwen: :yiwen: :yiwen: :yiwen:
-
- 这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
-
PHP虽然提供了 filesize、copy、unlink 等文件操作的函数,但是没有提供 dirsize、copydir、rmdirs 等文件夹操作的函数(rmdir也只能删除空目录)。所以只能手动编写这些函数,主要的技巧是通过递归将问题逐层分解,直到分解成可以直接解决的最小子问题。
查看文件夹大小
由于文件夹是没有大小的,平常所说的文件夹尺寸准确的说应该是文件夹中所有文件的总大小。所以只需要将文件夹逐层查找,统计每一层所包含的文件大小,最后将结果从最深的文件夹返回合并。
<?php /** * 文件夹大小 * @param $path * @return int */ function dirsize($path){ $size = 0; $handle = opendir($path); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_path = $path . '/' . $item; if (is_file($_path)) $size += filesize($_path); if (is_dir($_path)) $size += dirsize($_path); } closedir($handle); return $size; } $path = 'hah'; echo dirsize($path); // 11647393 ?>
复制文件夹
文件是可以复制的,文件夹是不能复制的(但可以创建),如果要达到复制文件夹的效果,就需要生成一个和原始文件夹相同目录结构的新文件夹,然后将文件按照原目录结构复制到新文件夹。按照递归的思想,不用一开始就生成完整的目录结构,只需要遍历当前目录,发现文件夹不存在再创建即可,然后再将文件复制到对应的文件夹。
<?php /** * 复制文件夹 * @param $source * @param $dest */ function copydir($source, $dest){ if (!file_exists($dest)) mkdir($dest); $handle = opendir($source); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_source = $source . '/' . $item; $_dest = $dest . '/' . $item; if (is_file($_source)) copy($_source, $_dest); if (is_dir($_source)) copydir($_source, $_dest); } closedir($handle); } $source = 'hah'; $dest = 'hah2'; copydir($source, $dest); ?>
删除文件夹
rmdir 只能删除空文件夹,而 unlink 可以删除文件。于是删除文件夹的思路就有了,先通过 unlink 删除目录下的所有文件,再通过 rmdir 删除剩下的空文件夹。使用递归处理的逻辑是,找到当前目录下所有文件和文件夹,删除其中的所有文件,再遍历下一层目录删除所有文件……直至最后一层目录,此时整个文件夹已经没有文件了(但是文件夹还在),此时递归开始返回,每向上返回一层就删除这一层的所有空目录,当返回到最顶层的时候,递归就结束了,同时所有的文件和目录也都删除了。
<?php /** * 删除文件夹 * @param $path * @return bool */ function rmdirs($path){ $handle = opendir($path); while (($item = readdir($handle)) !== false) { if ($item == '.' || $item == '..') continue; $_path = $path . '/' . $item; if (is_file($_path)) unlink($_path); if (is_dir($_path)) rmdirs($_path); } closedir($handle); return rmdir($path); } $path = 'hah2'; rmdirs($path); ?>
剪切文件夹
rename 是 PHP Filesystem 函数中的一个特例,它既可以重命名文件,也可以重命名文件夹。如果你为重命名文件传入不同的路径,它又成了剪切函数,堪称文件函数中小而美的典范。
<?php /** * @param $oldname 必需。规定要重命名的文件或目录。 * @param $newname 必需。规定文件或目录的新名称。 * @param $context 可选。规定文件句柄的环境。 */ $oldname = 'hah/1.mp4'; $newname = 'hah2/1.mp4'; // 如果hah2文件夹不存在,会出错 rename($oldname,$newname); ?>

