2012-01-03 5 views
0

У меня есть набор файлов для пользовательской CMS, и теперь, когда клиентская база на самом деле растет, мне нужен авто-updater, который будет делать это через работу cron каждый ночь возможно.Рекомендации по автоматическому обновлению PHP-скриптов

В основном это необходимо для замены всех файлов под/admin (включая файлы .php и .js, без .css-файлов, поскольку он постоянно ссылается на мастер-домен).

Мне интересно, какой лучший способ сделать это - мои файлы не находятся в публичном репозитории github любого типа, поэтому мне просто нужно вручную ZIP и загрузить, возможно, или просто сделать это на сервере файловый менеджер для gzip?

Мне просто нужны некоторые рекомендации относительно того, как это сделать, чтобы уменьшить проблемы безопасности и т. Д. Это лучший подход? Чтобы загрузить сжатый файл, а затем распаковать его? При распаковке файла он автоматически перезаписывает существующие файлы без вопросов?

Я не хочу использовать утилиту командной строки для этого, так как некоторые из учетных записей сидят в OUTSIDE моего сервера, поэтому я не могу реально копировать файлы через SSH или что-то в этом роде.

Благодарим за помощь.

ответ

1

Вы могли бы попытаться запустить скрипт хрон PHP, что петли через целевые каталоги на билда клиента, создает хэш его содержимого, а затем сравнивает его с вашей основной копией:

$files = array(); 
if ($handle = opendir('/path/to/files')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      $file_hash = md5(file_get_contents('/path/to/files'.$entry)); 
      compare_and_get_contents('/path/to/files'.$entry, $file_hash); 
     } 
    } 
    closedir($handle); 
} 

В compare_and_get_contents () функция будет выглядеть примерно так:

function compare_and_get_contents($file_path,$hash){ 
    $get_code = file_get_content('http://mysite.com/compare?path='.urlencode($file_path).'&hash='.$hash); 
    if (strlen($get_code)>0){ 
     file_put_contents($file_path,$get_code); 
    } 
} 

Вы бы просто нужно написать страницу (http://mysite.com/compare), что по сравнению с хэш-версии клиента в хэш родительской версии и печатает код родительской версии, если они не совпадают. Вы также можете зашифровать данные по мере их переноса, если это вызывает беспокойство. Очевидно, для этого кода потребуется немного переработать, и есть несколько потенциальных проблем с безопасностью и разрешениями, но он может выполнить эту работу, и это будет менее интенсивным, чем передача всего этого в виде zip-файла.

+0

Я закончил делать что-то вроде этого - чтобы получить файл с материнского сервера, а затем положить zip-файл, а затем распаковать! – jeffkee

1

Использование ВКС как мерзавец вы можете создать хрон, который будет вызывать Сорта каждую ночь, как

git pull 

Его не требуется, что хранилище является открытым, но сервер должен иметь доступ.

+0

Отличная идея - однако, чтобы обеспечить доступ к серверу, мне нужна гораздо большая учетная запись GIT. Я надеюсь на более простое решение, используя загрузчик файлов PHP, подобно тому, как это делает Wordpress. – jeffkee

+0

@jeffkee Просто разместите репозиторий git на своем собственном сервере? –

+0

Не знаю, что вы подразумеваете под «GIT account». Вам просто нужна система с жестким диском с размером по выбору и установленным SSH-сервером. Это все, что нужно. – KingCrunch

Смежные вопросы