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('コピー先のファイル一覧');
 }
예제 #2
0
 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");
 }
예제 #3
0
 /**
  * 指定されたパスの配下を再帰的にコピーします.
  *
  * @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);
     }
 }