簡體   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