FileSystemFinder: 一个可以使用通配符和正则表达式逐层获取文件和目录列表的 PHP 类库
其实这个 PHP 类库也是去年十一期间写的第一个版本,但那时还没现在这么完整。今天整理代码,并写了示例程序后就推送到 github 上去了,在:

https://github.com/wudicgi/file-system-finder

示例程序如下:
  1. <?php
  2. include_once 'FileSystemFinder.php';
  3.  
  4. // List files using static method FileSystemFinder::find()
  5.  
  6. $filelist = FileSystemFinder::find('C:/php/ext/php_pdo_*.dll');
  7.  
  8. print_r($filelist);                 // via __debugInfo()
  9. echo "\r\n";
  10.  
  11.  
  12. // List files using file() method with a wildcard pattern
  13.  
  14. $filelist = (new FileSystemFinder('C:/php/ext'))
  15.     ->file('php_pdo_*.dll');
  16.  
  17. print_r($filelist->toArray());      // using toArray()
  18. echo "\r\n";
  19.  
  20.  
  21. // List files using dir() and file() method with wildcard and regex patterns
  22.  
  23. $filelist = (new FileSystemFinder('C:/php'))
  24.     ->dir('dev|ext')                                    // using default wildcard matcher
  25.     ->file('/[0-9]/', FileSystemFinder::REGEX_MATCHER); // using the specified regex matcher
  26.  
  27. foreach ($filelist as $path) {      // via SeekableIterator interface
  28.     echo "$path\r\n";
  29. }
  30. echo "\r\n";
  31.  
  32.  
  33. // A combination of using both static and non-static method
  34.  
  35. $filelist = FileSystemFinder::find('C:/php/dev|ext', FileSystemFinder::DIR_ONLY);
  36. print_r($filelist);
  37.  
  38. $filelist = $filelist->file('/[0-9]/', FileSystemFinder::REGEX_MATCHER);
  39. print_r($filelist);
  40.  
  41. echo "\r\n";
  42.  
  43.  
  44. // List files using wfio extension
  45.  
  46. if (extension_loaded('wfio')) {
  47.     $filelist = FileSystemFinder::find('wfio://E:/Music/* 笑话/* 欢乐剧场/??? *大*.wma');
  48.  
  49.     for ($i = 0; $i < count($filelist); $i++) {     // via Countable interface
  50.         echo "[$i] => $filelist[$i]\r\n";           // via ArrayAccess interface
  51.     }
  52. } else {
  53.     echo "The wfio extension is not loaded.\r\n";
  54. }
  55.  
  56. ?>

上述代码的输出为:
FileSystemFinder Object
(
    [0] => C:/php/ext/php_pdo_firebird.dll
    [1] => C:/php/ext/php_pdo_mysql.dll
    [2] => C:/php/ext/php_pdo_oci.dll
    [3] => C:/php/ext/php_pdo_odbc.dll
    [4] => C:/php/ext/php_pdo_pgsql.dll
    [5] => C:/php/ext/php_pdo_sqlite.dll
)

Array
(
    [0] => C:/php/ext/php_pdo_firebird.dll
    [1] => C:/php/ext/php_pdo_mysql.dll
    [2] => C:/php/ext/php_pdo_oci.dll
    [3] => C:/php/ext/php_pdo_odbc.dll
    [4] => C:/php/ext/php_pdo_pgsql.dll
    [5] => C:/php/ext/php_pdo_sqlite.dll
)

C:/php/dev/php5ts.lib
C:/php/ext/php_bz2.dll
C:/php/ext/php_gd2.dll
C:/php/ext/php_oci8_12c.dll
C:/php/ext/php_sqlite3.dll

FileSystemFinder Object
(
    [0] => C:/php/dev
    [1] => C:/php/ext
)
FileSystemFinder Object
(
    [0] => C:/php/dev/php5ts.lib
    [1] => C:/php/ext/php_bz2.dll
    [2] => C:/php/ext/php_gd2.dll
    [3] => C:/php/ext/php_oci8_12c.dll
    [4] => C:/php/ext/php_sqlite3.dll
)

[0] => wfio://E:/Music/04 笑话/01 欢乐剧场/036 武大日记.wma
[1] => wfio://E:/Music/04 笑话/01 欢乐剧场/087 大学趣闻.wma
[2] => wfio://E:/Music/04 笑话/01 欢乐剧场/109 武大郎后传.wma
[3] => wfio://E:/Music/04 笑话/01 欢乐剧场/117 孙大圣“评职”申请书.wma
[4] => wfio://E:/Music/04 笑话/01 欢乐剧场/120 肖大明白.wma
[5] => wfio://E:/Music/04 笑话/01 欢乐剧场/156 吃大户.wma
[6] => wfio://E:/Music/04 笑话/01 欢乐剧场/160 说大道小.wma
[7] => wfio://E:/Music/04 笑话/01 欢乐剧场/168 四大…….wma
[8] => wfio://E:/Music/04 笑话/01 欢乐剧场/197 过大年.wma
当前语言: 中文 (简体) · also available in: English
配置出一个更好用的 Windows 8.1
以下配置过程是我在配置 Windows 8.1 64-bit 系统的过程中记录下来的,仅供参考。

1. UAC

  • 开始 -> 控制面板 -> 用户帐户 -> 改变用户帐户控制设置
  • 选择“从不通知”

2. DPI

  • 右键点击桌面 -> 屏幕分辨率 -> 放大或缩小文本和其他项目
  • 选择“中等 - 125%”
  • 选中“让我选择一个适合我的所有显示器的缩放级别”
  • 登出并重新登入
  • 右键点击桌面 -> 查看 -> 小图标

3. 动画效果

  • 开始 -> 控制面板 -> 系统 -> 高级系统设置
  • 高级 -> 性能 -> 设置... -> 视觉效果 -> 取消选中所有动画效果

4. Classic Shell

  • 安装 Classic Shell (不安装其中的 Classic IE9 和 Update) (下载)
  • 配置各项,或导入配置文件
  • 资源管理器 -> 隐藏 Classic Explorer Bar

5. 7+ Taskbar Tweak

  • 安装 7+ Taskbar Tweak (下载)
  • 配置各项

6. 任务栏和导航属性

  • 右键点击任务栏 -> 属性
  • 任务栏 -> 选中“自动隐藏任务栏”
  • 任务栏 -> 选中“使用小任务栏按钮”
  • 任务栏 -> 任务栏按钮: 从不合并
  • 跳转列表 -> 取消选中“在跳转列表中存储并显示最近打开的项目”

7. 安装硬件驱动程序

8. 默认字体

  • 使用 Windows 8 Font Changer (下载) 修改默认字体为 Tahoma
  • 重启
  • 调节 ClearType

9. 区域选项

  • 开始 -> 控制面板 -> 区域
  • 短日期: yyyy-M-d
  • 一周的第一天: 星期日

10. 键盘快捷方式下划线

  • 开始 -> 控制面板 -> 轻松访问中心 -> 使键盘更易于使用
  • 选中“给键盘快捷方式和访问键加下划线”
  • 选中“防止将窗口移动到屏幕边缘时自动排列窗口”

11. 自动播放

  • 开始 -> 控制面板 -> 自动播放
  • 取消选中“为所有媒体和设备使用自动播放”
  • 每个选择框保持默认的“选择默认值”

  • 运行 gpedit.msc
  • 用户配置 -> 管理模板 -> Windows 组件 -> 自动播放策略 -> 关闭自动播放 -> 在所有驱动器上启用
  • 计算机配置 -> 管理模板 -> Windows 组件 -> 自动播放策略 -> 关闭自动播放 -> 在所有驱动器上启用

12. 内置的 CD 刻录功能

  • 运行 gpedit.msc
  • 用户配置 -> 管理模板 -> Windows 组件 -> Windows 资源管理器 -> 移除 CD 刻录功能 -> 启用

13. 临时文件目录 (可选)

  • 开始 -> 控制面板 -> 系统 -> 高级系统设置
  • 高级 -> 环境变量...
  • 设置 TEMP, TMP = F:\Temp
  • 清除原来的文件 (%USERPROFILE%\AppData\Local\Temp)

14. 文件夹内容识别

  • 运行 Restore_Default_Folder_Templates.bat (下载)
  • 运行 All_Folders_Use_General_Items_Folder_Template.bat (下载同上)

15. 隐藏库文件夹


16. 设置文件夹默认视图

17. Zip 文件夹

  • 导入 Disable_ZIP_Compressed_Folders.reg

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\CompressedFolder\CLSID]

[-HKEY_CLASSES_ROOT\SystemFileAssociations\.zip\CLSID]

  • 导入 Disable_CAB_Files.reg

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\CABFolder\CLSID]

[-HKEY_CLASSES_ROOT\SystemFileAssociations\.cab\CLSID]

18. 压缩软件

  • 安装 WinRAR 或 7-zip

19. 系统配置

  • 配置声音 (设置为无声)
  • 配置 Windows 颜色
  • 配置 Quick Launch Bar

20. 安装输入法

21. 语言设置

  • 开始 -> 控制面板 -> 语言
  • 高级设置 -> 切换输入法 -> 让我为每个应用窗口选择不同的输入法
  • 改变语言栏热键 -> 切换输入语言: Ctrl + Shift
  • 按下列截图配置 (对中文版 Win 8.1, 默认输入法需要选择英语,而不是推荐值):









22. AutoHotkey

  • 安装 AutoHotkey
  • 配置启动后加载如下脚本:

; Ctrl + Shift
^space::^shift

23. WinSAT 计划任务

  • 开始 -> 控制面板 -> 管理工具 -> 任务计划程序
  • 计划任务程序库 -> Microsoft -> Windows -> Maintenance
  • 右键点击 WinSAT,选择“禁用”

24. 设置电源选项
当前语言: 中文 (简体) · also available in: English
今天才知道 SysWOW64 是什么意思
现在平时很少有机会手动往 System32 目录里复制 dll 文件了。今天把 VC++ 2010 Debug 版的运行时 dll 文件复制到 System32 和 SysWOW64 目录后,运行程序还是报错。用 Dependency Walker 查看,发现这个 32 位的程序加载的是 64 位版本的 dll。

在网上一番搜索才知道,原来在 64 位 Windows 中,System32 目录下存放的都是 64 位的东西,而 SysWOW64 下存放的才是 32 位的东西。为了保持兼容性,System32 的名称就没改,而 SysWOW64 其实也没体现出来 32-bit Windows on 64-bit Windows,所以这两个文件夹的名称现在看着很容易让人糊涂。

文章就是这篇《什么是SysWow64》,推荐阅读一下。
当前语言: 中文 (简体)
PHP 语法高亮增强版的 Notepad++
十一期间寻找现用文本编辑器的替代品,看了一圈最后打算换用 Notepad++, 但是一开始用就发现它的语法高亮功能很弱,比如 PHP 语言的关键字和函数名都不能设置不同的高亮颜色。

经过一番搜索,得知 Notepad++ 所用的 Scintilla 编辑器组件对语法高亮的处理是 hard-coded 的,想增加一类关键词高亮类型得改 C++ 源代码。而且 PHP 的保留字和函数名一直混在一块,不能单独设颜色这个问题已经 9 年没解决了。

本来都打算放弃 Notepad++, 接着找商业软件去了。但是试用大名鼎鼎的 Sublime Text 后也仍然觉得不好用,就又回来考虑修改 Notepad++ 的源代码。经过 10 月 5 号一天的修改,已经基本上搞定 PHP 语法高亮的问题了,并且提交到了我在 github 上 fork 出来的项目上:

https://github.com/wudicgi/npp-customized

值得一提的是,其中 PHP 7 关键词和函数列表的提取,就是通过我的 HtmlMinerDocument 类库从 php.net 的在线文档中抓取的。待该关键词抓取工具的代码整理完毕后,我会把它也提交到 github 上去。

今天我又将最新的 v6.8.6 版本的代码合并到了我的修改分支上。

原版的 PHP 高亮效果是这样的:


我修改后的版本是这样的:


现在在语言格式设置中,可以为 PHP 的关键词 (WORD) 和函数名 (FUNCTION) 指定不同的颜色:

当前语言: 中文 (简体) · also available in: English
将 Windows 7 配置成 Windows 8.1 的样子
前两天给公司电脑的 Win 7 系统装上了个 Win 8.1 主题,现在看起来舒服多了。这么多年了,还是忍受不了 Win7 的默认主题。



这个主题的下载地址为:
http://www.askvg.com/download-windows-8-rtm-theme-for-windows-7/

如果除了主题还想换开始菜单按钮和登陆界面等地方的话,可以参考这篇文章:
http://www.askvg.com/transform-windows-7-into-windows-8-vnext-without-using-customization-pack/

可能是由于 Win 7 和 Win 8.1 的主题系统差异较小,这套主题的效果非常好,换上后看着很自然,不像以前我用过的 Windows XP 主题那样会感觉有点怪。
当前语言: 中文 (简体) · also available in: English
写了一个新的 PHP 类库: HtmlMinerDocument
十一期间写了一个新的 PHP 类库,通过它可以很方便的使用 CSS 选择器来提取网页中的元素。

现在已经上传到了 github 上,地址为:
https://github.com/wudicgi/html-miner-document

用法很简单,例如使用如下代码就能提取网易新闻首页头条新闻的标题和 URL:
  1. <?php
  2. include_once 'HtmlMinerDocument.php';
  3.  
  4. // Find all elements matching the given CSS selectors
  5.  
  6. $doc = new HtmlMinerDocument(file_get_contents('http://news.163.com/'));
  7.  
  8. $news_list = $doc->findAll('div.ns-wnews h3 a');
  9.  
  10. foreach ($news_list as $news) {
  11.     echo "$news[text] ($news[href])\r\n";
  12. }
  13.  
  14. echo "\r\n";
  15. ?>

使用如下代码就能获取 amobbs 全部帖汇总的帖子列表:
  1. <?php
  2. include_once 'HtmlMinerDocument.php';
  3.  
  4. // Find elements by group
  5.  
  6. $doc = new HtmlMinerDocument(file_get_contents('http://www.amobbs.com/forum-9892-1.html'));
  7.  
  8. $threads = $doc
  9.     ->findFirst('table#threadlisttableid')
  10.     ->findAll('tr')
  11.     ->findAllByGroup(array(
  12.         'title'         => 'th a.s',
  13.         'author'        => 'td.by cite a',
  14.         'last_reply'    => 'td.by em span'
  15.     ));
  16.  
  17. foreach ($threads as $thread) {
  18.     echo $thread['title']['text'];
  19.     echo ' by ' . $thread['author']['text'];
  20.     echo ' (' . $thread['last_reply']['text'] . ')';
  21.     echo "\r\n";
  22. }
  23. ?>
当前语言: 中文 (简体) · also available in: English
更多条目: [1] [2] [3] [4] [5] [6] ... [21]
« 上一页 · 下一页 »