2009-04-27 16 views
4

Ich schreibe ein Skript, um eine Reihe von Medien auf meinen Festplatten zu speichern, und es funktioniert ziemlich gut zu Hause (auf meinem Mac), wie ich Symlinks in einem Verzeichnis verwende, um den Eindruck zu vermitteln, dass alles organisiert ist an einem Ort, während die tatsächlichen Daten über die 4 Laufwerke verteilt sind.Ist es möglich, eine Windows-Verknüpfung mit PHP zu erstellen?

Leider muss ich Windows bei der Arbeit verwenden, und natürlich gibt es keine Symlink-Unterstützung dort bis PHP 5.3 (und ich nehme an, dass Vista als das ist, als das Befehlszeilentool "mklink" zuerst erschien).

Als Workaround dachte ich über das Erstellen einer Verknüpfung, aber ich finde keine Möglichkeit, dies zu tun. Ist es möglich, oder gibt es eine bessere Lösung, die ich nicht berücksichtigt habe?

Antwort

6

Dank der obigen Antwort, fand ich, dass Sie tatsächlich COM aus php anrufen können, hier ist mein erster Entwurf eines Symlink() Ersatz:

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

Bitte benutzen Sie den Befehl linkd Blick in Verwendung? – codeape

+0

Ich habe es mir angesehen, ja. Aber ich wollte eine Lösung, die "Just Works" out of the box, ohne zusätzliche Werkzeuge benötigt. Und ich habe ein paar (möglicherweise unwahre) Geschichten von Weh aus der Verwendung von Abzweigungspunkten auf XP gehört. – Drarok

+0

Oh, auch, ich lese diese Seite: http://support.microsoft.com/kb/205524, die darauf hindeutet, dass Knotenpunkte nur für Verzeichnisse sind, muss ich auf Dateien zeigen. – Drarok

2

Es gibt Unterstützung für Verbindungspunkte (ähnlich UNIX-Symlinks) vor Vista.

Sie benötigen das Tool linkd aus dem Windows Resource Kit (kostenloser Download).

Verknüpfungen sind nur Dateien. Sie können Verknüpfungsdateien mit der COM WScript-API erstellen. Der Beispielcode tut dies mit Python. Wenn es eine Bibliothek für PHP gibt, mit der Sie COM-Interop ausführen können, sollten Sie in der Lage sein, etwas ähnliches zu tun.

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

Für die Aufzeichnung Knotenpunkte auf NTFS sind in der Tat nur für Verzeichnisse. Ich habe großen Erfolg hatte Linkd.exe mit einem virtuellen Dateisystem zu erstellen, aber es gibt ein paar Dinge bewusst zu sein:

  • Sie können nicht zwischen Volumes verknüpfen (dh versuchen, einen Link in C zu erstellen: die Punkten ein Ort in D: wird nicht funktionieren)
  • Die Verknüpfung der Dinge scheint sporadisch Daten am Ziel zu löschen. Sichern/Verschieben Sie Ihre Daten, bevor Sie einen Link entfernen!
  • An Verbindungspunkten treten die gleichen Probleme auf, wenn Daten über das Netzwerk als bereitgestellte Volumes freigegeben werden - manchmal funktionieren sie einfach nicht per Fernzugriff. Sie scheinen auch zufällig (d. H. Manchmal) einige der Freigabeberechtigungen aus dem Quellordner zu erben, unabhängig davon, wie Sie den Ziellink konfigurieren.

Beifall für die nützlichen Beiträge über Dateien erstellen LNK, genau das, was war ich nach ...

Verwandte Themen