2009-03-13 3 views
2

Je souhaite afficher la liste des lecteurs partagés connectés à mon système sous Windows. Y a-t-il un tutoriel pour ça?Récupère la liste des lecteurs partagés en utilisant PHP sous Windows?

J'ai essayé le code suivant dans PHP:

echo "<select id = 'drives'><option>Drives</option>"; 
for ($ii=66;$ii<92;$ii++) 
{ 
    $char = chr($ii); 
    if (opendir($char.":/")) 
     echo "<option>".$char."</option>"; 
} 
echo "</select>"; 
+0

Votre question est pas claire. Est-ce que vous vous attendez à trouver les lecteurs connectés sur le serveur Web? Voulez-vous trouver les lecteurs mappés sur l'ordinateur de quelqu'un connecté avec un navigateur Web? Est-ce que vous faites php-gtk? Quel est le contexte – Zoredache

+0

pouvez-vous s'il vous plaît examiner les réponses qui vous ont été données et soit accepter celui qui vous a le plus aidé/résolu votre problème ou souligner pourquoi aucune des réponses n'a résolu votre problème. merci – Gordon

Répondre

0

Cela peut aider à le faire sous C#. http://www.codeproject.com/KB/IP/networkshares.aspx Je ne trouve aucun moyen de le faire directement sous PHP.

Pour l'utiliser avec votre php, vous devrez peut-être le faire en tant que DLL et l'appeler à partir de php en utilisant les fonctions de l'API Win32.

+0

c'est bon, en php existe-t-il une fonction pour ouvrir un répertoire distant directement (je spécifie la lettre de lecteur avant que le programme s'exécute) – Sakthivel

1

Vous devez utiliser les fonctions API Win32 expérimentales en PHP:

  1. mémorisez la fonction API GetDriveType utilisant w32api-register-function. Ensuite, vous pouvez appeler cette fonction en utilisant w32api-invoke-function ou en appelant directement GetDriveType. Cela dépend de votre version de PHP. (Voir la note de contribution de l'utilisateur au bas de la documentation de w32api-invoke-function!)
  2. Vérifiez la valeur de retour si elle est DRIVE_REMOTE. Vous pouvez trouver les paramètres requis et la liste des autres valeurs de retour dans la documentation MSDN de GetDriveType.
1

Vous pouvez énumérer les ressources partagées de Windows via PHP's COM API:

$wmi = new COM('WinMgmts:{impersonationLevel=impersonate}!root/cimv2'); 
$result = $wmi->ExecQuery('Select Path from Win32_Share where Type = 0'); 
foreach ($result as $share) { 
    echo $share->Path, PHP_EOL; 
} 

La sortie répertorie tous les dossiers partagés sur la machine. Le type 0 est un lecteur de disque.

Consultez la documentation MSDN pour Win32_Share pour connaître les propriétés supplémentaires que vous pouvez interroger.

Note: si vous cherchez réseau lecteurs mappés, changer la requête

Select ProviderName From Win32_LogicalDisk Where DriveType = 4 

et changer $share->Path à $share->ProviderName

Voir cette Technet Article pour plus de détails.


Une alternative à l'utilisation de COM serait d'utiliser la commande wmic:

exec('wmic Share where Type=0 get Path', $shares); 
print_r($shares); 

est équivalent au premier exemple ci-dessus. Pour plus de détails sur WMIC, voir

Questions connexes