在PowerShell中运行时在php中查找目录时出现错误消息

Posted

技术标签:

【中文标题】在PowerShell中运行时在php中查找目录时出现错误消息【英文标题】:Error message when looking for directory in php when run in powershell 【发布时间】:2021-10-29 15:12:39 【问题描述】:

首先请原谅任何语法或拼写错误。英语是我的第二语言,写这篇文章时是凌晨 2 点。 我试图创建一个可以在 powershell 中执行的 php 脚本,该脚本从 hyper-v 虚拟机内部。该脚本将从与虚拟机共享的驱动器中获取文件并对这些文件进行哈希处理。

我按照guide 访问共享驱动器。这个guide 用于在 powershell 中执行 php 脚本。为此,您需要设置these 环境变量。

以下代码是我要执行的代码,它位于:\\tsclient\E\My_Projects\new_code\hashing_script.php

$directory = "\\tsclient\E\My_Projects\new_data";
$directoryContents = scandir("$directory");
$counter = count($directoryContents, 0);
$hashes = [0, 0];
for($i = 2; $i < $counter; $i++)

$hash = hash_file("sha512", "$directory\$directoryContents[$i]");
array_push($hashes, $hash);

var_dump($hashes);

当我在 powershell 中使用以下命令执行代码时:php.exe \\tsclient\E\My_Projects\new_code\hashing_script.php 我收到以下错误消息:

PHP Warning: scandir(\tsclient\E\My_Projects
ew_data, \tsclient\E\My_Projects
ew_data): Das System kann den angegebenen Pfad nicht finden. (code: 3) in \\tsclient\E\My_Projects\new_code\hashing_script.php on line 2

Warning: scandir(\tsclient\E\My_Projects
ew_data, \tsclient\E\My_Projects
ew_data): Das System kann den angegebenen Pfad nicht finden. (code: 3) in \\tsclient\E\My_Projects\new_code\hashing_script.php on line 2
PHP Warning: scandir(\tsclient\E\My_Projects
ew_data): failed to open dir: No such file or directory in \\tsclient\E\My_Projects\new_code\hashing_script.php on line 2

Warning: scandir(\tsclient\E\My_Projects
ew_data): failed to open dir: No such file or directory in \\tsclient\E\My_Projects\new_code\hashing_script.php on line 2
PHP Warning: scandir(): (errno 2): No such file or directory in \\tsclient\E\My_Projects\new_code\hashing_script.php on line 2

Warning: scandir(): (errno 2): No such file or directory in \\tsclient\E\My_Projects\new_code\hashing_script.php on line 2
PHP Warning: count(): Parameter must be an array or an object that implements Countable in \\tsclient\E\My_Projects\new_code\hashing_script.php on line 3

Warning: count(): Parameter must be an array or an object that implements Countable in \\tsclient\E\My_Projects\new_code\hashing_script.php on line 3
array(2) 
  [0]=>
  int(0)
  [1]=>
  int(0)

Das System kann den angegebenen Pfad nicht finden

是德语,大致翻译为:

系统找不到指定的路径

我注意到错误消息的两个主要方面是:

    当它返回地址路径时,缺少一个反斜杠 它将文件夹名称替换为 \new_code 为 \n 并继续下一行。

要解决这个问题,我有:

    运行仅回显数据的其他测试文件,它们运行良好。 尝试从 .txt 文件中读取目录名称。这会返回一条错误消息,指出无法找到 .txt 文件。 尝试使用 $_SERVER['DOCUMENT_ROOT'] 这在错误消息中没有太大变化。

我得出的结论是,powershell/php 几乎似乎认为 \tsclient\E\My_Projects\new_code\hashing_script.php 是一个目录,并试图在其中进行搜索,这显然是行不通的。

感谢您抽出宝贵时间阅读本文,欢迎提出任何建议/想法/问题。

【问题讨论】:

【参考方案1】:

您需要养成保护反斜杠的习惯。您的字符串包含\n,它当然会转换为换行符,而不是您期望的两个字符。您需要将反斜杠加倍或使用单引号:

$directory = "\\\\tsclient\\E\\My_Projects\\new_data";
$directory = '\\tsclient\E\My_Projects\new_data';

【讨论】:

以上是关于在PowerShell中运行时在php中查找目录时出现错误消息的主要内容,如果未能解决你的问题,请参考以下文章

在模拟器中运行时从应用程序获取工作目录

在 Eclipse 中运行时从 pom 获取 maven 项目版本和工件 ID

在终端中运行时找不到phpize命令[重复]

当 Docker 桌面在 WSL2 中运行时,bash 中的长工作目录

如果在循环中包含PHP中的文件,它每次在循环中运行时都会访问该文件吗?

UITests 在组中运行时失败,但在独立运行时成功