自动PHP脚本更新程序指南


Guidelines for an automated PHP script updater

我有一组用于定制CMS的文件,现在客户群实际上正在增长,我需要某种类型的自动更新程序,可能每天晚上通过cron作业进行更新。

基本上它需要替换/admin下的所有文件(包括。php和。js文件,没有。css文件,因为它一直引用主域)。

我想知道最好的方法是什么-我的文件不在任何类型的公共github存储库上,所以我只需要手动压缩和上传,或者只是在服务器文件管理器上做gzip ?

我只是需要一些关于如何减少安全问题等的指导方针。这是最好的方法吗?下载压缩文件,然后解压缩它?解压缩文件时,是否会毫无疑问地自动覆盖现有文件?

我不想为此使用命令行实用程序,因为一些帐户位于我的服务器之外,所以我不能通过SSH或任何类似的方式进行任何文件复制。

谢谢你的帮助。

您可以尝试运行cron 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文件传递相比,它占用的带宽更少。

使用像git这样的vcs,你可以创建一个cron,它将每天晚上调用cvs,如

git pull

不是必需的,存储库是公共的,但是服务器需要访问