connect(); } /** * connect * @return mixed 返回值 */ public function connect() { if (!isset(self::$_storageConn)) { if (isset($GLOBALS['__STORAGE_CONFIG'])) { $config = $GLOBALS['__STORAGE_CONFIG']; self::$_storageConn = ssh2_connect($config['HOST'], $config['PORT']); if (!self::$_storageConn) { trigger_error('connect sftp failed, please check it', E_USER_ERROR); } $login_result = ssh2_auth_password(self::$_storageConn, $config['USER'], $config['PASSWD']); if (!$login_result) { trigger_error('login sftp failed, please check it', E_USER_ERROR); } self::$_sftp = @ssh2_sftp(self::$_storageConn); if (! self::$_sftp) { trigger_error("Could not initialize SFTP subsystem.", E_USER_ERROR); } // if ($config['PASV'] == true) { // ftp_pasv(self::$_storageConn, true); // } return true; } else { trigger_error('can\'t load __STORAGE_CONFIG, please check it', E_USER_ERROR); } } } /** * 向远程ftp上传保存生成文件 * * @param string $source_file 源文件含路径 * @param string $task_id 目标文件名命名传入参数 * @param string $url 生成目标文件路径 * @return boolean true/false */ public function save($source_file, $task_id, &$url) { //存储的目的地文件路径 $destination_file = $this->_get_ident($task_id); //传输上传文件 $sftp = self::$_sftp; $stream = @fopen("ssh2.sftp://$sftp$destination_file", 'w'); if (! $stream) { return false; } $data_to_send = @file_get_contents($source_file); if (@fwrite($stream, $data_to_send) === false) { return false; } @fclose($stream); //上传结果 $url = $destination_file; return true; } /** * 向远程ftp下载文件到本地 * * @param string $url 远程源文件 * @param string $local_file 本地目标文件 * @return boolean true/false */ public function get($url, $local_file) { $sftp = self::$_sftp; $stream = @fopen("ssh2.sftp://$sftp$url", 'r'); if (! $stream) { return false; } $contents = stream_get_contents($stream); if (@file_put_contents($local_file, $contents) === false) { return false; } @fclose($stream); //上传结果 return true; } /** * 向远程ftp删除指定文件 * * @param string $url 远程源文件 */ public function delete($url) { $sftp = self::$_sftp; return ssh2_sftp_unlink($sftp, $url); } //含完整路径的生成文件地址 public function _get_ident($key) { $config = $GLOBALS['__STORAGE_CONFIG']; $folder = rtrim($config['rootPath'] ?: '/', '/') . '/' . date('Ymd'); $sftp = self::$_sftp; ssh2_sftp_mkdir($sftp, $folder,0777, true); $path = $this->_ident($key); $url = $folder . '/' . $path; return $url; } public function __destruct() { ssh2_disconnect(self::$_storageConn); ssh2_disconnect(self::$_sftp); } }