| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 | 
							- #!/usr/bin/env php
 
- <?php
 
- define('PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);
 
- class Dever
 
- {
 
-     protected static $package = 'http://dever.shemic.com/';
 
-     protected static $command = array();
 
-     protected static $check = false;
 
-     public static function handle()
 
-     {
 
-         global $argc, $argv;
 
-         if (isset($argv) && isset($argv[1])) {
 
-             self::out('loading...');
 
-             $method = 'method_' . $argv[1];
 
-             if (!method_exists(__CLASS__, $method)) {
 
-                 self::error();
 
-             }
 
-             if (isset($argv[3])) {
 
-                 unset($argv[0]);
 
-                 unset($argv[1]);
 
-                 $name = $argv[2];
 
-                 unset($argv[2]);
 
-                 self::$method($name, $argv);
 
-             } elseif (isset($argv[2])) {
 
-                 self::$method($argv[2]);
 
-             } else {
 
-                 self::$method();
 
-             }
 
-             self::exe();
 
-         } else {
 
-             self::error();
 
-         }
 
-     }
 
-     protected static function input($text, $default = '')
 
-     {
 
-         if (is_array($text)) {
 
-             $text = implode("\n", $text);
 
-         }
 
-         self::out($text);
 
-         $stdin = fopen('php://stdin', 'r');
 
-         $shell = trim(fgets($stdin, 100));
 
-         return $shell ? $shell : $default;
 
-     }
 
-     protected static function out($text)
 
-     {
 
-         echo $text . "\n";
 
-     }
 
-     protected static function error()
 
-     {
 
-         self::out('error');
 
-         die;
 
-     }
 
-     protected static function notice()
 
-     {
 
-         self::out('您的php不支持system,请联系空间商或管理员开启system。');
 
-         die;
 
-     }
 
-     public static function command($command)
 
-     {
 
-         array_push(self::$command, $command);
 
-     }
 
-     public static function exe()
 
-     {
 
-         if (!self::check()) {
 
-             self::notice();
 
-         }
 
-         if (self::$command) {
 
-             system(implode(' && ', self::$command));
 
-         }
 
-         echo "Finished!\n";
 
-     }
 
-     protected static function check()
 
-     {
 
-         if (self::$check) {
 
-             return true;
 
-         }
 
-         if (!function_exists('system')) {
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
-     protected static function method_init($type = 'main')
 
-     {
 
-         self::command('sudo cp -R dever /usr/bin/dever');
 
-         self::command('sudo chmod +x /usr/bin/dever');
 
-         if ($type == 'composer') {
 
-             //$HOME
 
-             $composer = '/usr/bin/composer';
 
-             //$shell = 'sudo curl -sS http://packagist.cn/composer/installer | sudo php -d detect_unicode=Off';
 
-             self::command('sudo curl http://getcomposer.org/installer | sudo php -d detect_unicode=Off');
 
-             self::command('sudo mv composer.phar ' . $composer);
 
-             self::command('sudo chmod +x ' . $composer);
 
-             self::command('composer install --optimize-autoloader');
 
-         } else {
 
-             self::method_install('init');
 
-         }
 
-     }
 
-     protected static function method_up($type = 'main')
 
-     {
 
-         if ($type == 'composer') {
 
-             self::command('composer update --optimize-autoloader');
 
-         } else {
 
-             self::method_install('init');
 
-         }
 
-     }
 
-     protected static function method_opt()
 
-     {
 
-         self::command('composer dump-autoload --optimize');
 
-     }
 
-     protected static function method_git()
 
-     {
 
-         self::command('sudo apt-get install git-core');
 
-     }
 
-     protected static function method_pack($name, $path = '')
 
-     {
 
-         if ($name == 'init') {
 
-             $path = array
 
-                 (
 
-                 'build/',
 
-                 'config/',
 
-                 'boot.php',
 
-                 'web/data/assets/index.html',
 
-                 'web/data/cache/index.html',
 
-                 'web/data/compile/index.html',
 
-                 'web/data/database/index.html',
 
-                 'web/data/manage/index.html',
 
-                 'web/data/node/index.html',
 
-                 'web/data/project/index.html',
 
-                 'web/data/sql/index.html',
 
-                 'web/data/upload/index.html',
 
-                 'web/data/index.html',
 
-                 'web/package/boot.php',
 
-                 'web/package/index.html',
 
-                 'web/application/boot.php',
 
-                 'web/application/index.html',
 
-             );
 
-             $path = implode(' ', $path);
 
-         } else {
 
-             if (!$path) {
 
-                 $path = $name;
 
-             }
 
-             if (is_array($path)) {
 
-                 $method = 1;
 
-                 if (isset($path[3]) && $path[3] == '-p') {
 
-                     unset($path[3]);
 
-                     $method = 2;
 
-                 }
 
-                 $temp = $path;
 
-                 $path = '';
 
-                 foreach ($temp as $k => $v) {
 
-                     if ($method == 2) {
 
-                         $n = explode('/', $v);
 
-                         $m = count($n) - 2;
 
-                         $n = $n[$m];
 
-                         if (!is_dir(PATH . 'web/data/assets/' . $n)) {
 
-                             $n = 'default';
 
-                         }
 
-                         $template = $v . 'template';
 
-                         if (!is_dir(PATH . $template)) {
 
-                             $template = $v . 'main/template';
 
-                         }
 
-                         $e = ' web/data/assets/' . $n . ' web/data/compile/' . $n . ' --exclude=' . $template;
 
-                     } else {
 
-                         $e = ' --exclude=' . $v . 'template';
 
-                     }
 
-                     $path .= ' ' . $v . $e;
 
-                 }
 
-             }
 
-         }
 
-         self::command('tar -czf install/' . $name . '.tar.gz ' . $path . ' --exclude-vcs');
 
-     }
 
-     protected static function method_init_laravel()
 
-     {
 
-         self::command('composer create-project laravel/laravel --prefer-dist');
 
-     }
 
-     protected static function method_create()
 
-     {
 
-         self::method_install('create');
 
-     }
 
-     protected static function method_mysql()
 
-     {
 
-         $text = array
 
-             (
 
-             '请输入命令以执行相应操作:'
 
-             , 'backup:备份mysql'
 
-             , 'restore:恢复mysql'
 
-             , '请在输入命令之后按回车键',
 
-         );
 
-         $shell = self::input($text);
 
-         switch ($shell) {
 
-             case 'backup':
 
-                 Mysql::backup();
 
-                 break;
 
-             case 'restore':
 
-                 Mysql::restore();
 
-                 break;
 
-             default:
 
-                 echo "未定义的方法";
 
-                 break;
 
-         }
 
-     }
 
-     protected static function method_install($value)
 
-     {
 
-         $value .= '.tar.gz';
 
-         if (self::check()) {
 
-             self::command('wget -c ' . self::$package . $value);
 
-             self::command('tar -zxvf ' . $value);
 
-             self::command('rm -rf ' . $value);
 
-             if ($value == 'composer') {
 
-                 self::method_init($value);
 
-             }
 
-         } elseif (class_exists('PharData')) {
 
-             self::$check = true;
 
-             $path = dirname(__FILE__) . '/';
 
-             file_put_contents($path . $value, file_get_contents(self::$package . $value));
 
-             $phar = new PharData($value);
 
-             $phar->extractTo($path, null, true);
 
-             unlink($path . $value);
 
-         } else {
 
-             self::notice();
 
-         }
 
-     }
 
-     private static function copy($src, $dst, $path)
 
-     {
 
-         if (function_exists('system')) {
 
-             system('cp -R ' . $src . ' ' . $dst);
 
-         } else {
 
-             $path = str_replace(array('/', '..'), '', $path);
 
-             $dst = $dst . $path;
 
-             if (!is_dir($dst)) {
 
-                 mkdir($dst);
 
-             }
 
-             $dir = opendir($src);
 
-             while (false !== ($file = readdir($dir))) {
 
-                 if (($file != '.') && ($file != '..')) {
 
-                     if (is_dir($src . '/' . $file)) {
 
-                         $this->copyDir($src . '/' . $file, $dst . '/' . $file);
 
-                     } else {
 
-                         copy($src . '/' . $file, $dst . '/' . $file);
 
-                     }
 
-                 }
 
-             }
 
-             closedir($dir);
 
-         }
 
-     }
 
-     protected static function method_build($path = 'vendor')
 
-     {
 
-         //$exts = ['php','js','css','html'];
 
-         $exts = array('php', 'js', 'css', 'html');
 
-         $dir = dirname(__FILE__) . '/build/';
 
-         $path && system('cp -R ' . $path . ' ' . $dir);
 
-         $file = 'dever.phar';
 
-         $phar = new Phar($dir . $file, FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_FILENAME, $file);
 
-         $phar->startBuffering();
 
-         if ($path) {
 
-             foreach ($exts as $ext) {
 
-                 $phar->buildFromDirectory($dir, '/\.' . $ext . '$/');
 
-             }
 
-         }
 
-         $index = 'boot.php';
 
-         $phar->buildFromIterator
 
-             (
 
-             new ArrayIterator
 
-             (
 
-                 array
 
-                 (
 
-                     $index => $dir . $index,
 
-                 )
 
-             )
 
-         );
 
-         //$phar->delete('build.php');
 
-         $phar->setStub($phar->createDefaultStub($index, $index));
 
-         $phar->compressFiles(Phar::GZ);
 
-         $phar->stopBuffering();
 
-         //system('cp -R ' . $dir . $file . ' ' . $file);
 
-         $path && system('rm -rf ' . $dir . $path);
 
-     }
 
- }
 
- class Create extends Dever
 
- {
 
- }
 
- class Mysql extends Dever
 
- {
 
-     protected static function common()
 
-     {
 
-         $info['host'] = self::input('请输入mysql的主机地址:默认为localhost', 'localhost');
 
-         $info['username'] = self::input('请输入mysql的账号:默认为root', 'root');
 
-         $info['password'] = self::input('请输入mysql的密码:默认为空', '');
 
-         $info['database'] = self::input('请输入mysql的数据库名:');
 
-         if (!$info['host'] || !$info['username'] || !$info['password'] || !$info['database']) {
 
-             self::out('请输入正确的数据库信息!');die;
 
-         }
 
-         $info['file'] = PATH . 'web/data/sql/' . $info['database'];
 
-         $info['shell'] = ' -u' . $info['username'] . ' -p' . $info['password'] . ' -h' . $info['host'] . ' ';
 
-         return $info;
 
-     }
 
-     public static function backup()
 
-     {
 
-         $info = self::common();
 
-         $info['table'] = self::input('请输入mysql的表名(不输入则备份整个' . $info['database'] . '数据库):');
 
-         $info['type'] = self::input('请输入备份类型:1为备份全部,2为备份结构,3为备份数据');
 
-         $info['shell'] = 'mysqldump ' . $info['shell'];
 
-         if ($info['type'] == 2) {
 
-             $info['shell'] .= ' -d ' . $info['database'];
 
-         } elseif ($info['type'] == 3) {
 
-             $info['shell'] .= ' -t ' . $info['database'];
 
-         } else {
 
-             $info['shell'] .= ' ' . $info['database'];
 
-         }
 
-         if ($info['table']) {
 
-             $info['shell'] .= ' ' . $info['table'];
 
-             $info['file'] .= '.' . $info['table'];
 
-         }
 
-         $info['file'] .= '.sql';
 
-         $info['shell'] .= ' > ' . $info['file'];
 
-         self::command($info['shell']);
 
-         self::out('操作成功,输出路径:' . $info['file']);
 
-     }
 
-     public static function restore()
 
-     {
 
-         $info = self::common();
 
-         $info['new'] = self::input('请输入要恢复的全新数据库:为空则使用上边填的数据库', $info['database']);
 
-         $create_table = 'mysqladmin ' . $info['shell'] . ' create ' . $info['new'];
 
-         $info['shell'] = 'mysql ' . $info['shell'] . ' ' . $info['new'];
 
-         $info['file'] .= '.sql';
 
-         $info['shell'] .= ' < ' . $info['file'];
 
-         self::exe($create_table);
 
-         self::command($info['shell']);
 
-         self::out('操作成功,您已成功恢复' . $info['file'] . '里的数据');
 
-     }
 
- }
 
- Dever::handle();
 
 
  |