PHP wrapper for smbclient
  • PHP 98.3%
  • Shell 1.3%
  • Nix 0.3%
  • Makefile 0.1%
Find a file
2019-02-06 17:18:34 +01:00
src assume local timezone for local hostnames 2019-02-06 17:18:34 +01:00
tests improve timezone detection 2019-02-06 16:44:18 +01:00
.gitignore add example file 2015-03-13 13:17:14 +01:00
.scrutinizer.yml get code coverage from both backends 2016-08-27 00:09:35 +02:00
.travis.yml clean travis config a bit 2018-03-28 15:43:42 +02:00
composer.json add code coverage whitelist 2016-12-08 16:44:15 +01:00
example.php make example script 'safe' 2018-01-08 16:15:34 +01:00
install_libsmbclient.sh run travis on ubuntu 14.04 2016-12-08 16:05:32 +01:00
LICENSE.txt add license file 2014-11-27 18:38:59 +01:00
Makefile clean travis config a bit 2018-03-28 15:43:42 +02:00
README.md update readme 2016-12-12 14:41:17 +01:00

SMB

Code Coverage Build Status Scrutinizer Code Quality

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

Upload a file

<?php
use Icewind\SMB\Server;

require('vendor/autoload.php');

$fileToUpload = __FILE__;

$server = new Server('localhost', 'test', 'test');
$share = $server->getShare('test');
$share->put($fileToUpload, 'example.txt');

Download a file

<?php
use Icewind\SMB\Server;

require('vendor/autoload.php');

$target = __DIR__ . '/target.txt';

$server = new Server('localhost', 'test', 'test');
$share = $server->getShare('test');
$share->get('example.txt', $target);

List shares on the remote server

<?php
use Icewind\SMB\Server;

require('vendor/autoload.php');

$server = new Server('localhost', 'test', 'test');
$shares = $server->listShares();

foreach ($shares as $share) {
	echo $share->getName() . "\n";
}

List the content of a folder

<?php
use Icewind\SMB\Server;

require('vendor/autoload.php');

$server = new Server('localhost', 'test', 'test');
$share = $server->getShare('test');
$content = $share->dir('test');

foreach ($content as $info) {
	echo $info->getName() . "\n";
	echo "\tsize :" . $info->getSize() . "\n";
}

Using read streams

<?php
use Icewind\SMB\Server;

require('vendor/autoload.php');

$server = new Server('localhost', 'test', 'test');
$share = $server->getShare('test');

$fh = $share->read('test.txt');
echo fread($fh, 4086);
fclose($fh);

Using write streams

<?php
use Icewind\SMB\Server;

require('vendor/autoload.php');

$server = new Server('localhost', 'test', 'test');
$share = $server->getShare('test');

$fh = $share->write('test.txt');
fwrite($fh, 'bar');
fclose($fh);

Using libsmbclient-php

Install libsmbclient-php

<?php
use Icewind\SMB\Server;
use Icewind\SMB\NativeServer;

require('vendor/autoload.php');

$fileToUpload = __FILE__;

if (Server::NativeAvailable()) {
    $server = new NativeServer('localhost', 'test', 'test');
} else {
    echo 'libsmbclient-php not available, falling back to wrapping smbclient';
    $server = new Server('localhost', 'test', 'test');
}
$share = $server->getShare('test');
$share->put($fileToUpload, 'example.txt');

Using notify

<?php
use Icewind\SMB\Server;

require('vendor/autoload.php');

$server = new Server('localhost', 'test', 'test');
$share = $server->getShare('test');

$share->notify('')->listen(function (\Icewind\SMB\Change $change) {
	echo $change->getCode() . ': ' . $change->getPath() . "\n";
});