3.1 KiB
3.1 KiB
SMB
PHP wrapper for smbclient
and libsmbclient-php
- Reuses a single
smbclient
instance for multiple requests - Doesn't leak the password to the process list
- Simple 1-on-1 mapping of SMB commands
- A stream-based api to remove the need for temporary files
- Support for using libsmbclient directly trough
libsmbclient-php
Examples
Connect to a share
<?php
use Icewind\SMB\ServerFactory;
use Icewind\SMB\BasicAuth;
require('vendor/autoload.php');
$serverFactory = new ServerFactory();
$auth = new BasicAuth('test', 'workgroup', 'test');
$server = $serverFactory->createServer('localhost', $auth);
$share = $server->getShare('test');
The server factory will automatically pick between the smbclient
and libsmbclient-php
based backend depending on what is available.
Using anonymous authentication
$serverFactory = new ServerFactory();
$auth = new AnonymousAuth();
$server = $serverFactory->createServer('localhost', $auth);
Using kerberos authentication
$serverFactory = new ServerFactory();
$auth = new KerberosAuth();
$server = $serverFactory->createServer('localhost', $auth);
Note that this requires a valid kerberos ticket to already be available for php
Upload a file
$share->put($fileToUpload, 'example.txt');
Download a file
$share->get('example.txt', $target);
List shares on the remote server
$shares = $server->listShares();
foreach ($shares as $share) {
echo $share->getName() . "\n";
}
List the content of a folder
$content = $share->dir('test');
foreach ($content as $info) {
echo $info->getName() . "\n";
echo "\tsize :" . $info->getSize() . "\n";
}
Using read streams
$fh = $share->read('test.txt');
echo fread($fh, 4086);
fclose($fh);
Using write streams
$fh = $share->write('test.txt');
fwrite($fh, 'bar');
fclose($fh);
Using notify
$share->notify('')->listen(function (\Icewind\SMB\Change $change) {
echo $change->getCode() . ': ' . $change->getPath() . "\n";
});
Testing SMB
Use the following steps to check if the library can connect to your SMB share.
- Clone this repository or download the source as zip
- Make sure composer is installed
- Run
composer install
in the root of the repository - Edit
example.php
with the relevant settings for your share. - Run
php example.php
If everything works correctly then the contents of the share should be outputted.