分享一个非常实用的代码查看工具

2024-06-19 07:18

本文主要是介绍分享一个非常实用的代码查看工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

复杂的网站目录结构,想找个文件或模块,忘记在哪里了,或者陌生的目录结构,伤不起啊。。。
干脆为自己打造一个实用的小工具,对于需要研究discuz等优秀网站系统的cooder会有所帮助
  1. <?php
  2. /*==================================================================*/
  3. /* 文件名:scandir.php */
  4. /* 概要: 目录文件遍历并生成文件树. */
  5. /* 作者: 翻身的咸鱼 */
  6. /* 创建时间: 2012-04-20 */
  7. /* 最后修改时间:2012-04-26 */
  8. /* copyright (c)2012 15053884@qq.com */
  9. /*==================================================================*/
  10. $startTime = microtime(true);
  11. ?>
  12. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  13. <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="zh-CN" style="zoom: 100%; ">
  14. <head>
  15. <title>目录文件遍历并生成文件树</title>
  16. <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
  17. <style>
  18. #form{
  19. width:650px;
  20. float:left;
  21. border:1px solid gray;
  22. padding:10px;
  23. margin:10px;
  24. font-size:16px;
  25. }
  26. #note{
  27. line-height:35px;
  28. }
  29. #exists{
  30. float:left;
  31. width:500px;
  32. border:1px solid gray;
  33. position:absolute;
  34. left:700px;
  35. top:73px;
  36. padding:10px;
  37. background:#cccccc;
  38. }
  39. #tree{
  40. border:1px solid gray;
  41. width:97%;
  42. float:left;
  43. padding:10px;
  44. margin:10px;
  45. }
  46. a{
  47. text-decoration:none;
  48. }
  49. input{
  50. font-size:16px;
  51. }
  52. .note{
  53. padding:10px;
  54. color:red;
  55. border:1px solid gray;
  56. background:#cccccc;
  57. }
  58. .message{
  59. padding:10px;
  60. border:1px solid gray;
  61. background:#cccccc;
  62. }
  63. </style>
  64. </head>
  65. <body bgcolor="#c0dcc0">
  66. <h3><center>目录文件遍历并生成文件树-->目录文件,一目了然</center></h3>
  67. <div id="form">
  68. <form action="" method="POST">
  69. <div style="height:35px;line-height:35px;">
  70. 输入文件夹路径: <input type="text" name="path" value="" size="50">
  71. <input type="hidden" name="rescan" value="false">
  • <div id="note">
  • 格式范例:D:/root/discuz 或 D:\root\discuz<br />[注意:不要挑战文件超过<font color="red">3万个</font>的超级目录。否则...]
  • <hr />
  • <div style="height:35px;line-height:35px;">
  • 输入txt目录文件名:<input type="text" name="dirfile" value="" size="50">
  • <div id="note">
  • 格式范例:D:/root/scandir/D--root-discuz.txt
  • <div style="width:100%;text-align:right">
  • <input type="submit" name="submit" value="创建并显示文件树">
  • <a href="http://192.168.60.7/scandir/scandir.rar">下载此工具
  • </form>
  • <div id="exists">已经存在的目录树文件:<br />
  • <?php
  • $txtfile = treeFileGet();
  • $filenames = getTxtName($txtfile);
  • for($i=0; $i<count($filenames); $i++){
  • $url = makeTxtUrl($filenames[$i]);
  • $urls .= $url;
  • }
  • echo $urls;
  • ?>
  • <div id="tree">
  • <?php
  • if(trim($_POST["path"])!=""){
  • $file_path = rtrim(trim(str_replace("\\\\","/",$_POST["path"])),"/");
  • if(is_dir($file_path)){
  • $file_input = makeTxtName($file_path);
  • $txtfile = treeFileGet();
  • if(!in_array($file_input,getTxtName($txtfile))){
  • @dirScan($file_path,$file_input);
  • }else{
  • echo "<div class='note'>注意:该目录已经扫描过了!!!!!!!<form action='' method='POST'><input type='hidden' name='path' value=".$file_path."><input type='submit' name='submit' value='重新扫描'></form>";
  • }
  • if($_POST["rescan"]=="true"){
  • unlink($file_input);
  • @dirScan($file_path,$file_input);
  • }
  • $dirs = pathGet($file_input);
  • $file_num = getFileNum($dirs);
  • $dir_num = getDirNum($dirs);
  • $dir_path = makeDirPath($file_input);
  • echo "<div class='message'>文件夹:<font color='red'>".$dir_path."</font> 文件夹数:<font color='red'>".$dir_num."</font> 文件数:<font color='red'>".$file_num."</font>";
  • makeDirTree($dirs);
  • }else{
  • $info = "输入的路径<font color='red'>".$file_path."</font>不是合法路径或目录树文件不存在,请检查后重新输入!";
  • message($info);
  • }
  • }
  • if(trim($_POST["dirfile"])!=""||$_GET["fn"]!=""){
  • $file_path = trim($_POST["dirfile"]);
  • $file_input = $_POST["dirfile"] ? $_POST["dirfile"] : $_GET["fn"];
  • $path = str_replace("\\","/",dirname(__FILE__))."/".$file_input;
  • if(is_file($path)){
  • $dirs = pathGet($file_input);
  • $file_num = getFileNum($dirs);
  • $dir_num = getDirNum($dirs);
  • $dir_path = makeDirPath($file_input);
  • echo "<div class='message'>文件夹:<font color='red'>".$dir_path."</font> 文件夹数:<font color='red'>".$dir_num."</font> 文件数:<font color='red'>".$file_num."</font>";
  • makeDirTree($dirs);
  • }else{
  • $info = "输入的路径<font color='red'>".$file_input."</font>不是合法路径或目录树文件不存在,请检查后重新输入!";
  • message($info);
  • }
  • }
  • $stopTime = microtime(true);
  • $timer = round(($stopTime-$startTime),4);
  • echo "页面运行时间:".$timer."秒";
  • /*递归方式,遍历目录至文件,并写入文件,每行为一个目录或文件*/
  • function dirScan($file_path,$file_input){
  • $handle = opendir($file_path);
  • $i = 0;
  • while($files=readdir($handle)){
  • if($files != "." && $files != ".."){
  • $paths = $file_path."/".$files;
  • $hand = fopen($file_input,"a+");
  • $in_write = $paths."\r\n";
  • fwrite($hand,$in_write);
  • dirScan($paths,$file_input);
  • }
  • }
  • closedir($handle);
  • }
  • /*按行读取文件,返回以每行内容为值的数组,传入存储数据的文件名,返回$path_get二维数组*/
  • function pathGet($file_input){
  • $path_get = array();
  • $handle = fopen($file_input,"r");
  • while(!feof($handle)){
  • $buffer = rtrim(fgets($handle,1024));
  • array_push($path_get,$buffer);
  • }
  • return $path_get;
  • fclose($handle);
  • }
  • /*获取目录,传入文件夹路径,返回$dir_name[]数组*/
  • function dirGet($dir_path){
  • if(is_dir($dir_path)){
  • $dir_name = explode("/",$dir_path);
  • }
  • return $dir_name;
  • }
  • /*获取文件名*/
  • function fileGet($file_path){
  • if(is_file($file_path)){
  • $file_name = explode("/",$file_path);
  • }
  • return $file_name;
  • }
  • /*生成目录树,传入路径数组,按照格式生成目录树*/
  • function makeDirTree($dirs = array()){
  • $location = strpos($dirs[0],"/")+1;
  • $filename = substr($dirs[0],$location);
  • $path = explode('/',$dirs[0]);
  • for($j=0; $j<count($path); $j++){
  • $space = @str_repeat(' ',$j-2);
  • $shu = @str_repeat('|',$j-2);
  • $k = $j-1>1 ? 1 : $j-1;
  • $shuheng = @str_repeat('|---',$k);
  • $location = strrpos($path[$j],"/")+1;
  • $filename = substr($path[$j],$location);
  • echo $shu.$space.$shuheng.$path[$j-1]."<br />";
  • }
  • for($i=0; $i<count($dirs); $i++){
  • $space = str_repeat(' ',count(explode('/',$dirs[$i]))-1);
  • $location = strrpos($dirs[$i],"/")+1;
  • $filename = substr($dirs[$i],$location);
  • $filesize = round(@filesize($dirs[$i])/pow(1024,1),2);
  • if(is_file($dirs[$i])){
  • echo "|".$space."|---<a href='highlight.php?fn=".$dirs[$i]."' title='点击查看源文件' target='_blank'>".$filename."(".$filesize."KB)<br />";
  • }else{
  • echo "|".$space."|---".$filename."<br />";
  • }
  • }
  • }
  • /*生成文件名*/
  • function makeTxtName($file_path){
  • $vowels = array("/",":");
  • $filename = str_replace($vowels,"-",$file_path).".txt";
  • return $filename;
  • }
  • /*获取已经存在的目录树文件*/
  • function treeFileGet(){
  • $file_path = str_replace("\\","/",dirname(__FILE__));
  • $exists = array();
  • $handle = opendir($file_path);
  • while($files=readdir($handle)){
  • $paths = $file_path."/".$files;
  • $location = strrpos($files,".")+1;
  • $exname = substr($files,$location);
  • if(is_file($paths) && $exname=="txt"){
  • array_push($exists,$paths);
  • }
  • }
  • return $exists;
  • closedir($handle);
  • }
  • /*获取TXT文件名*/
  • function getTxtName($txtfile){
  • $filenames = array();
  • for($i=0; $i<count($txtfile); $i++){
  • $location = strrpos($txtfile[$i],"/")+1;
  • $filename = substr($txtfile[$i],$location);
  • array_push($filenames,$filename);
  • }
  • return $filenames;
  • }
  • /*生成超链接*/
  • function makeTxtUrl($filename){
  • $filesize = round(filesize($filename)/pow(1024,1),2);
  • $url = "<a href='scandir.php?fn=".$filename."' >".$filename."(".$filesize."KB)<br />";
  • return $url;
  • }
  • /*获取文件数*/
  • function getFileNum($dirs){
  • $file_num = 0;
  • for($i=0; $i<count($dirs); $i++){
  • if(is_file($dirs[$i])){
  • $file_num++;
  • }
  • }
  • return $file_num;
  • }
  • /*获取文件夹数*/
  • function getDirNum($dirs){
  • $dir_num = 0;
  • for($i=0; $i<count($dirs); $i++){
  • if(is_dir($dirs[$i])){
  • $dir_num++;
  • }
  • }
  • return $dir_num;
  • }
  • /*生成目录路径*/
  • function makeDirPath($dir_path){
  • $dirpath = str_replace("-","/",str_replace("--",":/",$dir_path));
  • $dirpath = explode(".txt",$dirpath);
  • return $dirpath["0"]."/";
  • }
  • /*生成NOTE框*/
  • function message($info){
  • echo "<div class='message'>".$info."";
  • }
  • ?>
  • </body>
  • </html>

  • 复制代码
    1. <?php
    2. /*==================================================================*/
    3. /* 文件名:highlight.php */
    4. /* 概要: 代码加亮. */
    5. /* 作者: 翻身的咸鱼 */
    6. /* 创建时间: 2012-04-21 */
    7. /* 最后修改时间:2012-04-26 */
    8. /* copyright (c)2012 15053884@qq.com */
    9. /*==================================================================*/
    10. header("Content-Type:text/html;charset=gb2312");
    11. ini_set("memory_limit","100M");
    12. $filename = $_GET["fn"];
    13. $file_contents = file_get_contents($filename);
    14. echo "<h1>".$filename."文件源代码</h1>";
    15. echo iconv('utf-8', 'gb2312//IGNORE', prasePHPCode($file_contents));//编码转换
    16. function prasePHPCode($source_code){
    17. if (is_array($source_code)){
    18. return false;
    19. }
    20. $source_code = explode("\n", str_replace(array("\r\n", "\r"), "\n", $source_code));
    21. $line_count = 1;
    22. foreach ($source_code as $code_line){
    23. $formatted_code .= '<tr><td bgcolor="#efede8">'.$line_count.'</td>';
    24. $line_count++;
    25. if (ereg('<\?(php)?[^[:graph:]]', $code_line)){
    26. $formatted_code .= '<td bgcolor="#efede8">'. str_replace(array('<code>', '</code>'), '', highlight_string($code_line, true)).'</td></tr>';
    27. }else{
    28. $formatted_code .= '<td bgcolor="#efede8">'.ereg_replace('(<\?php )+', '', str_replace(array('<code>', '</code>'), '', highlight_string('<?php '.$code_line, true))).'</td></tr>';
    29. }
    30. }
    31. return '<table style="width:800px;font: 1em Consolas, \'andale mono\', \'monotype.com\', \'lucida console\', monospace;">'.$formatted_code.'</table>';
    32. }
    33. ?>

    原文地址:http://bbs.lampbrother.net/read-htm-tid-118290.html

    <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
    阅读(55) | 评论(0) | 转发(0) |
    0

    上一篇:战地日记PartI

    下一篇:让我们sy现实,让我们yy理想---谨以此文献给我最最可爱的奋斗在人生路上的兄弟们

    相关热门文章
    • 通讯录助手市场大战 触宝助手...
    • C++ 将unsigned char数组 ...
    • linux内核的一些预定义...
    • qpid service 的root引发的权...
    • 美国RT服务器租用仿牌网站不二...
    • IP Sec VPN与NAT破镜重圆
    • 网站导航
    • GoAgent图文设置教程
    • UT2.0正式版下载
    • tomcat6.0配置(含配置视频下载...
    • 大家都是用什么来管理hadoop集...
    • 网站被人挂了吗,添加了些程序...
    • Nginx如何保证不走宕机的那个...
    • 大家谈谈MYSQL客户端和服务器...
    • 以下代码运行后为何会输出5?...
    给主人留下些什么吧!~~
    评论热议

这篇关于分享一个非常实用的代码查看工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074357

相关文章

揭秘未来艺术:AI绘画工具全面介绍

📑前言 随着科技的飞速发展,人工智能(AI)已经逐渐渗透到我们生活的方方面面。在艺术创作领域,AI技术同样展现出了其独特的魅力。今天,我们就来一起探索这个神秘而引人入胜的领域,深入了解AI绘画工具的奥秘及其为艺术创作带来的革命性变革。 一、AI绘画工具的崛起 1.1 颠覆传统绘画模式 在过去,绘画是艺术家们通过手中的画笔,蘸取颜料,在画布上自由挥洒的创造性过程。然而,随着AI绘画工

墨刀原型工具-小白入门篇

墨刀原型工具-小白入门篇 简介 随着互联网的发展和用户体验的重要性越来越受到重视,原型设计逐渐成为了产品设计中的重要环节。墨刀作为一款原型设计工具,以其简洁、易用的特点,受到了很多设计师的喜爱。本文将介绍墨刀原型工具的基本使用方法,以帮助小白快速上手。 第一章:认识墨刀原型工具 1.1 什么是墨刀原型工具 墨刀是一款基于Web的原型设计工具,可以帮助设计师快速创建交互原型,并且可以与团队

[职场] 护理专业简历怎么写 #经验分享#微信

护理专业简历怎么写   很多想成为一名护理方面的从业者,但是又不知道应该怎么制作一份简历,现在这里分享了一份护理方面的简历模板供大家参考。   蓝山山   年龄:24   号码:12345678910   地址:上海市 邮箱:jianli@jianli.com   教育背景   时间:2011-09到2015-06   学校:蓝山大学   专业:护理学   学历:本科

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa