phpseclib\Net\SFTP::chdir PHP Method

chdir() public method

Changes the current directory
public chdir ( string $dir ) : boolean
$dir string
return boolean
    function chdir($dir)
    {
        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
            return false;
        }
        // assume current dir if $dir is empty
        if ($dir === '') {
            $dir = './';
            // suffix a slash if needed
        } elseif ($dir[strlen($dir) - 1] != '/') {
            $dir .= '/';
        }
        $dir = $this->_realpath($dir);
        // confirm that $dir is, in fact, a valid directory
        if ($this->use_stat_cache && is_array($this->_query_stat_cache($dir))) {
            $this->pwd = $dir;
            return true;
        }
        // we could do a stat on the alleged $dir to see if it's a directory but that doesn't tell us
        // the currently logged in user has the appropriate permissions or not. maybe you could see if
        // the file's uid / gid match the currently logged in user's uid / gid but how there's no easy
        // way to get those with SFTP
        if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) {
            return false;
        }
        // see \phpseclib\Net\SFTP::nlist() for a more thorough explanation of the following
        $response = $this->_get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                $handle = substr($response, 4);
                break;
            case NET_SFTP_STATUS:
                $this->_logError($response);
                return false;
            default:
                throw new \UnexpectedValueException('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
        }
        if (!$this->_close_handle($handle)) {
            return false;
        }
        $this->_update_stat_cache($dir, array());
        $this->pwd = $dir;
        return true;
    }

Usage Example

Esempio n. 1
0
 public function tearDown()
 {
     if ($this->sftp) {
         $this->sftp->chdir($this->getEnv('SSH_HOME'));
         $this->sftp->delete($this->scratchDir);
     }
     parent::tearDown();
 }
All Usage Examples Of phpseclib\Net\SFTP::chdir