为什么我的网络服务器将空格转换为下划线,但从命令提示符运行却没有?

问题描述 投票:0回答:1

我制作了一个 Intranet 页面,可以让我轻松管理 Windows 中的快速启动图标。我希望能够对它们进行拖动排序,并在新盒子上轻松部署它们。工作得很好,直到我遇到了一个奇怪的障碍。如果快捷方式的目标有空格,则会将空格更改为下划线。在调试过程中,我做了一个简单的makeshortcut.php,并将其全部硬编码:

$shell = new COM("WScript.Shell");
$shortcut = $shell->CreateShortcut("\\\\solenth\\ql$\\017 - AutoHotKey - Primary.lnk");
$shortcut->TargetPath = "p:\\misc\\ahk\\AutoHotKey - Primary.ahk";
$shortcut->Arguments = "";
$shortcut->IconLocation = "p:\\misc\\ahk\\AutoHotKey_Blue.ico";
$shortcut->Description = "AutoHotKey";
$shortcut->WorkingDirectory = "p:\\misc\\ahk";
echo $shortcut->TargetPath;
$shortcut->save();

当我在浏览器中通过 makeshortcut.php 运行它时,我看到: P:\misc hk\AutoHotKey_-_Primary.ahk

如果我打开 cmd 并切换到网络服务器的文件夹并运行它,我会看到: P:\misc hk\AutoHotKey - Primary.ahk

知道为什么 Web 服务器用下划线替换空格吗?起初我说“啊,我的工作站的 PHP 安装与 Web 服务器不一样”,但随后我通过 RDP 进入 Web 服务器并转到服务器使用的 PHP 文件夹并运行脚本,它仍然有效美好的。因此,只有当实际从网络上运行时,它才会执行此操作。

我很困惑。有什么建议吗?

更新:我只是有一个想法。我制作了一个创建快捷方式的 C# 控制台应用程序。与 PHP 中一样进行硬编码。我在命令提示符下运行它,有效。我调用 exec 从 PHP 运行它,它执行相同的下划线操作。现在我真的很困惑。

操作系统:服务器2012 R2 PHP:8.3.1 网络服务器:IIS 8

php iis iis-8 shortcut-file
1个回答
0
投票

我无法准确解释为什么会发生这种情况,但是 Lex Li 关于 Server 2012 R2 有多老的评论让我很好地思考,也许这与年龄有关。因此,我制作了一个虚拟机并安装了带有较新 IIS 的现代服务器操作系统,问题自行解决了。

现在,因为两个服务器之间可能有很多不同的地方,但应用程序本身是完全相同的。因此,虽然我不能明确指出旧的 IIS 是一个问题,但如果在 2012 年遇到相同的问题,我建议您在较新的平台上测试您的应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.