2009-04-27 58 views
4

我正在編寫一個腳本來整理一堆散佈在我的硬盤上的媒體,到目前爲止,在家裏(在我的Mac上),我在目錄中使用符號鏈接給人的印象是一切都是有組織的在一個位置,而實際數據分佈在4個驅動器上。是否有可能使用PHP創建Windows快捷方式?

不幸的是,我必須在工作中使用Windows,當然在PHP 5.3之前沒有符號鏈接支持(我認爲這需要Vista,因爲這是命令行工具「mklink」首次出現時)。

作爲解決方法,我考慮創建一個快捷方式,但我找不到一種方法。有沒有可能,還是有更好的解決方案,我沒有考慮?

回答

6

由於上面的回答,我發現你的確可以從PHP調用COM,這裏是我的一個符號()的替代的第一稿:

if (! function_exists('symlink')) { 
    function symlink($target, $link) { 
     if (! substr($link, -4, '.lnk')) 
      $link .= '.lnk'; 

     $shell = new COM('WScript.Shell'); 
     $shortcut = $shell->createshortcut($link); 
     $shortcut->targetpath = $target; 
     $shortcut->save(); 
    } 
} 
+0

你有沒有考慮使用LINKD命令? – codeape 2009-04-27 11:16:03

2

在Vista之前,支持聯結點(類似於UNIX符號鏈接)。

您需要windows資源工具包中的linkd工具(免費下載)。

快捷方式只是文件。您可以使用COM WScript API創建快捷方式文件。示例代碼使用Python執行此操作。如果有一個可以讓你進行COM互操作的PHP庫,你應該可以做類似的事情。

import win32com.client 
import winshell 

userDesktop = winshell.desktop() 
shell = win32com.client.Dispatch('WScript.Shell') 

shortcut = shell.CreateShortCut(userDesktop + '\\Zimbra Webmail.lnk') 
shortcut.Targetpath = r'C:\Program Files\Mozilla Firefox\firefox.exe' 
shortcut.Arguments = 'http://mysite.com/auth/preauth.php' 
shortcut.WorkingDirectory = r'C:\Program Files\Mozilla Firefox' 
shortcut.save() 
0

爲了記錄在案,結點上的NTFS確實只用於目錄。我不得不使用linkd.exe創建一個虛擬文件系統巨大的成功,但也有幾件事情需要注意的:

  • 不能卷之間的鏈接(即試圖在C創建一個鏈接:它指向D:中的某個位置將不起作用)
  • 取消鏈接似乎會偶爾刪除目標上的數據。在刪除鏈接之前備份/移動數據!
  • 當通過網絡共享數據作爲掛載卷時,連接點會遇到同樣的問題 - 有時它們無法遠程工作。無論您如何配置目標鏈接,它們似乎都隨機(有時)從源文件夾繼承一些共享權限。

乾杯有關創建的.lnk文件有用的帖子,只有我是什麼後...

相關問題