WordPressローカル環境を1Clickで更新(2/5)
2023-12-06 記載
概要 : ローカルWPサイトをサーバと同じ状態に更新する処理を1Clickでしたい。
関連記事:(1/5), (3/5), (4/5), (5/5)
Keyword : WordPress, BackWPup, FTP, VBA, MariaDB, SQL,
(前回のつづきより)
バックアップ開始のURLを呼びます。
MSXML2.XMLHTTP Objectを使います。
Dim http As Object: Set http = CreateObject("MSXML2.XMLHTTP")
'Dim http As New MSXML2.XMLHTTP60 '参照:Microsoft XML6.0
Dim sURL As String
Dim dBegin As Date
'処理開始日時を記録
dBegin = Now
sURL = "https://cfsid.cloudfree.jp/mywordpress/wp-cron.php?_nonce=jobstartkey&backwpup_run=runext&jobid=1
"
http.Open "GET", sURL
Call http.Send
次にFTPで作成されたファイルをダウンロードするのですが、このとき必要になるのが処理開始日時を保管した dBegin。
バックアップフォルダーには複数のファイルが存在するでしょうから、どれかを決めるのに、この日時を使います。
この日時よりも新しいのが、たったいま作成したファイルで、それとわかります。
対象サーバフォルダのファイル一覧を取得します。
svNN, cfsid_ftpuser@cfsid.cloudfree.jp, password
/cfsid.cloudfree.jp/public_html/mywordpress/wp-content/uploads/backwpup-jobstartkey-backups
c:\work\ls.txt
c:\work\cmd.txt
は環境にあわせて書き換え。
Dim sCmd As String
'FTP接続情報
sCmd = "open svNN.cloudfree.ne.jp" & vbNewLine
sCmd = sCmd & "cfsid_ftpuser@cfsid.cloudfree.jp" & vbNewLine
sCmd = sCmd & "password" & vbNewLine
sCmd = sCmd & "BINARY" & vbNewLine
'backupフォルダ内のファイル一覧を取得
sCmd = sCmd & "cd /cfsid.cloudfree.jp/public_html/mywordpress/wp-content/uploads/backwpup-jobstartkey-backups" & vbNewLine
sCmd = sCmd & "ls ./ c:\work\ls.txt" & vbNewLine
sCmd = sCmd & "quit" & vbNewLine
'FTPコマンドをファイルに出力
Dim adoStream As Object:Set adoStream = CreateObject("ADODB.Stream")
'Dim adoStream As New ADODB.Stream '参照:Microsoft ActiveX Data Objects 2.8 Library
adoStream.Charset = "utf-8"
adoStream.Open
adoStream.WriteText sCmd
adoStream.SaveToFile "c:\work\cmd.txt", 2 '2=adSaveCreateOverWrite
adoStream.Close
上記処理でFTPコマンドを並べたテキストファイルが作成されます。
open svNN.cloudfree.ne.jp
cfsid_ftpuser@cfsid.cloudfree.jp
password
BINARY
cd /cfsid.cloudfree.jp/public_html/mywordpress/wp-content/uploads/backwpup-jobstartkey-backups
ls ./ c:\work\ls.txt
quit
標準モジュールにWinAPIを定義しておきます。
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
FTPで対象フォルダの一覧を取り、バックアップファイルを定めます。
Dim wsh As Object: Set wsh = CreateObject("WScript.Shell")
'Dim wsh As New IWshRuntimeLibrary.WshShell '参照:Windows Script Host Object Model
Dim iReTry As Long
Dim vLine As Variant
Dim sYDMHNS As String
Dim sText As String
iReTry = 3
Do
'Backup作成中を考慮して3秒待機
Sleep 3000
'FTP BackupFileListを取得
Call wsh.Run("FTP -i -s:c:\work\cmd.txt", WaitOnReturn:=True)
Call adoStream.Open
Call adoStream.LoadFromFile("c:\work\ls.txt")
sText = adoStream.ReadText
Call adoStream.Close
'処理開始日時より新しいFileが作成したBackupFile
For Each vLine In Split(sText, vbNewLine)
'ex. 2023-12-06_07-08-10_ABCDEFG.zip
sYDMHNS = Left(vLine, 10) & " " & Replace(Mid(vLine, 12, 8), "-", ":")
If IsDate(sYDMHNS) Then
If CDate(sYDMHNS) >= dBegin Then
Exit Do
End If
End If
Next
'3回してもダメならエラー backup作業がHeavyならSleep 3000 を増やすこと
iReTry = iReTry - 1: If iReTry = 0 Then Stop
Loop
FTPで取得した対象フォルダのls出力は以下のような内容です。
.
..
.donotbackup
2023-12-04_04-00-06_ABCDEFGH02.zip
2023-12-05_04-00-06_IJKLMNOP02.zip
2023-12-05_16-53-57_QRSTUVWX01.zip
バックアップファイルをダウンロードします。
ダウンロードしたあとは削除しておきます。
vLine = “2023-12-05_16-53-57_QRSTUVWX01.zip”
になっているとします。
'FTP接続情報
sCmd = "open svNN.cloudfree.ne.jp" & vbNewLine
sCmd = sCmd & "cfsid_ftpuser@cfsid.cloudfree.jp" & vbNewLine
sCmd = sCmd & "password" & vbNewLine
sCmd = sCmd & "BINARY" & vbNewLine
'backupフォルダ内のファイル一覧を取得
sCmd = sCmd & "cd /cfsid.cloudfree.jp/public_html/mywordpress/wp-content/"
sCmd = sCmd & "uploads/backwpup-jobstartkey-backups" & vbNewLine
sCmd = sCmd & "get " & vLine & " c:\work\" & vLine & vbNewLine
sCmd = sCmd & "delete " & vLine & vbNewLine
sCmd = sCmd & "quit" & vbNewLine
'FTPコマンドをファイルに出力
adoStream.Open
adoStream.WriteText sCmd
adoStream.SaveToFile "c:\work\cmd.txt", 2 '2=adSaveCreateOverWrite
adoStream.Close
上記処理でFTPコマンドを並べたテキストファイルが作成されます。
open svNN.cloudfree.ne.jp
cfsid_ftpuser@cfsid.cloudfree.jp
password
BINARY
cd /cfsid.cloudfree.jp/public_html/mywordpress/wp-content/uploads/backwpup-jobstartkey-backups
get 2023-12-05_16-53-57_QRSTUVWX01.zip c:\work\2023-12-05_16-53-57_QRSTUVWX01.zip
delete 2023-12-05_16-53-57_QRSTUVWX01.zip
quit
ダウンロード、解凍、とすまして、~.sql を確認。
cfsid_mywordpress.sql
は各自の環境次第。
'FTP実行
Call wsh.Run("FTP -i -s:c:\work\cmd.txt", WaitOnReturn:=True)
'ダウンロードフィルを解凍します
sCmd = "powershell -NoProfile -ExecutionPolicy Unrestricted Expand-Archive"
sCmd = sCmd & " -Path c:\work\" & vLine & " -DestinationPath c:\work\ -Force"
Call wsh.Run(sCmd, WaitOnReturn:=True)
'一息いれて
Sleep 500
If Dir("c:\work\cfsid_mywordpress.sql") <> "" Then
'目的ファイルが得られたら不要ファイルを削除
Kill "c:\work\" & vLine
Kill "c:\work\backwpup_readme.txt"
Kill "c:\work\manifest.json"
Kill "c:\work\ls.txt"
Kill "c:\work\cmd.txt"
End If
以上でWordPressの全テーブルが入った ~.sql が得られました。(つづく)