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

时间:2017-10-05 13:50:42

标签: php powershell

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

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

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

    path.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运行映射网络驱动器并获取文件夹名称。结束时出现错误:
    2.   

      致命错误:未捕获的异常&#39; com_exception&#39; with message&#39;来源:WSHNetwork.MapNetworkDrive
      说明:找不到网络名称。 &#39;在C:\ HostingSpaces \ test1 \ testdomain.com \ wwwroot \ pathtst.php:10堆栈跟踪:#0 C:\ HostingSpaces \ test1 \ testdomain.com \ wwwroot \ pathtst.php(10):com-&gt; MapNetworkDrive( &#39; X:&#39;,&#39; \ hostname ...&#39;,false,&#39;管理员&#39;,&#39;密码&#39;)#1 {main}在第10行的C:\ HostingSpaces \ test1 \ testdoamin.com \ wwwroot \ pathtst.php中抛出

      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:\文件夹等本地驱动器,但不适用于映射的网络驱动器。

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

1 个答案:

答案 0 :(得分:1)

从我看到的情况来看,你对自己这么做很难。

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

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

我几乎从readdir [reference]的PHP文档中逐字复制了这些内容。

您需要了解一些事项。

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