/** * renameFile * * @param string $name * @param string $arch_name * @param bool $del * @param bool $overwrite * @return string */ public function renameFile($name, $arch_name, $del = false, $overwrite = false) { $tmp = Config::getTemp() . '/GmanagerZip' . GMANAGER_REQUEST_TIME; $zip = $this->_open(); $folder = ''; $sysName = IOWrapper::set($name); foreach ($zip->extract(PCLZIP_OPT_PATH, $tmp) as $f) { if ($f['status'] != 'ok') { Helper_System::clean($tmp); if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd(); } return Helper_View::message(Language::get('extract_false'), Helper_View::MESSAGE_ERROR); break; } if ($arch_name == $f['stored_filename']) { $folder = $f['folder']; } } if (file_exists($tmp . '/' . $sysName)) { if ($overwrite) { if ($folder) { Helper_System::clean($tmp . '/' . $sysName); } else { unlink($tmp . '/' . $sysName); } } else { Helper_System::clean($tmp); if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd(); } return Helper_View::message(Language::get('overwrite_false'), Helper_View::MESSAGE_ERROR); } } if ($folder) { @mkdir($tmp . '/' . $sysName, 0755, true); } elseif (!is_dir($tmp . '/' . dirname($sysName))) { @mkdir($tmp . '/' . dirname($sysName), 0755, true); } if ($folder) { // переделать на ftp if ($del) { $result = Gmanager::getInstance()->moveFiles($tmp . '/' . $arch_name, $tmp . '/' . $name); } else { $result = Gmanager::getInstance()->copyFiles($tmp . '/' . $arch_name, $tmp . '/' . $name); } } else { if ($del) { $result = rename($tmp . '/' . $arch_name, $tmp . '/' . $sysName); } else { $result = copy($tmp . '/' . $arch_name, $tmp . '/' . $sysName); } } if (!$result) { Helper_System::clean($tmp); if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd(); } if ($folder) { if ($del) { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_files_false')), Helper_View::MESSAGE_ERROR); } else { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_files_false')), Helper_View::MESSAGE_ERROR); } } else { if ($del) { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_file_false')), Helper_View::MESSAGE_ERROR); } else { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_file_false')), Helper_View::MESSAGE_ERROR); } } } $result = $zip->create($tmp, PCLZIP_OPT_REMOVE_PATH, mb_substr($tmp, mb_strlen(dirname(dirname($tmp))))) != 0; Helper_System::clean($tmp); if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd($this->_name); } if ($result) { if ($folder) { if ($del) { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_files_true')), Helper_View::MESSAGE_SUCCESS); } else { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_files_true')), Helper_View::MESSAGE_SUCCESS); } } else { if ($del) { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_file_true')), Helper_View::MESSAGE_SUCCESS); } else { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_file_true')), Helper_View::MESSAGE_SUCCESS); } } } else { if ($folder) { if ($del) { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_files_false')), Helper_View::MESSAGE_ERROR); } else { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_files_false')), Helper_View::MESSAGE_ERROR); } } else { if ($del) { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_file_false')), Helper_View::MESSAGE_ERROR); } else { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_file_false')), Helper_View::MESSAGE_ERROR); } } } }
/** * file_put_contents * * @param string $file * @param string $data * @return int (0 or 1) */ public function file_put_contents($file, $data = '') { $php_temp = Config::getTemp() . '/GmanagerFtpTemp' . GMANAGER_REQUEST_TIME . '.tmp'; file_put_contents($php_temp, $data); chmod($php_temp, 0666); ftp_chdir($this->_res, IOWrapper::set(mb_substr($file, 0, mb_strrpos($file, '/')))); $result = ftp_put($this->_res, Helper_System::basename(IOWrapper::set($file)), $php_temp, FTP_BINARY); unlink($php_temp); return $result ? 1 : 0; }
/** * renameFile * * @param string $name * @param string $arch_name * @param bool $del * @param bool $overwrite * @return string */ public function renameFile($name, $arch_name, $del = false, $overwrite = false) { $tmp = Config::getTemp() . '/GmanagerTar' . GMANAGER_REQUEST_TIME; $tgz = $this->_open(); $sysName = IOWrapper::set($name); $folder = ''; foreach ($tgz->listContent() as $f) { if ($arch_name == $f['filename']) { $folder = $f['typeflag'] == 5 ? 1 : 0; break; } } if (!$tgz->extract($tmp)) { Helper_System::clean($tmp); if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd(); } return Helper_View::message(Language::get('extract_false'), Helper_View::MESSAGE_ERROR); } if (file_exists($tmp . '/' . $sysName)) { if ($overwrite) { if ($folder) { Helper_System::clean($tmp . '/' . $sysName); } else { unlink($tmp . '/' . $sysName); } } else { Helper_System::clean($tmp); if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd(); } return Helper_View::message(Language::get('overwrite_false'), Helper_View::MESSAGE_ERROR); } } if ($folder) { @mkdir($tmp . '/' . $sysName, 0755, true); } else { @mkdir($tmp . '/' . dirname($sysName), 0755, true); } if ($folder) { if ($del) { $result = Gmanager::getInstance()->moveFiles($tmp . '/' . $name, $tmp . '/' . $arch_name); } else { $result = Gmanager::getInstance()->copyFiles($tmp . '/' . $name, $tmp . '/' . $arch_name); } } else { if ($del) { $result = rename($tmp . '/' . $arch_name, $tmp . '/' . $sysName); } else { $result = copy($tmp . '/' . $arch_name, $tmp . '/' . $sysName); } } if (!$result) { Helper_System::clean($tmp); if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd(); } if ($folder) { if ($del) { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_files_false')), Helper_View::MESSAGE_ERROR); } else { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_files_false')), Helper_View::MESSAGE_ERROR); } } else { if ($del) { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_file_false')), Helper_View::MESSAGE_ERROR); } else { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_file_false')), Helper_View::MESSAGE_ERROR); } } } $result = $tgz->createModify($tmp, '.', $tmp); Helper_System::clean($tmp); if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd($this->_name); } if ($result) { if ($folder) { if ($del) { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_files_true')), Helper_View::MESSAGE_SUCCESS); } else { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_files_true')), Helper_View::MESSAGE_SUCCESS); } } else { if ($del) { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_file_true')), Helper_View::MESSAGE_SUCCESS); } else { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_file_true')), Helper_View::MESSAGE_SUCCESS); } } } else { if ($folder) { if ($del) { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_files_false')), Helper_View::MESSAGE_ERROR); } else { return Helper_View::message(str_replace('%title%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_files_false')), Helper_View::MESSAGE_ERROR); } } else { if ($del) { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('move_file_false')), Helper_View::MESSAGE_ERROR); } else { return Helper_View::message(str_replace('%file%', htmlspecialchars($arch_name, ENT_NOQUOTES), Language::get('copy_file_false')), Helper_View::MESSAGE_ERROR); } } } }
/** * extractArchive * * @param string $name * @param array $chmod * @param bool $overwrite * @return string */ public function extractArchive($name = '', $chmod = array(), $overwrite = false) { $sysName = IOWrapper::set($name); if (Config::get('Gmanager', 'mode') == 'FTP') { $sysName = $sysName[0] == '/' ? $sysName : dirname(IOWrapper::set($this->_name) . '/') . '/' . $sysName; $ftp_name = Config::getTemp() . '/GmanagerFtpRar' . GMANAGER_REQUEST_TIME; mkdir($ftp_name, 0777); } $rar = $this->_open(); $err = ''; foreach ($rar->getEntries() as $entry) { $n = $entry->getName(); if (!$overwrite && Gmanager::getInstance()->file_exists($name . '/' . IOWrapper::get($n))) { $err .= Language::get('overwrite_false') . ' (' . htmlspecialchars($n, ENT_NOQUOTES) . ')<br/>'; } else { if (!$entry->extract(Config::get('Gmanager', 'mode') == 'FTP' ? $ftp_name : $sysName)) { if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->ftpArchiveEnd(); rmdir($ftp_name); } $err .= str_replace('%file%', htmlspecialchars($n, ENT_NOQUOTES), Language::get('extract_file_false_ext')) . '<br/>'; } } if (Gmanager::getInstance()->is_dir($name . '/' . IOWrapper::get($n))) { Gmanager::getInstance()->rechmod($name . '/' . IOWrapper::get($n), $chmod[1]); } else { Gmanager::getInstance()->rechmod($name . '/' . IOWrapper::get($n), $chmod[0]); } } if (Config::get('Gmanager', 'mode') == 'FTP') { Gmanager::getInstance()->createDir($sysName, $chmod[1]); Gmanager::getInstance()->ftpMoveFiles($ftp_name, $sysName, $chmod[0], $chmod[1], $overwrite); Gmanager::getInstance()->ftpArchiveEnd(); } if (Config::get('Gmanager', 'mode') == 'FTP' || Gmanager::getInstance()->is_dir($name)) { Gmanager::getInstance()->rechmod($name, $chmod[1]); return Helper_View::message(Language::get('extract_true'), Helper_View::MESSAGE_SUCCESS) . ($err ? Helper_View::message(rtrim($err, '<br/>'), Helper_View::MESSAGE_ERROR) : ''); } else { return Helper_View::message(Language::get('extract_false'), Helper_View::MESSAGE_ERROR_EMAIL); } }
/** * ftpArchiveStart * * @param string $current * @return string */ public function ftpArchiveStart($current = '') { $this->_ftpArchiveTmp = Config::getTemp() . '/GmanagerFtpArchive' . GMANAGER_REQUEST_TIME . '.tmp'; file_put_contents($this->_ftpArchiveTmp, self::$_instance->file_get_contents($current)); return $this->_ftpArchiveTmp; }
/** * This method has to be used in all __destruct() methods which need the current working directory. * * @see http://bugs.php.net/bug.php?id=34206 * @see http://www.php.net/language.oop5.decon */ public static function destruct() { $dir = Config::getTemp('cwd'); if (!empty($dir)) { @chdir($dir); } }