#环境:
客户端:windows10,python3.6
服务端:PHP
#说明:
使用python脚本。调用HUGO生成静态文件,打包public然后上传。
虚拟主机的PHP脚本。删除所有文件,解压压缩包。
效果:我这个几十篇文章的小站,写完博文。双击PY脚本,1-2秒就能重新部署好。配合香港小鸡鸡,速度嗷嗷的。
【理论上适用于所有静态博客】
#服务端PHP文件(单文件): x.php文件内容,把x.php文件放到虚拟主机即可,Key和文件名可自行修改
<?php
//认证KEY
$mykey = '68464331-0d15-4118-6213-964c5d5eftee';
if (!isset($_POST["my_key"]) || $_POST["my_key"] != $mykey) exit('get out!');
//临时压缩文件名
$tmp_filename = '09asf0j0ihasdfsadfasdifna.zip';
$tmp_filename_full_path = getcwd().DIRECTORY_SEPARATOR.$tmp_filename;
// 允许上传的图片后缀
$allowedExts = array("zip");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // 获取文件后缀名
if (($_FILES["file"]["size"] < 20480000) // 小于 20000 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
exit();
}
else
{
if (file_exists( $tmp_filename_full_path ))
{
echo $tmp_filename . " 文件已经存在。\n ";
}
else
{
//清空当前目录所有文件,排除文件自身
print('clean files... \n');
do_rmdir(getcwd(), false);
//exit();
//var_dump( glob(getcwd().'\*') );
// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
move_uploaded_file($_FILES["file"]["tmp_name"], $tmp_filename_full_path);
echo "file upload ok! \n";
}
}
}
else
{
echo "非法的文件格式\n".$_FILES["file"]["name"];
exit();
}
//解压缩到当前目录
$zip = new ZipArchive;
if ($zip->open( $tmp_filename_full_path ) === TRUE) {
$zip->extractTo( getcwd() );
$zip->close();
echo 'uzip ok! \n';
}
else
{
echo 'uzip failed\n';
exit();
}
//删除压缩文件
if (!unlink($tmp_filename_full_path)) echo ("Error deleting tmp_zip_file\n");
else echo ("Deleted tmp_zip_file ok! \n");
///////////////////////////////////函数部分
/**
* 清空/删除 文件夹
* @param string $dirname 文件夹路径
* @param bool $self 是否删除当前文件夹
* @return bool
*/
function do_rmdir($dirname, $self = true) {
if (!file_exists($dirname)) {
return false;
}
//排除自身
if ( $dirname == getcwd().'/'.basename(__FILE__)) {
return false;
}
if (is_file($dirname) || is_link($dirname)) {
return unlink($dirname);
}
$dir = dir($dirname);
if ($dir) {
while (false !== $entry = $dir->read()) {
if ($entry == '.' || $entry == '..') {
continue;
}
do_rmdir($dirname . '/' . $entry);
}
}
$dir->close();
$self && rmdir($dirname);
}
?>
#PYTHON上传脚本
#需要配置好HUGO的环境变量,任意目录都可调用
#HUGO目录:d:\hugo\mashaji.cc
#脚本地址:d:\hugo\x.py
#HUGO生成静态文件地址:d:\hugo\mashaji.cc\public
#脚本只要放在和mashaji.cc同级路径即可。 需要修改的地方看注释,双击即可运行
python脚本内容:x.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#压缩静态网页文件(ZIP)。通过POST上传
import os
import zipfile
from pathlib import PurePath
import subprocess
#判断是否存在requests模块。没有则安装
try:
import requests
except :
import os
os.system('pip install requests')
import requests
#本文件路径
this_path = PurePath(os.getcwd())
#######################需要修改的部分
#提交网址,密匙,这里需要改成自己的网址。hugo目录名(和本文件同级的HUGO目录名称)
my_url = 'https://mashaji.cc/x.php'
my_key = '68464331-0d15-4118-6213-964c5d5eftee'
hugo_path_name = 'mashaji.cc'
#######################需要修改的部分结束
#文件路径和临时压缩包地址,无需改动
hugo_path = str( this_path / hugo_path_name )
source_dir = str( this_path / hugo_path_name / 'public' )
zipname = str( this_path / 'hugo_tmp.zip' )
#hugo重新生成静态
print ('===========hugo重新生成静态文件...')
p = subprocess.Popen(args='hugo.exe --cleanDestinationDir --forceSyncStatic --gc --ignoreCache --minify', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, cwd=hugo_path)
p.wait()
print(p.stdout.read())
print ('===========静态文件生成完毕...')
#压缩文件
x = 1
startdir = source_dir # 要压缩的文件夹路径
file_news = zipname # 压缩后文件夹的名字
z = zipfile.ZipFile(file_news, 'w', zipfile.ZIP_DEFLATED) # 参数一:文件夹名
for dirpath, dirnames, filenames in os.walk(startdir):
fpath = dirpath.replace(startdir, '')
fpath = fpath and fpath + os.sep or ''
for filename in filenames:
z.write(os.path.join(dirpath, filename), fpath+filename)
x = x +1
z.close()
print ('=>压缩成功*'+str(x))
#上传文件
print ('=>开始上传文件:'+ zipname)
r = requests.post(url=my_url,data={'my_key':my_key}, files={'file' : open( zipname , 'rb')})
print('=========上传结果==========')
print(r.text)
print('=========上传结果==========')
#删除临时压缩包
print('=>删除临时压缩包:'+ zipname)
os.remove(zipname)
os.system('pause') #按任意键继续