繁体   English   中英

如何使用 PHP 列出网络驱动器中的目录?

[英]How to list the directories in a network drive using PHP?

我正在尝试使用 PHP 在网络位置检索新创建的文件夹名称,但没有成功。 我尝试了两种不同的方法:

  1. 在 PHP 中使用 Powershell 获取文件夹名称。 我收到以下错误:

发生系统错误 5。 访问被拒绝。

路径.ps1

net use Y: "\\hostname\folder" /user:administrator 'password'  /Persistent:Yes /y
$tat = Get-ChildItem -Directory Y:\folderlist | sort CreationTime -Descending | select -First 1 

pathtst.php

<?php
$output = shell_exec('powershell.exe -command c:\scripts\path.ps1');
echo ($output);
?>
  1. 从 PHP 运行映射网络驱动器并获取文件夹名称。 这以错误结束:

致命错误:未捕获的异常“com_exception”,消息为“来源:WSHNetwork.MapNetworkDrive”
描述:找不到网络名称。 ' 在 C:\\HostingSpaces\\test1\\testdomain.com\\wwwroot\\pathtst.php:10 堆栈跟踪:#0 C:\\HostingSpaces\\test1\\testdomain.com\\wwwroot\\pathtst.php(10): com->MapNetworkDrive( 'X:', '\\hostname...', false, 'administrator', 'password') #1 {main} 被抛出到 C:\\HostingSpaces\\test1\\testdoamin.com\\wwwroot\\pathtst.php 第 10 行

pathtst.php :

<?php
$letter = 'X';
$WshNetwork = new COM("WScript.Network");
$WshNetwork->MapNetworkDrive("$letter:", '\\hostname\folder', FALSE,     'administrator', 'password'); 
$dir = 'X:\folderlist';
$tblname = scandir($dir);

print_r($tblname);
?>

此代码适用于像 c:\\folder 这样的本地驱动器,但不适用于映射的网络驱动器。

请注意,我是 PHP 和 Powershell 的新手。

就我所见,你对自己太苛刻了。

如果您使用 PHP,它拥有列出目录、网络或其他方式所需的一切。

<?php
if($fh=opendir('\\\\path\\to\\files')) {
  while (false !== ($fi =readdir($fh))) {
    echo "$fi\n";
  }
}
?>

我几乎从 PHP 文档中逐字复制了readdir [参考]。

有几件事你需要知道。

  1. PHP 无法访问映射驱动器作为驱动器号。 这是按用户设置的,在操作系统环境中不可用。 这需要直接指向网络路径。
  2. PHP 有一个名为DIRECTORY_SEPARATOR的常量,它在 Windows 上返回路径名中的适当斜杠,但出于您的目的,它似乎没有必要。 您需要注意的是,Windows 上的普通目录斜杠被解释为转义字符,因此,如果您像这样键入目录路径, c:scriptspath.ps1解释的内容是c:scriptspath.ps1 ;这也是您获得Access Denied错误。 最适合您的目的是按照我在上面的代码中指示的方式编写它,并使用额外的斜杠来提供您想要的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM