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

Тема в разделе "PHP", создана пользователем Denixxx, 30 апр 2014.

Модераторы: latteo
  1. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    Здравствуйте, народ.
    Решил поделиться своими маленькими, но очень полезными инструментами.
    Это скрипт-архиватор и скрипт-загрузчик.

    Зачем это?
    Данные инструменты я применяю для разработки Перейти по ссылке, но не только.
    Допустим, сделали новый сайт, протестировали. А клиент давать доступ к ФТП не спешит.
    И не надо! Делаете архив на сайте, где всё работает, а клиенту 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 года, надеюсь у вас не будет.

    И наконец
    Почему.
    Архив выкладывается по просьбе, озвученной в этой теме: https://www.nulled.cc/threads/245560/
     
    Последнее редактирование: 30 апр 2014
    Den1xxx, spas, Renny и 9 другим нравится это.
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.517
    Симпатии:
    1.365
    Спасибо за скрипт.
    Если отбросить код интерфейса то, остаётся вопрос отчего не использовали для этой задачи Перейти по ссылке?
    Которые могли бы сократить количество кода до 2 функций на 10-30 строк каждая.
     
    venetu и Denixxx нравится это.
  3. Denixxx

    Denixxx

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

    И да, код интерфейса — это наименее ценная часть скриптов. Вся соль в минимуме требований к хостингу, скорости и стабильности работы.
    Кроме того, в массив Загрузчика можно добавлять сколько угодно вариантов загрузки разных скриптов, создав тем самым полноценную установку линейки какого-то продукта.
     
    Последнее редактирование: 31 авг 2014
    pozhisni, Шумадан и ishkval нравится это.
  4. Aserus

    Aserus Постоялец

    Регистр.:
    16 ноя 2013
    Сообщения:
    78
    Симпатии:
    4
    имеются ли проблемы если стоит низкие ограничение оперативной памяти?
     
    Denixxx нравится это.
  5. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    Это может случаться, если пытаться качать файлы, считывая их в память целиком.
    Этот скрипт загрузчика качает архивы по частям через сокеты, складывая загруженное во временный файл.
    Скрипт при обрыве загрузке больших файлов пытается их докачивать, поэтому обрывы обычно не проблема, как и случаи если памяти мало.
    Так что конкретно с этим проблемы не замечены.
    Остальные ограничения, что замечены за 3 года, выложены в теме.
    Если увидите другие проблемы — пишите в теме, проверим, исправим.
    Хотя это вряд ли:)
     
    Последнее редактирование: 12 май 2014
    Prygun, ishkval и latteo нравится это.
  6. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    Обновление.
    В прошлом коде Загрузчика были найдены функции, deprecated в PHP 5.3+
    В связи с этим — кому надо перекачайте исправленный.

    Описание:

    Описание загрузчика почти не изменилось.
    Кстати качает свежий релиз Перейти по ссылке :)
     
    pozhisni, Prygun и ishkval нравится это.
  7. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    ОМГ. На 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;
    }
     
    Последнее редактирование: 3 дек 2014
  8. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    в таком случае wso2 уже давно написан :crazy:
     
  9. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    194
    А что это? По Гуглу есть ссылки про wso2, вроде как шелл на ява.
    Если это шелл, то я для этого пользуюсь файловым менеджером на PHP, который выкладывал здесь https://www.nulled.cc/threads/257693/
    Для быстрой правки файлов на хостинге — вполне достаточно.
     
    Шумадан нравится это.
  10. swerwer

    swerwer Создатель

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