2017-10-05 92 views
1

我試圖在使用PHP的網絡位置檢索新創建的文件夾名稱,但沒有成功。我嘗試了兩種不同的方法:如何使用PHP列出網絡驅動器中的目錄?

  1. 在PHP中使用Powershell獲取文件夾名稱。我得到了以下錯誤:

System error 5 has occurred. Access is denied.

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); 
?> 
  • 從PHP運行映射網絡驅動器並獲取文件夾名稱。這結束了與錯誤:
  • Fatal error: Uncaught exception 'com_exception' with message 'Source: WSHNetwork.MapNetworkDrive
    Description: The network name cannot be found. ' in C:\HostingSpaces\test1\testdomain.com\wwwroot\pathtst.php:10 Stack trace: #0 C:\HostingSpaces\test1\testdomain.com\wwwroot\pathtst.php(10): com->MapNetworkDrive('X:', '\hostname...', false, 'administrator', 'password') #1 {main} thrown in C:\HostingSpaces\test1\testdoamin.com\wwwroot\pathtst.php on line 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效果很好:\文件夾,但不能與映射網絡驅動器。

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

    +0

    不能使用UNC名稱嗎? (例如:「//server/share/dir/file.exension」) 然後使用,is_dir,fopen等 – Brice

    回答

    1

    從我看到的情況來看,你對自己做的很難。

    如果您使用PHP,它擁有列出目錄,網絡或其他方面所需的一切。

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

    我幾乎從PHP文檔複製此逐字爲readdir [reference

    有幾件事情你需要知道。

    1. PHP無法訪問映射的驅動器作爲驅動器號。這是針對每個用戶設置的,並且在OS環境中不可用。這需要直接指向網絡路徑。
    2. PHP有一個常量,稱爲DIRECTORY_SEPARATOR,它在Windows上返回適當的斜槓的路徑名稱,但出於您的目的,似乎沒有必要。你需要注意的是,Windows上的正常目錄斜線被解釋爲轉義字符,因此如果你像輸入目錄路徑一樣,解釋爲c:scriptspath.ps1;這也是你得到Access Denied錯誤的原因。最適合您的目的是將它寫入我的代碼中,如上所示,使用額外的斜線表示您的想法。
    +0

    感謝您的回答。我能夠通過較小的調整使其工作。當我執行你提供的代碼時,我得到了下面的錯誤: **訪問被拒絕。 (代碼:5)**和**未能打開dir:第2行**中的文件描述符不正確。 爲了解決這個問題,我分配了有權限在IIS中的網絡路徑的用戶,它工作... – Bose

    +0

    @Bose ---我不熟悉IIS,但它是有道理的 – user1167442

    相關問題