【发布时间】:2011-08-02 16:57:39
【问题描述】:
不包括尚未与 PHP 捆绑的任何 3rd 方扩展,是否有任何方法可以确定 Windows 机器上的给定文件是否为快捷方式/链接?内置函数 is_link 仅适用于 *nix 平台,因此在 Windows 机器上运行的以下内容不会返回预期结果:
$filePath = 'C:\somefile.lnk'; // path to shortcut file
var_dump(is_file($filePath)); // returns true
var_dump(is_link($filePath)); // returns false
这会在尝试使用快捷方式的目标文件时导致问题,并最终对快捷方式文件本身进行操作。快捷方式的前四个字节似乎通常是4c 00 00 00。但这个开始字节序列总是仅限于快捷方式似乎并不可靠。
附带问题: 如何从快捷方式文件中提取目标路径? (注:readlink() 似乎返回了快捷方式文件本身的路径)。
编辑:只是为了省点麻烦,根据PHP使用finfo或mime_content_type的快捷方式文件的mime类型是“application/octet-stream”,实际上不会帮助。
【问题讨论】:
-
在
is_link页面上,Windows workaround。 -
此外,windows .lnk 文件只是由 Windows shell 解释的桌面文件。 NTFS 有一些真正的符号链接和硬链接支持。 (不确定
is_link是否与他们打交道。) -
@Tim Cooper:我看到了。我认为这是一次伟大的尝试,但对于该用户如何设计该解决方案缺乏任何形式的引用。我还找到了几个对快捷方式文件进行逆向工程的示例,但没有官方的。也许还有更具体的事情要做?