簡體   English   中英

讀取網絡驅動器上的文件

[英]Read file on a network drive

我在 Windows 服務器上運行 Xampp; Apache 作為具有本地帳戶的服務運行。 在此服務器上,a.network 共享安裝為 X:,具有特定憑據。

我想訪問位於 X: 的文件並運行以下代碼

<?php
echo shell_exec("whoami");
fopen('X:\\text.txt',"r");
?>

並得到

theservername\thelocaluser
Warning: fopen(X:\text.txt) [function.fopen]: failed to open stream: No such file or directory

我嘗試運行 Apache,不是作為服務,而是直接通過啟動 httpd.exe 來運行……並且代碼有效。

我看不出是什么導致了服務和應用程序之間的差異以及如何使其工作。

您無法使用驅動器號來執行此操作,因為網絡映射的驅動器僅適用於單個用戶,因此服務無法使用(即使您要為該用戶安裝它)。

您可以做的是直接使用UNC路徑,例如:

fopen('\\\\server\\share\\text.txt', 'r');

但是請注意,PHP對UNC路徑的文件系統訪問存在一些問題。 一個示例是我為imagettftext提交錯誤 ,但file_existsis_writeable也存在問題。 我沒有報告后者,因為從我與imagettftext長期未解決的錯誤中可以看出,這有什么意義。

對於網絡共享,應使用UNC名稱:“ // server / share / dir / file.ext”

如果使用IP或主機名,則應該可以正常工作:

$isFolder = is_dir("\\\\NAS\\Main Disk");
var_dump($isFolder); //TRUE

$isFolder = is_dir("//NAS/Main Disk");
var_dump($isFolder); //TRUE

$isFolder = is_dir("N:/Main Disk");
var_dump($isFolder); //FALSE

如果它對未來有幫助,我所做的是:

  1. 使用與您訪問網絡驅動器的帳戶相同的用戶名和密碼創建一個本地帳戶。
  2. Go 至 Windows 服務 > Apache2 > 屬性 > 登錄 > 以此帳戶登錄...並指定您創建的用戶名和密碼。

關於語法,對我有用的是:

$fileName = '//192.168.1.10/Folder/file.txt';

我正在使用 php 8。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM