国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
4.7KB

  1. <?php
  2. /**
  3. * 模块上传
  4. *
  5. * @version $Id: module_upload.php 1 14:43 2010年7月20日Z tianya $
  6. * @package DedeCMS.Administrator
  7. * @copyright Copyright (c) 2020, DedeBIZ.COM
  8. * @license https://www.dedebiz.com/license
  9. * @link https://www.dedebiz.com
  10. */
  11. require_once(dirname(__FILE__)."/config.php");
  12. CheckPurview('sys_module');
  13. require_once(dirname(__FILE__)."/../include/dedemodule.class.php");
  14. require_once(dirname(__FILE__)."/../include/oxwindow.class.php");
  15. if(empty($action)) $action = '';
  16. $mdir = DEDEDATA.'/module';
  17. if($action=='upload')
  18. {
  19. if( !is_uploaded_file($upfile) )
  20. {
  21. ShowMsg("貌似你什么都没有上传哦!", "javascript:;");
  22. exit();
  23. }
  24. else
  25. {
  26. include_once(dirname(__FILE__)."/../include/zip.class.php");
  27. $tmpfilename = $mdir.'/'.ExecTime().mt_rand(10000,50000).'.tmp';
  28. move_uploaded_file($upfile, $tmpfilename) or die("把上传的文件移动到{$tmpfilename}时失败,请检查{$mdir}目录是否有写入权限!");
  29. //ZIP格式的文件
  30. if($filetype==1)
  31. {
  32. $z = new zip();
  33. $files = $z->get_List($tmpfilename);
  34. $dedefileindex = -1;
  35. //为了节省资源,系统仅以.xml作为扩展名识别ZIP包里了dede模块格式文件
  36. if(is_array($files))
  37. {
  38. for($i=0; $i<count($files); $i++)
  39. {
  40. if( preg_match( "#\.xml#i", $files[$i]['filename']) )
  41. {
  42. $dedefile = $files[$i]['filename'];
  43. $dedefileindex = $i;
  44. break;
  45. }
  46. }
  47. }
  48. if($dedefileindex==-1)
  49. {
  50. unlink($tmpfilename);
  51. ShowMsg("对不起,你上传的压缩包中不存在dede模块文件!<br /><br /><a href='javascript:history.go(-1);'>&gt;&gt;返回重新上传&gt;&gt;</a>","javascript:;");
  52. exit();
  53. }
  54. $ziptmp = $mdir.'/ziptmp';
  55. $z->Extract($tmpfilename, $ziptmp, $dedefileindex);
  56. unlink($tmpfilename);
  57. $tmpfilename = $mdir."/ziptmp/".$dedefile;
  58. }
  59. $dm = new DedeModule($mdir);
  60. $infos = $dm->GetModuleInfo($tmpfilename,'file');
  61. if(empty($infos['hash']))
  62. {
  63. unlink($tmpfilename);
  64. $dm->Clear();
  65. ShowMsg("对不起,你上传的文件可能不是织梦模块的标准格式文件!<br /><br /><a href='javascript:history.go(-1);'>&gt;&gt;返回重新上传&gt;&gt;</a>","javascript:;");
  66. exit();
  67. }
  68. $okfile = $mdir.'/'.$infos['hash'].'.xml';
  69. if($dm->HasModule($infos['hash']) && empty($delhas))
  70. {
  71. unlink($tmpfilename);
  72. $dm->Clear();
  73. ShowMsg("对不起,你上传的模块已经存在,<br />如果要覆盖请先删除原来版本或选择强制删除的选项!<br /><br /><a href='javascript:history.go(-1);'>&gt;&gt;返回重新上传&gt;&gt;</a>","javascript:;");
  74. exit();
  75. }
  76. @unlink($okfile);
  77. copy($tmpfilename,$okfile);
  78. @unlink($tmpfilename);
  79. $dm->Clear();
  80. ShowMsg("成功上传一个新的模块!","module_main.php?action=view&hash={$infos['hash']}");
  81. exit();
  82. }
  83. }
  84. else
  85. {
  86. $win = new OxWindow();
  87. $win->Init("module_upload.php", "js/blank.js", "POST' enctype='multipart/form-data");
  88. $win->mainTitle = "模块管理";
  89. $wecome_info = "<a href='module_main.php'>模块管理</a> &gt;&gt; 上传模块";
  90. $win->AddTitle('请选择要上传的文件:');
  91. $win->AddHidden("action", 'upload');
  92. $msg = "
  93. <table width='600' border='0' cellspacing='0' cellpadding='0'>
  94. <tr>
  95. <td height='30'>文件格式:</td>
  96. <td>
  97. <label><input name='filetype' type='radio' value='0' checked='checked' />
  98. 正常的模块包</label>
  99. <label><input type='radio' name='filetype' value='1' />
  100. 经过 zip 压缩的模块包</label> </td>
  101. </tr>
  102. <tr>
  103. <td height='30'>已有模块:</td>
  104. <td>
  105. <label><input name='delhas' type='checkbox' id='delhas' value='1' /> 强制删除同名模块(这可能导致已经安装的模块无法卸载)</label>
  106. </td>
  107. </tr>
  108. <tr>
  109. <td width='96' height='60'>请选择文件:</td>
  110. <td width='504'>
  111. <input name='upfile' type='file' id='upfile' style='width:380px' /> </td>
  112. </tr>
  113. </table>
  114. ";
  115. $win->AddMsgItem("<div style='padding-left:20px;line-height:150%;'>$msg</div>");
  116. $winform = $win->GetWindow('ok', '');
  117. $win->Display();
  118. exit();
  119. }
  120. //ClearAllLink();