2010-01-20 174 views
1

對於我正在開發的一個PHP項目,專注於數據均一性,可以管理某個目錄結構。從網絡服務器複製目錄到映射的網絡驅動器

在用戶完成一個創建對象的過程後(我不會打擾你們所有的項目細節),這個目錄結構應該被複制到一個映射的網絡驅動器。

由於用戶可能已將網絡驅動器映射到不同的驅動器號,因此我使用javascript(FileSystemObject)來獲取驅動器號。

這一切都OK。但現在來了棘手的部分。我如何能夠將我的導演結構複製到網絡驅動器上,並通過我正在構建的webapp在網絡服務器上進行管理?

我知道我可以使用FSO創建新的目錄,我的問題是如何將PHP的遞歸導向結構轉換爲javascript。

回答

1

由於您無法使用HTTP複製目錄結構,因此您必須創建一個輔助對象來存放目錄信息。我會使用通過JSON導出到JS的數組。陣列結構是這樣的:

array(1) { 
    ["/"]=> 
    array(5) { 
    ["dir1"]=> 
    array(3) { 
     ["dir1_1"]=> 
     array(1) { 
     ["file1.txt"]=> 
     string(30) "http://domain/dir1_1/file1.txt" 
     } 
     ["file1.txt"]=> 
     string(28) "http://domain/dir1/file1.txt" 
     ["file2.txt"]=> 
     string(34) "http://domain/dir1/file2.txt" 
    } 
    ["dir2"]=> 
    array(1) { 
     ["file1.txt"]=> 
     string(28) "http://domain/dir2/file1.txt" 
    } 
    ["file1.txt"]=> 
    string(23) "http://domain/file1.txt" 
    ["file2.txt"]=> 
    string(23) "http://domain/file2.txt" 
    ["file3.txt"]=> 
    string(23) "http://domain/file3.txt" 
    } 
} 

您也可以選擇assable從鍵值的網址,以節省一些流量,但我覺得這不是你需要它的情況。

一旦你在JS中獲得了對象,你只需要逐個拷貝文件。

0

HTTP並未定義任何類似「目錄結構」; HTTP響應對文件系統的任何映射都是偶然的。

0

? Javascript中沒有FileSystemObject,也沒有ECMAscript - 它是一個jscript擴展。

我想這是因爲你正在嘗試在MS Windows操作系統上開發(如果你提到過這個,這會有幫助)。

另外,爲什麼從weserver下載的jscript不能訪問本地文件系統有許多原因 - MSIE中的默認設置不允許這樣做,並且在任何其他瀏覽器中都不起作用。

目錄結構位於何處?在網絡服務器上?在瀏覽器客戶端上?關於如何將詳細信息從PHP傳遞給jscript的問題相當意味着前者 - 那麼爲什麼不使用PHP複製文件呢?即使不考慮安全問題,它也比在客戶端上實現它簡單得多。

但是,爲了回答你的問題:

$i=0; 
print "<script>\nvar filesToCopy=New Array();\n"; 
foreach ($file_to_copy as $f) { 
    print "filesToCopy[$i]='$f';\n"; 
    $i++; 
} 
print "your_file_copy_js(filesToCopy);\n</script>\n"; 

C.

0

我已經想通了。我遞歸地閱讀我的directorystructure,建立一個數組,循環訪問數組,然後放入一個可以使用FileSystemObject創建新目錄的javascriptfunction。

唯一的缺點是我無法將內容添加到文件。但這並不是什麼大問題。佩爾佩勒,感謝你的建議,這是我的解決方案的主角。