public function testCopyDirectory_コピー先のファイルが元々存在する場合_上書きされる() { /** * tests/tmp/src * /dir10 * /dir20/dir21 * /file22.txt */ mkdir(self::$TMP_DIR . "/src", 0700, true); mkdir(self::$TMP_DIR . "/src/dir10", 0700, true); mkdir(self::$TMP_DIR . "/src/dir20", 0700, true); mkdir(self::$TMP_DIR . "/src/dir20/dir21", 0700, true); $fp = fopen(self::$TMP_DIR . "/src/dir20/file22.txt", "w"); fwrite($fp, "ec-cube test"); fclose($fp); mkdir(self::$TMP_DIR . "/dst"); mkdir(self::$TMP_DIR . "/dst/dir20"); $fp_dist = fopen(self::$TMP_DIR . "/dst/dir20/file22.txt", "w"); fwrite($fp_dist, "hello"); fclose($fp_dist); SC_Utils::copyDirectory(self::$TMP_DIR . "/src/", self::$TMP_DIR . "/dst/"); $this->expected = array("dir10", "dir20", "dir21", "file22.txt", "ec-cube test"); $this->actual = array(); Test_Utils::array_append($this->actual, Test_Utils::mapCols(SC_Helper_FileManager::sfGetFileList(self::$TMP_DIR . "/dst"), "file_name")); Test_Utils::array_append($this->actual, Test_Utils::mapCols(SC_Helper_FileManager::sfGetFileList(self::$TMP_DIR . "/dst/dir20"), "file_name")); $fp_final = fopen(self::$TMP_DIR . "/dst/dir20/file22.txt", "r"); $read_result = fread($fp_final, 100); fclose($fp_final); $this->actual[] = $read_result; $this->verify('コピー先のファイル一覧'); }
public function execPlugin() { $this->log("start"); $plugin_code = $this->arrPlugin['plugin_code']; // テーブル作成SQLなどを実行 $arrSql = $this->arrInstallData['sql']; $arrErr = array(); // SQLの検証 foreach ($arrSql as $sql) { $this->log("verify sql: " . $sql['sql']); $error_message = $this->verifySql($sql['sql'], $sql['params']); if (!is_null($error_message)) { $this->log("verify sql: invalid sql " . $sql['sql']); $this->log("verify sql: {$error_message}"); $arrErr[] = $error_message; } } if (count($arrErr) > 0) { return $arrErr; } $objQuery =& SC_Query_Ex::getSingletonInstance(); // SQLの実行 if (!SC_Utils_Ex::isBlank($arrSql)) { foreach ($arrSql as $sql) { $this->log("exec sql: " . $sql['sql']); $objQuery->query($sql['sql'], $sql['params']); } } $arrInsertQuery = $this->arrInstallData['insert']; if (!SC_Utils_Ex::isBlank($arrInsertQuery)) { foreach ($arrInsertQuery as $query) { $objQuery->insert($query['table'], $query['arrVal'], $query['arrSql'], $query['arrSqlVal'], $query['form'], $query['arrFromVal']); } } $arrUpdateQuery = $this->arrInstallData['update']; if (!SC_Utils_Ex::isBlank($arrUpdateQuery)) { foreach ($arrUpdateQuery as $query) { $objQuery->update($query['table'], $query['arrVal'], $query['where'], $query['arrWhereVal'], $query['arrRawSql'], $query['arrRawSqlVal']); } } // プラグインのディレクトリコピー $arrCopyDirectories = $this->arrInstallData['copy_directory']; if (!SC_Utils_Ex::isBlank($arrCopyDirectories)) { foreach ($arrCopyDirectories as $directory) { $this->log("exec dir copy: " . $directory['src'] . ' -> ' . $directory['dist']); // ディレクトリコピー -> HTML配下とDATA配下を別関数にする SC_Utils::copyDirectory(PLUGIN_UPLOAD_REALDIR . $plugin_code . DIRECTORY_SEPARATOR . $directory['src'], PLUGIN_HTML_REALDIR . $plugin_code . DIRECTORY_SEPARATOR . $directory['dist']); } } // プラグインのファイルコピー $arrCopyFiles = $this->arrInstallData['copy_file']; if (!SC_Utils_Ex::isBlank($arrCopyFiles)) { foreach ($arrCopyFiles as $file) { $this->log("exec file copy: " . $file['src'] . ' -> ' . $file['dist']); // ファイルコピー copy(PLUGIN_UPLOAD_REALDIR . $plugin_code . DIRECTORY_SEPARATOR . $file['src'], PLUGIN_HTML_REALDIR . $plugin_code . DIRECTORY_SEPARATOR . $file['dist']); } } $this->log("end"); }
/** * 指定されたパスの配下を再帰的にコピーします. * * @param string $source_path * コピー元ディレクトリのパス * @param string $dest_path * コピー先ディレクトリのパス * @return void */ public static function copyDirectory($source_path, $dest_path) { // $source_path が誤った設定の場合処理を行わない if (is_dir($source_path)) { parent::copyDirectory($source_path, $dest_path); } else { trigger_error("{$source_path} が存在しません", E_USER_WARNING); } }