本文整理汇总了PHP中Eccube\Framework\Util\Utils::copyDirectory方法的典型用法代码示例。如果您正苦于以下问题:PHP Utils::copyDirectory方法的具体用法?PHP Utils::copyDirectory怎么用?PHP Utils::copyDirectory使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Eccube\Framework\Util\Utils
的用法示例。
在下文中一共展示了Utils::copyDirectory方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: execPlugin
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;
}
/* @var $objQuery Query */
$objQuery = Application::alias('eccube.query');
// SQLの実行
if (!Utils::isBlank($arrSql)) {
foreach ($arrSql as $sql) {
$this->log("exec sql: " . $sql['sql']);
$objQuery->query($sql['sql'], $sql['params']);
}
}
$arrInsertQuery = $this->arrInstallData['insert'];
if (!Utils::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 (!Utils::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 (!Utils::isBlank($arrCopyDirectories)) {
foreach ($arrCopyDirectories as $directory) {
$this->log("exec dir copy: " . $directory['src'] . ' -> ' . $directory['dist']);
// ディレクトリコピー -> HTML配下とDATA配下を別関数にする
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 (!Utils::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");
}
示例2: installPlugin
/**
* プラグインをインストールします.
*
* @param string $archive_file_name アーカイブファイル名.
* @param string $key キー.
* @return array エラー情報を格納した連想配列.
*/
public function installPlugin($archive_file_name, $key)
{
$objQuery = Application::alias('eccube.query');
$objQuery->begin();
// 一時展開ディレクトリにファイルがある場合は事前に削除.
$arrFileHash = Application::alias('eccube.helper.file_manager')->sfGetFileList(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
if (count($arrFileHash) > 0) {
Application::alias('eccube.helper.file_manager')->deleteFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, false);
}
//シンタックスエラーがあるtar.gzをアップ後、削除するとたまにディレクトリが消えるので追加
$this->makeDir(PLUGIN_UPLOAD_REALDIR);
$arrErr = array();
// 必須拡張モジュールのチェック
$arrErr = PluginUtil::checkExtension($key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// ファイルをチェックし一時展開用ディレクトリに展開します.
$arrErr = $this->unpackPluginFile($archive_file_name, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// plugin_infoを読み込み.
$arrErr = $this->requirePluginFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR . 'plugin_info.php', $key);
if ($this->isError($arrErr) === true) {
$this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
return $arrErr;
}
// リフレクションオブジェクトを生成.
$objReflection = new ReflectionClass('plugin_info');
$arrPluginInfo = $this->getPluginInfo($objReflection);
// プラグインクラスに必須となるパラメータが正常に定義されているかチェックします.
$arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
if ($this->isError($arrErr) === true) {
$this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
return $arrErr;
}
// 既にインストールされていないかを判定.
if ($this->isInstalledPlugin($arrPluginInfo['PLUGIN_CODE']) === true) {
$this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
$arrErr['plugin_file'] = '※ ' . $arrPluginInfo['PLUGIN_NAME'] . 'は既にインストールされています。<br/>';
return $arrErr;
}
// プラグイン情報をDB登録
if ($this->registerData($arrPluginInfo) === false) {
$this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
$arrErr['plugin_file'] = '※ DB登録に失敗しました。<br/>';
return $arrErr;
}
// プラグイン保存ディレクトリを作成し、一時展開用ディレクトリから移動します.
$plugin_dir_path = $this->getPluginDir($arrPluginInfo['PLUGIN_CODE']);
$this->makeDir($plugin_dir_path);
Utils::copyDirectory(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin_dir_path);
// プラグイン情報を取得
$plugin = PluginUtil::getPluginByPluginCode($arrPluginInfo['PLUGIN_CODE']);
// クラスファイルを読み込み.
$plugin_class_file_path = $this->getPluginFilePath($plugin['plugin_code'], $plugin['class_name']);
$arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
if ($this->isError($arrErr) === true) {
$this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id']);
return $arrErr;
}
// プラグインhtmlディレクトリ作成
$plugin_html_dir_path = $this->getHtmlPluginDir($plugin['plugin_code']);
$this->makeDir($plugin_html_dir_path);
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install');
if ($this->isError($arrErr) === true) {
// エラー時, transactionがabortしてるのでロールバック
$objQuery->rollback();
$this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id'], $plugin_html_dir_path);
return $arrErr;
}
$objQuery->commit();
// 不要なファイルの削除
Application::alias('eccube.helper.file_manager')->deleteFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, false);
return $arrErr;
}