Пример #1
0
 /**
  * @throws \Icewind\SMB\Exception\ConnectionException
  * @throws \Icewind\SMB\Exception\AuthenticationException
  * @throws \Icewind\SMB\Exception\InvalidHostException
  */
 protected function connect()
 {
     if ($this->state and $this->state instanceof NativeShare) {
         return;
     }
     $this->state->init($this->server->getWorkgroup(), $this->server->getUser(), $this->server->getPassword());
 }
Пример #2
0
 /**
  * Open a writable stream to a remote file
  *
  * @param string $target
  * @return resource a write only stream to upload a remote file
  *
  * @throws \Icewind\SMB\Exception\NotFoundException
  * @throws \Icewind\SMB\Exception\InvalidTypeException
  */
 public function write($target)
 {
     $target = $this->escapePath($target);
     // since returned stream is closed by the caller we need to create a new instance
     // since we can't re-use the same file descriptor over multiple calls
     $workgroupArgument = $this->server->getWorkgroup() ? ' -W ' . escapeshellarg($this->server->getWorkgroup()) : '';
     $command = sprintf('%s %s --authentication-file=%s %s', $this->system->getSmbclientPath(), $workgroupArgument, System::getFD(3), escapeshellarg('//' . $this->server->getHost() . '/' . $this->name));
     $connection = new Connection($command);
     $connection->writeAuthentication($this->server->getUser(), $this->server->getPassword());
     $fh = $connection->getFileInputStream();
     $connection->write('put ' . System::getFD(4) . ' ' . $target);
     $connection->write('exit');
     // use a close callback to ensure the upload is finished before continuing
     // this also serves as a way to keep the connection in scope
     return CallbackWrapper::wrap($fh, null, null, function () use($connection, $target) {
         $connection->close(false);
         // dont terminate, give the upload some time
     });
 }