【问题标题】:Can I get the short DOS name of a file from PHP?我可以从 PHP 中获取文件的短 DOS 名称吗?
【发布时间】:2009-06-16 22:30:05
【问题描述】:

我想将文件路径作为参数传递给 PHP 的可执行文件,并且文件路径可能包含空格。可执行文件似乎不处理参数周围的引号,所以我想也许我可以传递短 DOS 名称而不是长名称。

PHP 了解旧式 DOS 8.3 文件名吗?

【问题讨论】:

    标签: php dos


    【解决方案1】:

    php/win32 附带COM/.net extension built-in。您可以使用它创建一个WSH FileSystemObject,然后查询File objectShortPath property

    <?php
    $objFSO = new COM("Scripting.FileSystemObject");
    $objFile = $objFSO->GetFile(FILE);
    echo "path: ", $objFile->Path, "\nshort path: ", $objFile->ShortPath;
    打印例如
    path: C:\Dokumente und Einstellungen\Volker\Desktop\test.php
    短路径:C:\DOKUME~1\Volker\Desktop\test.php

    【讨论】:

      【解决方案2】:

      您可能想查看escapeshellarg() 并将参数放在双引号之间。

      【讨论】:

      • 我认为这也应该有效。它在我执行 dir 命令时有效,但在我执行我尝试运行的命令时无效。
      • 使用 escapeshellcmd() 转义可执行文件,使用 escapeshellarg() 转义参数。
      • 感谢您的建议,但我根本不懂 escapeshellcmd。在 Windows 上,它似乎只是用空格替换特殊字符。 'C:\Documents and Settings\don\foo' 变为 'C: Documents and Settings don foo'。这有什么用?
      【解决方案3】:

      您需要 Windows 上 Kernel32 中的 GetShortPathName API。要从 PHP 调用它,您需要使用 Win32 API extension...

      【讨论】:

      • 那可能会更快。不幸的是,我无法测试它,因为 php 5.3rc2 构建没有 w32 模块:-/希望你不介意我将链接添加到你的帖子中。
      【解决方案4】:

      反斜杠空格怎么样?

      Home/My Documents/  --> Home/My\ Documents/
      

      【讨论】:

      • 我尝试运行的可执行文件将反斜杠视为名称的一部分。在您的示例中,它将尝试打开文件 Home/My\
      • 您可能需要 phphil 建议的 escapeshellarg。如果直接从命令行调用,你会用反斜杠转义
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 2023-03-16
      • 2010-11-28
      • 2017-10-10
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多