Маленькие инструменты PHP разработчика.

Статус
В этой теме нельзя размещать новые ответы.

Denixxx

Мой дом здесь!
Регистрация
7 Фев 2014
Сообщения
244
Реакции
216
Здравствуйте, народ.
Решил поделиться своими маленькими, но очень полезными инструментами.
Это скрипт-архиватор и скрипт-загрузчик.

Зачем это?
Данные инструменты я применяю для разработки Для просмотра ссылки Войди или Зарегистрируйся, но не только.
Допустим, сделали новый сайт, протестировали. А клиент давать доступ к ФТП не спешит.
И не надо! Делаете архив на сайте, где всё работает, а клиенту 1 файлик — «закачай на сервер в папочку и запусти». Через 5-10 секунд у клиента на сайте всё крутится, не было — и вдруг есть! Производит просто волшебное впечатление, кошелёк рассупонивается просто сам собой. Ещё решение просто незаменимо для массовой установки ГС-клонов.

Откуда?
Данное решение писалось «для себя любимого», потому для архивации выбран формат tar.gz — работает на большинстве хостингов, при архивации сохраняет права, соответственно после распаковки ничего ручками править не нужно.

Ссылка на закачку:
Скрытое содержимое доступно для зарегистрированных пользователей!


Как работает?
В архиве 2 файла:
1. backup.php — бекапер, работает почти везде, необходимые библиотеки зашиты внутри.
Архивирует текущий каталог для создания модуля в формате последующей установки. Обязательно нужно прописать имя файла.
Конечный результат — файл архива *.tar.gz и файл установок *.ini
В архиве окажется вся текущая папка с подпапками и правами. В файле установок окажется техническая информация для установщика ReloadCMS, она нужна только для установки модулей в систему. Если делаете бекап для своих целей, игнорируйте этот файл.
Скриншот бекапера:
backuper2014.png
2. download2014.php — загрузчик и распаковщик, работает почти везде, необходимые библиотеки зашиты внутри.
Загружает архив ReloadCMS в формате *.tar.gz в корень папки и распаковывает вместе с правами. Может загружать и распаковывать что угодно, созданное в формате архива *.tar.gz Для этих своих целей измените массив, начинающийся с 12 строчки Загрузчика, особенно параметр «download» — откуда загружать. Можно создать несколько вариантов загрузки скрипта, добавив массив элементы по образцу.
Можете попробовать и установку ReloadCMS — грузит как раз последнюю версию, все проверено и работает.
Иногда я использую его просто для быстрой чистки текущего каталога от мусора, ибо удаляет всё из корня быстрей чем по ФТП.
Скриншот загрузчика:
downloader2014.png

На каких условиях распространяется?
Условия распространения — GPL 2.0/CC BY
При публикации на сторонних от данного форума ресурсах ссылка на первоисточник обязательна:
Скрытое содержимое доступно для зарегистрированных пользователей!


Когда может не сработать данный набор скриптов?
— На бесплатных/дешёвых хостингах, когда хостер режет трафик/сокеты/функции для работы с удаленными файлами.
— Если внутри архива попадётся файл с сильно длинным путём, может не сархивировать или не распаковать.
Было 1 раз такое за 3 года, надеюсь у вас не будет.

И наконец
Почему.
Архив выкладывается по просьбе, озвученной в этой теме: Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
Спасибо за скрипт.
Если отбросить код интерфейса то, остаётся вопрос отчего не использовали для этой задачи Для просмотра ссылки Войди или Зарегистрируйся или Для просмотра ссылки Войди или Зарегистрируйся?
Которые могли бы сократить количество кода до 2 функций на 10-30 строк каждая.
 
Спасибо за скрипт.
Если отбросить код интерфейса то, остаётся вопрос отчего не использовали для этой задачи Для просмотра ссылки Войди или Зарегистрируйся или Для просмотра ссылки Войди или Зарегистрируйся?
Которые могли бы сократить количество кода до 2 функций на 10-30 строк каждая.
Пожалуйста.
1. Формат zip или phar не годится, ибо не хранит права на файлы. Если после распаковки потом менять права вручную по ФТП — не стоило и писать скрипт. Да, вот такой я ленивый:)
2. Не было цели сократить количество кода, была цель создать универсальный инструмент.
3. В Загрузчике много места занимает локализация. В примере 3 языка, легко дописывается сколько нужно. Это особенность, к которой привыкли пользователи движка — локализация из коробки — зачем её сокращать?
Это удобно, особенно когда распространяешь Загрузчиком какой-либо скрипт/движок.

И да, код интерфейса — это наименее ценная часть скриптов. Вся соль в минимуме требований к хостингу, скорости и стабильности работы.
Кроме того, в массив Загрузчика можно добавлять сколько угодно вариантов загрузки разных скриптов, создав тем самым полноценную установку линейки какого-то продукта.
 
Последнее редактирование:
имеются ли проблемы если стоит низкие ограничение оперативной памяти?
 
имеются ли проблемы если стоит низкие ограничение оперативной памяти?
Это может случаться, если пытаться качать файлы, считывая их в память целиком.
Этот скрипт загрузчика качает архивы по частям через сокеты, складывая загруженное во временный файл.
Скрипт при обрыве загрузке больших файлов пытается их докачивать, поэтому обрывы обычно не проблема, как и случаи если памяти мало.
Так что конкретно с этим проблемы не замечены.
Остальные ограничения, что замечены за 3 года, выложены в теме.
Если увидите другие проблемы — пишите в теме, проверим, исправим.
Хотя это вряд ли:)
 
Последнее редактирование:
Обновление.
В прошлом коде Загрузчика были найдены функции, deprecated в PHP 5.3+
В связи с этим — кому надо перекачайте исправленный.
Скрытое содержимое доступно для зарегистрированных пользователей!

Описание:
Скрытое содержимое доступно для зарегистрированных пользователей!

Описание загрузчика почти не изменилось.
Кстати качает свежий релиз Для просмотра ссылки Войди или Зарегистрируйся :)
 
хорошая вещь в комбинации с Sypex Dumper
ОМГ. На 99% сайтов этот монстр не нужен.
Бекап и восстановление таблиц БД пишется за полчаса.
Вот например из движка эти функции:
PHP:
/* backup the db OR just a table */
function backup_tables($tables = '*', $full_backup = true) {
   //Delimiter
   $delimiter = "; \n  \n";
   if($tables == '*')
   {
     $tables = array();
     $result = mysql_query('SHOW TABLES');
     while($row = mysql_fetch_row($result))
     {
       $tables[] = $row[0];
     }
   }
   else
   {
     $tables = is_array($tables) ? $tables : explode(',',$tables);
   }
  $return='';

   //cycle through
   foreach($tables as $table)   {
     $result = mysql_query('SELECT * FROM '.$table);
     $num_fields = mysql_num_fields($result);
     $return.= 'DROP TABLE IF EXISTS `'.$table.'`'.$delimiter;
     $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
     $return.=$row2[1].$delimiter;
  if ($full_backup) {
     for ($i = 0; $i < $num_fields; $i++)  {
       while($row = mysql_fetch_row($result)) {
         $return.= 'INSERT INTO `'.$table.'` VALUES(';
         for($j=0; $j<$num_fields; $j++)   {
           $row[$j] = addslashes($row[$j]);
           $row[$j] = str_replace("\n","\\n",$row[$j]);
           if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
           if ($j<($num_fields-1)) { $return.= ','; }
         }
         $return.= ')'.$delimiter;
       }
      }
     } else {
     $return = preg_replace("#AUTO_INCREMENT=[\d]+ #is", '', $return);
     }
     $return.="\n\n\n";
   }

   //save file
   $backname = post('backupname','db-backup').'-';
  $backname='backups/sql/'.$backname.gmdate("Y-m-d_H-i-s",time()).'.sql';
   $handle = fopen($backname,'w+');
   fwrite($handle,$return);
   fclose($handle);
return 'Backup complete - '.$backname;
}



function fn_restore_tables($sqlFileToExecute) {
   //Delimiter
   $delimiter = "; \n  \n";
  // Load and explode the sql file
  $f = fopen($sqlFileToExecute,"r+");
  $sqlFile = fread($f,filesize($sqlFileToExecute));
  $sqlArray = explode($delimiter,$sqlFile);

  //Process the sql file by statements
  foreach ($sqlArray as $stmt) {
  if (strlen($stmt)>3){
       $result = mysql_query($stmt);
         if (!$result){
           $sqlErrorCode = mysql_errno();
           $sqlErrorText = mysql_error();
           $sqlStmt  = $stmt;
           break;
      }
      }
  }

if (empty($sqlErrorCode)) return 'Success — '.$sqlFileToExecute;
else return $sqlErrorText.'<br/>'.$stmt;
}
 
Последнее редактирование:
в таком случае wso2 уже давно написан :crazy:
 
в таком случае wso2 уже давно написан :crazy:
А что это? По Гуглу есть ссылки про wso2, вроде как шелл на ява.
Если это шелл, то я для этого пользуюсь файловым менеджером на PHP, который выкладывал здесь Для просмотра ссылки Войди или Зарегистрируйся
Для быстрой правки файлов на хостинге — вполне достаточно.
 
ОМГ. На 99% сайтов этот монстр не нужен.
Бекап и восстановление таблиц БД пишется за полчаса.
Вот например из движка эти функции:

А чем хуже mysqldump для таких целей, тогда? Если нужен в веб-интерфейсе - просто через exec его вызывать - и всё. Так же и развёртку бэкапа по клику реализовать легко)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху