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

Error message when looking for directory in php when run in powershell

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

我遵循了这个 guide for accessing the shared drive. This guide for executing php scripts in powershell. For that you need to set 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

是德语,大致翻译为:

The system can not find the path specified

关于错误消息,我注意到的两个主要问题是:

  1. 当 returns 地址路径中的一个反斜杠丢失时
  2. 它将文件夹名称插入为 \new_code 为 \n 并在下一行继续。

为了解决这个问题,我有:

  1. 运行 其他仅回显数据并且运行良好的测试文件。
  2. 尝试从 .txt 文件中读取目录名称。这返回了无法找到 .txt 文件的错误消息。
  3. 尝试使用 $_SERVER['DOCUMENT_ROOT'] 这在错误消息中没有太大变化。

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

感谢您花时间阅读本文,欢迎大家suggestions/ideas/questions。

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

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