安排网站更改
Schedule website changes
我偶尔需要在周一 00:00 对网站进行一些更改。这些都是非常小的修改,例如更改图像或单词。
该网站是使用 PHP 构建的,不使用数据库。
必须在半夜手动执行它会非常烦人,所以我使用纪元时间和 If 语句,如下所示:
<img src="/
<?php
$timestamp=time();
if ($timestamp<1433769105) {
echo "image1.jpg";
}
else {
echo "image2.jpg";
}
?>
">
它完成了这项工作,但想象一下 20 段这样的代码分散在几个 php 文件中。看起来一点也不专业。更不用说删除它们所花费的时间了。
我正在寻找这种方法的替代方法,但我似乎没有想出任何办法。我愿意接受任何建议。
在单独的服务器上为自己编写一个部署服务可能会对您有所帮助,该服务可以在星期一 00:00 安排 FTP 上传(使用 cron 作业)。如果你想省点钱,你可以使用 Raspberry Pi:)
更详细地说,服务器(或 Pi)可以保留一份准备好上传的新文件的副本,以及准备好上传到的 FTP 信息的副本。然后您可以编写 bash 脚本通过 FTP 详细信息将新文件上传到您的网络服务器。
然后您只需在星期一 00:00 为 运行 bash 脚本创建一个 cron 作业。高枕无忧,只要您的新代码在线并可在星期一 00:00 通过 FTP.
接收文件,您的新代码就会在您的服务器上。
要扩展您的部署脚本,您可以添加日志记录,以便您可以在第二天早上醒来并查看部署日志以查看是否遗漏了任何文件或是否出现了任何错误。
希望对您有所帮助!
我会在某个地方放一个 migrations
文件夹,然后像
那样放迁移
<?php
// when the time has come
if (time() > strtotime())
{
// do the changes you wanted to make
rename("image1.jpg", "image2.jpg");
// move this migration into the done folder so
// that it doesn't get executed once more
rename(PHP_SELF, __DIR__."/done/".PHP_SELF);
}
然后您只需包含迁移文件夹中的所有文件。然后每个迁移检查它是否应该被执行。
// include all files in migrations
foreach (new DirectoryIterator('migrations') as $script)
{
if ($script->isFile() && substr($script, -4) === '.php')
include 'migrations/' . $script;
}
或者 将 date/timestamp 放入迁移名称中,并让它仅在时机成熟时执行:
2015-06-09.php
或 1433800800.php
<?php
rename("image1.jpg", "image2.jpg");
在你的index.php
// include all files in migrations
foreach (new DirectoryIterator('migrations') as $script)
{
// only execute *.php files
if (! $script->isFile() || substr($script, -4) !== '.php')
continue;
// extract date
$date = substr($script, 0, -4);
// convert string dates to timestamp
// if they are not timestamps already
if (! is_numeric($date))
$date = strotime($date);
// time has come?
if (time() >= $date)
{
require 'migrations/' . $script;
// move out of migrations folder so that it
// doesn't get executed once more
rename('migrations/' . $script, 'migrations/done/' . $script);
}
}
我偶尔需要在周一 00:00 对网站进行一些更改。这些都是非常小的修改,例如更改图像或单词。 该网站是使用 PHP 构建的,不使用数据库。 必须在半夜手动执行它会非常烦人,所以我使用纪元时间和 If 语句,如下所示:
<img src="/
<?php
$timestamp=time();
if ($timestamp<1433769105) {
echo "image1.jpg";
}
else {
echo "image2.jpg";
}
?>
">
它完成了这项工作,但想象一下 20 段这样的代码分散在几个 php 文件中。看起来一点也不专业。更不用说删除它们所花费的时间了。
我正在寻找这种方法的替代方法,但我似乎没有想出任何办法。我愿意接受任何建议。
在单独的服务器上为自己编写一个部署服务可能会对您有所帮助,该服务可以在星期一 00:00 安排 FTP 上传(使用 cron 作业)。如果你想省点钱,你可以使用 Raspberry Pi:)
更详细地说,服务器(或 Pi)可以保留一份准备好上传的新文件的副本,以及准备好上传到的 FTP 信息的副本。然后您可以编写 bash 脚本通过 FTP 详细信息将新文件上传到您的网络服务器。
然后您只需在星期一 00:00 为 运行 bash 脚本创建一个 cron 作业。高枕无忧,只要您的新代码在线并可在星期一 00:00 通过 FTP.
接收文件,您的新代码就会在您的服务器上。要扩展您的部署脚本,您可以添加日志记录,以便您可以在第二天早上醒来并查看部署日志以查看是否遗漏了任何文件或是否出现了任何错误。
希望对您有所帮助!
我会在某个地方放一个 migrations
文件夹,然后像
<?php
// when the time has come
if (time() > strtotime())
{
// do the changes you wanted to make
rename("image1.jpg", "image2.jpg");
// move this migration into the done folder so
// that it doesn't get executed once more
rename(PHP_SELF, __DIR__."/done/".PHP_SELF);
}
然后您只需包含迁移文件夹中的所有文件。然后每个迁移检查它是否应该被执行。
// include all files in migrations
foreach (new DirectoryIterator('migrations') as $script)
{
if ($script->isFile() && substr($script, -4) === '.php')
include 'migrations/' . $script;
}
或者 将 date/timestamp 放入迁移名称中,并让它仅在时机成熟时执行:
2015-06-09.php
或 1433800800.php
<?php
rename("image1.jpg", "image2.jpg");
在你的index.php
// include all files in migrations
foreach (new DirectoryIterator('migrations') as $script)
{
// only execute *.php files
if (! $script->isFile() || substr($script, -4) !== '.php')
continue;
// extract date
$date = substr($script, 0, -4);
// convert string dates to timestamp
// if they are not timestamps already
if (! is_numeric($date))
$date = strotime($date);
// time has come?
if (time() >= $date)
{
require 'migrations/' . $script;
// move out of migrations folder so that it
// doesn't get executed once more
rename('migrations/' . $script, 'migrations/done/' . $script);
}
}