En fouillant dans le code de owncloud et dans ses dépendances, j'ai remarqué quelques bibliothèques et une extension PHP :

Dans tous les scenarii, pour accéder à des fichier Windows depuis Linux, il faudra utiliser les outils du logiciel Samba.

Bien que je comprenne le besoin d'une implémentation pur PHP (icewind/smb), je pense qu'encapsuler les appels à la commande smbclient est remarquablement laid, et vraiment pas robuste.

Après une première étude, le projet libsmbclient-php m'a semblé intéressant mais un peu tordu à utiliser, car il est nécessaire d'utiliser un ensemble de fonctions dédiées (smbclient_*).

Par exemple, pour afficher le contenu d'un fichier Windows vous devez écrire :

// Creation d'un état
state = smbclient_state_new();
// Initialisation avec le domaine, nom d'utilisateur et mot de passe:
smbclient_state_init($state, null, 'testuser', 'password');
// Ouverture du fichier
$file = smbclient_open($state, 'smb://server/testshare/file.txt', 'r');
if ($file) {
  // Lecture séquentielle et affichage
  while ($data = smbclient_read($state, $file, 1000)) {
    echo $data;
  }
}
// Fermeture 
smbclient_close($state, $file)
// Liberation
smbclient_state_free($state);

Pas très amusant ;) évidement, il est possible de créer un streamWrapper pour simplifier l'utilisation, comme celui fournit par icewin/smb.

J'ai donc commencé à contribuer à ce projet pour l'améliorer :

Il est donc désormais possible d'écrire plus simplement l'exemple précédent :

readfile("smb://testuser:password@server/testshare/file.txt");

Il reste d'autres travaux en cours :

Dans le futur, il pourrait aussi être intéressant de remplacer l'utilisation des ressources par des objects (e.g; SmbClient\State, SmbClient\File, SmbClient\Dir).

Évidement, les RPM de php-libsmbclient sont disponibles dans mon dépôt, la version 0.7.0 dans remi, remi-php55 et remi-php56 ou la version 0.8.0-dev dans remi-test et remi-php70.

Retour et commentaires sont les bienvenus.