サイト管理人Blog

cloudfreeで「さぁ始めましょう♪」

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 が得られました。(つづく)

投稿へのコメントは コチラ(掲示板) へお願いします。

サイト管理人Blog