?? ftp.php
字號:
return true; } /** * Method to rename a file/folder on the FTP server * * @access public * @param string $from Path to change file/folder from * @param string $to Path to change file/folder to * @return boolean True if successful */ function rename($from, $to) { // If native FTP support is enabled lets use it... if (FTP_NATIVE) { if (@ftp_rename($this->_conn, $from, $to) === false) { JError::raiseWarning('35', 'JFTP::rename: Bad response' ); return false; } return true; } // Send rename from command to the server if (!$this->_putCmd('RNFR '.$from, 350)) { JError::raiseWarning('35', 'JFTP::rename: Bad response', 'Server response: '.$this->_response.' [Expected: 320] From path sent: '.$from ); return false; } // Send rename to command to the server if (!$this->_putCmd('RNTO '.$to, 250)) { JError::raiseWarning('35', 'JFTP::rename: Bad response', 'Server response: '.$this->_response.' [Expected: 250] To path sent: '.$to ); return false; } return true; } /** * Method to change mode for a path on the FTP server * * @access public * @param string $path Path to change mode on * @param string/int $mode Octal value to change mode to, e.g. '0777', 0777 or 511 * @return boolean True if successful */ function chmod($path, $mode) { // If no filename is given, we assume the current directory is the target if ($path == '') { $path = '.'; } // Convert the mode to a string if (is_int($mode)) { $mode = decoct($mode); } // If native FTP support is enabled lets use it... if (FTP_NATIVE) { if (@ftp_site($this->_conn, 'CHMOD '.$mode.' '.$path) === false) { if($this->_OS != 'WIN') { JError::raiseWarning('35', 'JFTP::chmod: Bad response' ); } return false; } return true; } // Send change mode command and verify success [must convert mode from octal] if (!$this->_putCmd('SITE CHMOD '.$mode.' '.$path, array(200, 250))) { if($this->_OS != 'WIN') { JError::raiseWarning('35', 'JFTP::chmod: Bad response', 'Server response: '.$this->_response.' [Expected: 200 or 250] Path sent: '.$path.' Mode sent: '.$mode); } return false; } return true; } /** * Method to delete a path [file/folder] on the FTP server * * @access public * @param string $path Path to delete * @return boolean True if successful */ function delete($path) { // If native FTP support is enabled lets use it... if (FTP_NATIVE) { if (@ftp_delete($this->_conn, $path) === false) { if (@ftp_rmdir($this->_conn, $path) === false) { JError::raiseWarning('35', 'JFTP::delete: Bad response' ); return false; } } return true; } // Send delete file command and if that doesn't work, try to remove a directory if (!$this->_putCmd('DELE '.$path, 250)) { if (!$this->_putCmd('RMD '.$path, 250)) { JError::raiseWarning('35', 'JFTP::delete: Bad response', 'Server response: '.$this->_response.' [Expected: 250] Path sent: '.$path ); return false; } } return true; } /** * Method to create a directory on the FTP server * * @access public * @param string $path Directory to create * @return boolean True if successful */ function mkdir($path) { // If native FTP support is enabled lets use it... if (FTP_NATIVE) { if (@ftp_mkdir($this->_conn, $path) === false) { JError::raiseWarning('35', 'JFTP::mkdir: Bad response' ); return false; } return true; } // Send change directory command and verify success if (!$this->_putCmd('MKD '.$path, 257)) { JError::raiseWarning('35', 'JFTP::mkdir: Bad response', 'Server response: '.$this->_response.' [Expected: 257] Path sent: '.$path ); return false; } return true; } /** * Method to restart data transfer at a given byte * * @access public * @param int $point Byte to restart transfer at * @return boolean True if successful */ function restart($point) { // If native FTP support is enabled lets use it... if (FTP_NATIVE) { if (@ftp_site($this->_conn, 'REST '.$point) === false) { JError::raiseWarning('35', 'JFTP::restart: Bad response' ); return false; } return true; } // Send restart command and verify success if (!$this->_putCmd('REST '.$point, 350)) { JError::raiseWarning('35', 'JFTP::restart: Bad response', 'Server response: '.$this->_response.' [Expected: 350] Restart point sent: '.$point ); return false; } return true; } /** * Method to create an empty file on the FTP server * * @access public * @param string $path Path local file to store on the FTP server * @return boolean True if successful */ function create($path) { // If native FTP support is enabled lets use it... if (FTP_NATIVE) { // turn passive mode on if (@ftp_pasv($this->_conn, true) === false) { JError::raiseWarning('36', 'JFTP::create: Unable to use passive mode' ); return false; } $buffer = fopen('buffer://tmp', 'r'); if (@ftp_fput($this->_conn, $path, $buffer, FTP_ASCII) === false) { JError::raiseWarning('35', 'JFTP::create: Bad response' ); fclose($buffer); return false; } fclose($buffer); return true; } // Start passive mode if (!$this->_passive()) { JError::raiseWarning('36', 'JFTP::create: Unable to use passive mode' ); return false; } if (!$this->_putCmd('STOR '.$path, array (150, 125))) { @ fclose($this->_dataconn); JError::raiseWarning('35', 'JFTP::create: Bad response', 'Server response: '.$this->_response.' [Expected: 150 or 125] Path sent: '.$path ); return false; } // To create a zero byte upload close the data port connection fclose($this->_dataconn); if (!$this->_verifyResponse(226)) { JError::raiseWarning('37', 'JFTP::create: Transfer Failed', 'Server response: '.$this->_response.' [Expected: 226] Path sent: '.$path ); return false; } return true; } /** * Method to read a file from the FTP server's contents into a buffer * * @access public * @param string $remote Path to remote file to read on the FTP server * @param string $buffer Buffer variable to read file contents into * @return boolean True if successful */ function read($remote, &$buffer) { // Determine file type $mode = $this->_findMode($remote); // If native FTP support is enabled lets use it... if (FTP_NATIVE) { // turn passive mode on if (@ftp_pasv($this->_conn, true) === false) { JError::raiseWarning('36', 'JFTP::read: Unable to use passive mode' ); return false; } $tmp = fopen('buffer://tmp', 'br+'); if (@ftp_fget($this->_conn, $tmp, $remote, $mode) === false) { fclose($tmp); JError::raiseWarning('35', 'JFTP::read: Bad response' ); return false; } // Read tmp buffer contents rewind($tmp); $buffer = ''; while (!feof($tmp)) { $buffer .= fread($tmp, 8192); } fclose($tmp); return true; } $this->_mode($mode); // Start passive mode if (!$this->_passive()) { JError::raiseWarning('36', 'JFTP::read: Unable to use passive mode' ); return false; } if (!$this->_putCmd('RETR '.$remote, array (150, 125))) { @ fclose($this->_dataconn); JError::raiseWarning('35', 'JFTP::read: Bad response', 'Server response: '.$this->_response.' [Expected: 150 or 125] Path sent: '.$remote ); return false; } // Read data from data port connection and add to the buffer $buffer = ''; while (!feof($this->_dataconn)) { $buffer .= fread($this->_dataconn, 4096); } // Close the data port connection fclose($this->_dataconn); // Let's try to cleanup some line endings if it is ascii if ($mode == FTP_ASCII) { $buffer = preg_replace("/".CRLF."/", $this->_lineEndings[$this->_OS], $buffer); } if (!$this->_verifyResponse(226)) { JError::raiseWarning('37', 'JFTP::read: Transfer Failed', 'Server response: '.$this->_response.' [Expected: 226] Path sent: '.$remote ); return false; } return true; } /** * Method to get a file from the FTP server and save it to a local file * * @access public * @param string $local Path to local file to save remote file as * @param string $remote Path to remote file to get on the FTP server * @return boolean True if successful */ function get($local, $remote) { // Determine file type $mode = $this->_findMode($remote); // If native FTP support is enabled lets use it... if (FTP_NATIVE) { // turn passive mode on if (@ftp_pasv($this->_conn, true) === false) { JError::raiseWarning('36', 'JFTP::get: Unable to use passive mode' ); return false; } if (@ftp_get($this->_conn, $local, $remote, $mode) === false) { JError::raiseWarning('35', 'JFTP::get: Bad response' ); return false; } return true; } $this->_mode($mode); // Check to see if the local file can be opened for writing $fp = fopen($local, "wb"); if (!$fp) { JError::raiseWarning('38', 'JFTP::get: Unable to open local file for writing', 'Local path: '.$local ); return false; } // Start passive mode if (!$this->_passive()) { JError::raiseWarning('36', 'JFTP::get: Unable to use passive mode' ); return false; } if (!$this->_putCmd('RETR '.$remote, array (150, 125))) { @ fclose($this->_dataconn); JError::raiseWarning('35', 'JFTP::get: Bad response', 'Server response: '.$this->_response.' [Expected: 150 or 125] Path sent: '.$remote ); return false; } // Read data from data port connection and add to the buffer while (!feof($this->_dataconn)) { $buffer = fread($this->_dataconn, 4096); $ret = fwrite($fp, $buffer, 4096); } // Close the data port connection and file pointer fclose($this->_dataconn); fclose($fp); if (!$this->_verifyResponse(226)) { JError::raiseWarning('37', 'JFTP::get: Transfer Failed', 'Server response: '.$this->_response.' [Expected: 226] Path sent: '.$remote ); return false; } return true; } /** * Method to store a file to the FTP server * * @access public * @param string $local Path to local file to store on the FTP server * @param string $remote FTP path to file to create * @return boolean True if successful */ function store($local, $remote = null) { // If remote file not given, use the filename of the local file in the current // working directory if ($remote == null) { $remote = basename($local); } // Determine file type $mode = $this->_findMode($remote); // If native FTP support is enabled lets use it... if (FTP_NATIVE) { // turn passive mode on if (@ftp_pasv($this->_conn, true) === false) { JError::raiseWarning('36', 'JFTP::store: Unable to use passive mode' ); return false; } if (@ftp_put($this->_conn, $remote, $local, $mode) === false) { JError::raiseWarning('35', 'JFTP::store: Bad response' ); return false; } return true; } $this->_mode($mode); // Check to see if the local file exists and open for reading if so if (@ file_exists($local)) { $fp = fopen($local, "rb"); if (!$fp) { JError::raiseWarning('38', 'JFTP::store: Unable to open local file for reading', 'Local path: '.$local ); return false; } } else { JError::raiseWarning('38', 'JFTP::store: Unable to find local path', 'Local path: '.$local ); return false; } // Start passive mode if (!$this->_passive()) { @ fclose($fp); JError::raiseWarning('36', 'JFTP::store: Unable to use passive mode' ); return false; } // Send store command to the FTP server if (!$this->_putCmd('STOR '.$remote, array (150, 125))) { @ fclose($fp); @ fclose($this->_dataconn); JError::raiseWarning('35', 'JFTP::store: Bad response', 'Server response: '.$this->_response.' [Expected: 150 or 125] Path sent: '.$remote ); return false; } // Do actual file transfer, read local file and write to data port connection while (!feof($fp)) { $line = fread($fp, 4096); do { if (($result = @ fwrite($this->_dataconn, $line)) === false) { JError::raiseWarning('37', 'JFTP::store: Unable to write to data port socket' ); return false; } $line = substr($line, $result); } while ($line != ""); } fclose($fp); fclose($this->_dataconn); if (!$this->_verifyResponse(226)) { JError::raiseWarning('37', 'JFTP::store: Transfer Failed', 'Server response: '.$this->_response.' [Expected: 226] Path sent: '.$remote ); return false; } return true; } /** * Method to write a string to the FTP server * * @access public * @param string $remote FTP path to file to write to * @param string $buffer Contents to write to the FTP server * @return boolean True if successful */ function write($remote, $buffer) { // Determine file type $mode = $this->_findMode($remote); // If native FTP support is enabled lets use it... if (FTP_NATIVE) { // turn passive mode on if (@ftp_pasv($this->_conn, true) === false) { JError::raiseWarning('36', 'JFTP::write: Unable to use passive mode' ); return false; } $tmp = fopen('buffer://tmp', 'br+'); fwrite($tmp, $buffer); rewind($tmp); if (@ftp_fput($this->_conn, $remote, $tmp, $mode) === false) { fclose($tmp); JError::raiseWarning('35', 'JFTP::write: Bad response' ); return false; } fclose($tmp); return true; } // First we need to set the transfer mode $this->_mode($mode); // Start passive mode if (!$this->_passive()) { JError::raiseWarning('36', 'JFTP::write: Unable to use passive mode' ); return false; } // Send store command to the FTP server if (!$this->_putCmd('STOR '.$remote, array (150, 125))) { JError::raiseWarning('35', 'JFTP::write: Bad response', 'Server response: '.$this->_response.' [Expected: 150 or 125] Path sent: '.$remote ); @ fclose($this->_dataconn); return false; } // Write buffer to the data connection port do { if (($result = @ fwrite($this->_dataconn, $buffer)) === false) {
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -