はてなからWordPressへの移転(2) 書き換えプログラム公開

続きです。

書き換えプログラム公開

はてなからWordpressに移行する時、いくつかの障害を乗り越える必要がありました。これを自動的にエクスポートファイルを書き換えることで解決するプログラムを作りました。次の3点の機能を実装しています。

  • パーマリンクの形式がはてなとwordpressで異なるため、インポートしても記事が表示されない不具合を直す
  • はてなのブログカードがWordpressでは表示されないので、テキストリンクに変換する、またはPz-LinkCardプラグイン用のリンクに書き換える
  • はてなキーワードへのリンクを全削除する(はてなブログproを使っていない人向け)

プログラムはこちらです。Windows専用です。exeファイルが入ってるのでダウンロード時に警告が出るかもしれませんが、ウイルスは検出されませんでした。

はてな to WordPress

簡単に使い方を書いておきます。

まずはてなブログからエクスポートしたファイルを用意します。

20160925_3

次にHatenaToWP.zipファイルを解凍して、HatenaToWP.exeを起動します。

20160925_4

「選択…」を押してさっき用意したファイルを選択します。

20160925_5

「ブログカードの取り扱い」は、テキストリンクに変換するか、ブログカードにするか好きな方を選択してください。「Pz-LinkCard形式」を選択する場合は、事前にWordPressの「プラグイン」からPz-LinkCardをインストールしておいてください。

「変換」ボタンを押すと0.5秒ほどで変換が終了します。入力ファイル名に

WP_

を頭に挿入したファイルが作成されます。この例ではWP_rokujo.hatenadiary.com.export.txt という名前になりました。

20160925_6

あとはこのファイルを、Wordpress

ツール→インポート→Movable Type と TypePad

からインポートして、終わりです。

20160925_8

 

当ブログではこの機能を使って、ほぼ前のブログの体裁を保ちつつ移行することに成功しました。

20160925

20160925_2

ブログカードのソーシャルカウント機能が動作していないのが気になりますが、動作には問題ありません。いずれ修正できたらします。

このツールを使って、はてなからWordpressへ引っ越すための敷居が下がることを望んでいます。機能追加の要望や不具合があればぜひ報告してください。治します。ただし、不具合修正のためには、面倒ですがあなたのブログのエクスポートファイルをデバッグ用にメール送付してください。ブログはもともとweb上で公開しているものですから特に問題ないと考えていますが、デバッグ後は責任をもってデータを消去いたします。

 

今後の課題としては、

  • はてな上に保存されている画像の一括取得機能とリンクの置き換え
  • ブログ内リンクのアドレス自動書き換え

の機能があると便利なのですが、手間がかかるのでまだ実装していません。

レンタルサーバー、独自ドメインについて

レンタルサーバーは月500円程度、独自ドメインは年1500円程度で取得できます。独自ドメインはお名前.comというサイトで登録しましたが、ここは1年目の料金が17円~からと激安なのに、2年目以降の料金が跳ね上がったりすることがあります。

料金はこちらを参考にして下さい。.net、.org、.bizなどは2年目以降も安いですが、.websiteは1年目99円なのに2年目以降2980円、.onlineに至っては2年目以降4980円です。注意してください。


outlookのアイテムからヘッダ内容を読み込む

メモ

outlookをC#から操作するとき、メールのヘッダ内容だけ読み込みたいことがありますが、outlook付属のインターフェースにはヘッダを表すプロパティがありません。
長い時間をかけて調査したら、次のサイトが引っかかりました。
[Solved] Outlook add-in in C#: get message header? – CodeProject

古いバージョンのC#のコードに翻訳すると、次のようになります。
http://schemas.microsoft.com/mapi/proptag/0x007D001E
という呪文が必要だそうです。

const string PR_TRANSPORT_MESSAGE_HEADERS = "http://schemas.microsoft.com/mapi/proptag/0x007D001E";
//MailItemからヘッダ内容を得る
public static string GetHeader(Microsoft.Office.Interop.Outlook.MailItem mi)
{
Microsoft.Office.Interop.Outlook.PropertyAccessor olPA = mi.PropertyAccessor;
string header = (string)olPA.GetProperty(PR_TRANSPORT_MESSAGE_HEADERS);
System.Runtime.InteropServices.Marshal.ReleaseComObject(olPA);
return header;
}

覚書

基本機能:縦書き表示、スタイルシートをリアルタイム適用、epub読み込み・書き込み

 

執筆者向け機能:表記ゆれチェック、数字の表記チェック、語句の一括変換

 

編集支援機能:チャット、強調表示、メモ

 

できたらいいな:原稿をサーバー上で一括管理、差分表示(githubでできればいいかな?)、evernoteなどからコピペしたら形式を整える


Windows + CakePHP3 でMySQLを動作させるまで

開発がしたくてフレームワークなるものを初めて触ったので、それなりにメジャーっぽいCakePHPというものをインストールしてみました。

 

ブックマークチュートリアル

公式サイトの↑に従って、

まずこれをインストールして、

 

Composer Windows Installer をダウンロードして実行した場合、インストールディレクトリ (例えば、 C:\wamp\www\dev\cakephp3) からターミナルに以下の行をタイプしてください。

composer self-update && composer create-project --prefer-dist cakephp/app bookmarker

 

上のコマンドをプロンプトにコピペしてインストールして、

インストールの確認

デフォルトホームページを確認することで、インストールが正しいことをざっと確かめることができます。 その前に、開発用サーバを起動する必要があります。

bin/cake server

Windows では、このコマンドは bin\cake server (バックスラッシュ) です。.

これで、 8765 ポートで PHP のビルドインウェブサーバーが起動します。ウェルカムページを見るために http://localhost:8765 をウェブブラウザーで開いてください。CakePHP がデータベース接続が 可能かどうか以外は、すべての確認事項がチェック済みになるべきです。そうでなければ、PHP 拡張の 追加のインストールやディレクトリのパーミッション設定が必要かもしれません。

言われるがままにプロンプトから bin\cake serverと入力した後に、http://localhost:8765とブラウザに入れると

f:id:happyholiday:20160807162400j:plain

起動できました。が、

 

f:id:happyholiday:20160807161515j:plain

 

 データベースに接続できません、と言われたので、

 

MySQL :: Download MySQL Community Server

 

ここからMySQLをインストールして、

 

f:id:happyholiday:20160807161749j:plain

ここからcake_bookmarksというデータベースを作って、

 

f:id:happyholiday:20160807162047j:plain

 

 

f:id:happyholiday:20160807162104j:plain

チュートリアルに従って、上のコマンドをコピペしてテーブルを作成しました。

さらにphp.iniの

f:id:happyholiday:20160807162653j:plain

必要なところのコメントアウトを消しました。さらに、app.phpの接続設定を編集しました。

f:id:happyholiday:20160807163414j:plain

 

でも動きませんでした。

f:id:happyholiday:20160807162730j:plain

 

わけがわからなくなったので2時間くらいここで止まりました。いろいろ調べたら、

Your php.ini indicates that you have got php_pdo_mysql.dll enabled, however it may have been that you needed to restart the CakePHP server bin/cake server.

 

サーバーを再起動しなければいけないことがわかりました。

再起動したら

f:id:happyholiday:20160807163520j:plain

やっと動きました。長かったです。

 

再起動を思いつかない人が多いかもしれないので、メモとして残しておきます。


C#で半角カナを全角カナに変換

半角カナはダサいので全角カナにしましょう。という依頼を受けました。.NETでそんなメソッドあるんかいな。

 

調べたらありました。

ひらがなとカタカナ、全角と半角の変換を行う: .NET Tips: C#, VB.NET

C#からならVBで使えるレガシーメソッドを使えるようにすればオッケーです。まず

Microsovt.VisualBasic.Dll

を参照設定しましょう。昔のVBのメソッドを眠りから解き放つのですね。

string hankaku = "ハンカクモジャー";
string
zenkaku = Microsoft.VisualBasic.Strings.StrConv( s, Microsoft.VisualBasic.VbStrConv.Wide, 0x411); //ハンカクモジャー

ちゃんと半角の濁点も変換してくれてうれしい。しかし.NET独自の全角半角変換はないんですねぇ。半角カナはローカルすぎるので全世界的な.NETには搭載されてないっぽいです。

ただこれ欠点があって、半角カナだけではなく半角英数字も全角にしちゃうんですよね。それが嫌なら外部DLLを使いましょう。配布するDLLが増えるのが欠点ですがコードは一気に楽になります。

Microsoft Visual Studio International Pack 1.0 SR1

https://www.microsoft.com/ja-jp/download/details.aspx?id=15251


WindowsでiPhone開発もできた

 

上記記事の続きです

 

5GBという超大なXCodeを無事にインストールしたけど、Playgroundを開いてみて、さあhello worldを入力!というところで、= が入力できない!!なぜか _ アンダースコアになる!これじゃ代入できない!

色々調べた所、windowsとmacではキーボードレイアウトが違うとのことです。

Snow Leopardで日本語キーボード – でんのうにっし

【1】 PSJ.keylayoutというファイルを
/Library/Keyboard Layouts
に配置します。 

/Library/Keyboard Layoutsってなんだよ!Finder(エクスプローラみたいなやつ)に表示されてねぇよ!

Mac Finderの「フォルダへ移動」コマンドの詳しい使い方 / Inforati

メニューの「移動」→「フォルダへ移動」でいけるんですね。ここに

Mac のオススメツール – ふなWiki

ここから拾えるPSJ.keylayoutというファイルを配置したら、みごと = が入力できるようになりました。

f:id:happyholiday:20160204212106j:plain

swiftというmac専用言語が開発されたため、objective-Cを使わなくてもよくなったそうです。今日から学習します。日本語まで変数名にできるってすごいような紛らわしいような。

他にも参考ページ

iOS SDKで始めるObjective-C入門(1):WinユーザーがiPhoneアプリ開発を始めるためのMacの基礎知識 (4/4) – @IT

初心者のためのSwiftで始めるプログラミング入門(3):Apple WatchやiPhoneのアプリを作ろう! Playgroundで学ぶSwiftの基礎―変数、定数、型、演算 (3/4) – @IT

 

printはコンソールに文字列を出すだけなので、iPhoneの画面には何も表示しません。次のページを参考にして、実機のシミュレーターにラベルを表示するだけのプログラムを作ってみました。

iOSアプリ開発超入門!Xcodeの導入からSwiftを使ったHello Worldまで | vdeep

f:id:happyholiday:20160204214950j:plain

てきとうにプロジェクトを作って

 

f:id:happyholiday:20160204215015j:plain

Main.storyboardにラベルを配置。中央に配置するのはけっこうめんどうでした

 

f:id:happyholiday:20160204215037j:plain

できた!シミュレータには電池や電波やらそれっぽい表示までされてる

 

これでうちのWindowsPCがiPhone6sもどきになったでござるよ。10万円払わなくてよかったYO! つぎはswiftとxcodeの勉強でござる。昔のアプリのデバッグしたりコードを読むためには、objective-cも必要になりそうでござる。

UNIXもMacも操作方法が独特で、覚えることがいっぱいです。


Windows内にMac環境をつくる

iPhoneアプリを開発したい。WindowsPCしか持ってないけどAndroidアプリはSDKもAndroid Studioもあって楽勝で開発できるんだから、iPhoneもいけるだろ?と思っていたら、どうもそうじゃないらしいです。Macがないと開発できないそうです。なにそれアップルの陰謀?

じゃあMacを買うか?と思っても一番安いMacBookでも9万円もするし、クロスプラットフォームで作って実機で試せばいいかと思ってもiPhoneそのものが高すぎます。最新機種のiPhone 6Sは10万円、2009年発売の古ーいiPhone 3GSですら中古で6800円もするのです。Androidとはえらい違いです。Appleが販売を独占してるから価格吊り上げ放題です。

アップル製のハードは高いけど、実はMac OS X自体は無料なのです。じゃあubuntuと同じように、VirtualBoxにインストールできるんじゃないか?と考えて、色々調べて試行錯誤しました。苦労しましたが、

f:id:happyholiday:20160203061802j:plain

インストールできました!これで開発ツールが動作すれば(してくれ)、晴れて無料でiPhone開発が可能になります!ついでに清原にもびっくり!

 

How to install OS X Yosemite in Virtualbox with Yosemite Zone

【Hackintosh】WindowsだけでOS X Yosemiteをインストールする方法 Yosemite Zone | Hack Life Information

この2つのサイトの助けを最大限に借りることで、インストールできるようになりました。やり方を簡単に備忘録として残しておきます。

・前提として、メモリーは8GB以上積んでいることが望ましいです。メモリ4GBだとガリガリして使い物にならない可能性が高いです。HDDの空きも100GB程度は必要です。

・VirtualBoxをインストールします。

・torrentクライアントをインストールします。

・Yosemite ISO Torrent.zip で検索してtorrentファイルをゲットし、ダウンロードします。5GBくらいあります。半日~1日くらい覚悟しましょう。

・VirtualBoxで仮想環境を作ります。YosemiteZoneとか適当に名前を付けていいですが半角スペースを入れないでください。仮想メモリは2GB以上必要です。

・(2013年以降のPCを使っている人限定)コマンドプロンプトを起動して、次の2つの呪文を唱えます。

cd “C:\Program Files\Oracle\Virtualbox”

VBoxManage modifyvm <Name of virtual machine> –cpuidset 00000001 000306a9 00020800 80000201 178bfbff

 

<Name of virtual machine> の部分はさっきつけた名前にします。HaswellのCPUを使ってる人が、いや俺はHaswellじゃないよと偽装するためのコマンドだそうです。レムオルやバニシュみたいなもんですね。

・ISOイメージをマウントして起動、インストールを開始します。

・boot:

と表示されたら

-f -x -v

と呪文を唱えてからエンターキーを押します。意味は知りません。唱えないでインストールしたら途中で何回も止まりました。主の呪いです。

・初めてインストールする時は仮想HDDが初期化されていないため、インストール先ドライブを選ぶダイアログで先に進めなくなります。メニューの「ディスクユーティリティ」を使って仮想HDDのパーティションを作成します。「消去」メニューを押して好きなドライブ名前を入力し、さらに「消去」ボタンを押して初期化します。上側のリンクのスクリーンショットを参考にしてください。

・インストール先としてHDDが追加されます。HDDの絵を押すと「カスタマイズ」ボタンが出現するのでそれを押します。

・drivers -> Install Audio Drivers (Kexts) と Install Network Drivers (Kexts)

Graphics -> GraphicsEnabler=Yes

の3つのチェックをはずします。

・インストールを開始します。時間がかかります。数十分後に次の画面が現れたら成功です。

f:id:happyholiday:20160202205910j:plain

完了できてないって?いや、これで成功だってリンク先には書いてあるんです。

When the installation finishes, the OS X installer will probably crash and display a crash log. This is normal; OS X Yosemite has still installed successfully. Now proceed to the next step.

ロックですねぇ

・再起動したらISOイメージをアンマウント(取り出し)します。

・もういっかい再起動します。

・完了!あとは初期設定を適当に済ませて終わりです。

 

あとはXCodeという公式の統合開発環境をインストールすれば今流行のSwiftとやらでiPhone開発ができるようになります。無料です

Xcode – ダウンロード – Apple Developer

Apple IDを登録するとダウンロードできるようになります。これもOSと同じ5GBほどのでっかいファイルです。現在インストール中ですが、果たして動作してくれるのでしょうか。。


VirtualBox + ubuntuを導入

単価の高いエンジニア案件をゲットするためには最新技術に触れておかないといけません。今日から読書時間を半分に削り、毎日1時間かけて技術の勉強をすることにしました。

Pythonプロフェッショナルプログラミング第2版

Pythonプロフェッショナルプログラミング第2版

 

手始めに図書館で借りてきたPython本を参考にして、自家用サーバーを構築するために手っ取り早い方法である仮想環境を作ることにしました。PCをもう一台買うのは金がかかるし電気代もかかるので、PC内にPCを作ってしまうのが安価で楽です。

 

仮想環境構築にはVirtualBoxを使います。無料です。いい時代になったものです

Oracle VM VirtualBox

適当にインストールすると次のような画面が現れます

f:id:happyholiday:20160127230619j:plain

「新規」を押し、プロファイルを作って自分のPCのメモリやハードディスクの一部分を犠牲にすることで、PCの中で別のPCを起動できます。

WindowsでもMacでもLinuxでもなんでも入れられます。OSを複数持ってればの話ですが。私は金がないのでLinuxにします。

ubuntuというものが有名だそうですのでダウンロードします。無料です

OSが無料ってすごすぎる。ありがたくダウンロードしてVirtualBoxでisoイメージを選択、しばらく待つとインストールが完了します

f:id:happyholiday:20160127231238j:plain

ウインドウの中でOSが動いています。不思議な感じです。

FireFoxがプリインストールされているのではてなのページを開いてみました。@Copy_writingとやらの剽窃アカウントが炎上しています。みんなひまですね。

 

ここでサーバー用のserver版ではなく、一般ユーザー向けのdesktop版をインストールしてしまったことに気が付きました。うそーん。全消去して明日やり直しです。

環境ごと1発で消してしまえるのも仮想環境の利点です。現実のPCだったらハードディスクをフォーマットしたり一々たいへんです。


python: 偶数列だけ取り出す方法・ドイツ語はLatin-1に変換するしかないのか?

数か月ぶり、久々に趣味でプログラミングです。今日は料理中にシャドウイングするドイツ語の教材を作るために、ある教材から読み上げ用のテキストを抽出するためのツールを作りました。言語はpythonです。教材を作るだけなら手動でコピペしまくってもできますが面倒ですし、せっかくなので覚えたてのpythonの勉強も一緒にやってしまえば一石二鳥なので。

教材はこれ。単語カードです

Langenscheidt 01.01.A Der Mensch – Körper – The Human Being – The Body flashcards | Quizlet

 

要素を見ると.TermTextというクラスで囲まれているのでまずこれを抽出します。スクレイピングはrequestとlxmlで。

#読み込み
target_url = ‘https://quizlet.com/7520653/langenscheidt-0101a-der-mensch-korper-the-human-being-the-body-flash-cards/’
target_html = requests.get(target_url).content
root = lxml.html.fromstring(target_html)
#.TermTextだけ取り出す
term = root.cssselect(‘.TermText’)

しかし配列termにはドイツ語と英語が交互に表われてくるのでそのまま出力するとドイツ語→英語→ドイツ語→・・・の順のテキストができてしまってうっとおしい。ドイツ語の部分だけがほしいです。

pythonは配列操作が優れていてなんと term[0::2] と指定するだけで偶数の部分が取り出せます!すごい!2文字!

 

あとは文字列操作です。ドイツ語はなぜかutf-8のまま扱うと

der FuÃ
Nach dem Spaziergang hatte sie kalte FüÃe.

のように文字化けしやがります。やむなくLatin-1という欧文文字コードに変換して切り抜けました。UNICODEのままなんとかならんのでしょうか。

 

ソース全文です

#!C:\Python34\python.exe

import lxml.html
import requests
import codecs
import re

#エンコードはLatin-1で
f = codecs.open(“deutsch.txt”, “w”, “Latin-1”)

#読み込み
target_url = ‘https://quizlet.com/7520653/langenscheidt-0101a-der-mensch-korper-the-human-being-the-body-flash-cards/’
target_html = requests.get(target_url).content
root = lxml.html.fromstring(target_html)
#.TermTextだけ取り出す
term = root.cssselect(‘.TermText’)

if len(term) > 0:
    #偶数行だけ処理する
    for block in term[0::2]:
        #改行で分割
        str = block.text_content().split(“\n”)
        #1行目はコンマかカッコまで出力
        str1 = re.split(“[,(]”, str[0])
        print(str1[0] + “\n”, file=f)
        #2行目は下側のダブルクォーテーションだけ変えて出力
        print(str[1].replace(“,,”, “\””) + “\n”, file=f)

f.close()

 

出力

der Arm

Ich habe beim Sport meinen rechten Arm verletzt.

das Auge

Meine Schwester und ich haben braune Augen.

der Bauch

Er schläft am liebsten auf dem Bauch.

das Bein

Kannst du lange auf einem Bein stehen?

das Blut

Ich mag kein Blut sehen.

die Brust

Reiben Sie Brust und Rücken mit dieser Salbe ein!

die Brust

Das Baby trinkt Milch an der Brust der Mutter.

der Finger

Sie trägt an jedem Finger einen Ring.

der Fuß

Nach dem Spaziergang hatte sie kalte Füße.

das Gesicht

Es war dunkel. Ich konnte ihr Gesicht nicht sehen.

das Haar

Bald hat er keine Haare mehr auf dem Kopf.

der Hals

Sie hat einen langen Hals.

die Hand

Sie gingen Hand in Hand spazieren.

die Haut

Seine Haut ist immer ganz rot.

das Herz

Mein Herz schlägt manchmal unregelmäßig.

das Knie

Ich habe den ganzen Tag auf den Knien am Boden gearbeitet.

der Kopf

Hatte er einen Hut auf dem Kopf?

der Körper

Sie hat einen durchtrainierten Körper.

der Mund

Bitte halte den Mund und sei still!

die Nase

Deine Nase ist rot. Hast du Schnupfen?

das Ohr

Sie hält sich die Ohren zu.

der Rücken

Er hat einen schiefen Rücken.

schwach

Nach der Krankheit fühlte sie sich noch lange schwach.

stark

Für diese Arbeit bist du nicht stark genug.

der Zahn

Meine Zähne sind alle gesund.

die Zunge

Der Arzt sagt: “Zeigen Sie mir bitte lhre Zunge!”

 

あとはこれを読み上げサービスに突っ込んでmp3にして終わりです。これで料理中の時間が有効に使えます。


語学が最強の趣味である件について

久しぶりに語学学習を再開しようと、まず自分用ソフトのデータベース修復から始めました。

自分用ソフトは登録した問題を最後に解いた日付から一定時間経過すると自動的に復習してくれる仕組みなのですが、休むことを想定していないため1日放置すると次の日の問題数が2倍になるという問題がありました。生活が落ち着くまで時間が取れなかったため、今日は10日ぶりですから問題量10倍です無理です。

仕事を超速で終わらせて修復用機能を作りました。google先生の助けを借りてSQL文で全フィールドの日付を足し算して調整するための方法を調べると、

【MySQL】SQL発行時に日時計算(加算・減算)する方法 | WEBマスターの知恵ブログ

UPDATE ??? SET Time = Time + INTERVAL ??? DAY

という呪文を唱えればよいことが分かりました。なんと直感的で分かりやすい上に1行ですみます。おかげで30分で機能追加することができました。DAYの部分はHOURとかMONTHとかなんでもありらしいです。

 

語学は私の知りうる限り、最も奥が深く最もカネのかからない趣味です。私たちは日本語を一生極めることができないがゆえに一生学び続けることができます。これは宇宙です。外国語1つ1つについても同じことが言えます。日本語だけでも宇宙の果てまで行けるのですから外国語を加えれば外宇宙とかビッグバン以前や、宇宙熱的死を超えた所までも到達できるわけです。

インターネット時代となり、全世界すべての言語の文章や音声にすべて指先一本ゼロコストでアクセスできるようになりました。アラビア語やウルドゥー語だって一発です。wikipediaの左側の多言語バーみたことありますか?一記事に何十、多い時は100以上の言語のページにアクセスできます。誰もしゃべってないはずのラテン語やエスペラント語すらあります。自分の知らない言語ってワクワクしませんか?ワールドミュージックでアフリカ系やアジア系、北欧系の知らない言葉の歌を聴くと血沸き肉踊りませんか?未知の宇宙があちこちに転がってるんですよ。

初期費用だけは、入門書で1言語につき2000円くらいかかります。しかしそのあとはネット上に山のように教材が転がっています。辞書だって音声教材だってあります。全部無料です。特に英語なんて入門書すら必要ないほど充実しています。

語学は頭の良さが全く必要ない、才能が全くいらないことも大きな特徴です。なぜかというとあなたは日本語を毎日使って生活できているでしょ?時間さえかければ、あなたが日本語を扱えるのと同じくらいまで、外国語を使えるようになることは自明です。言語はほぼすべての人間が扱うことのできるツールですので、落ちこぼれが原理的に発生しないのです。これはすごいことです。

学べば学んだだけ必ず結果がついてくることも魅力です。数か月単位のスパンで必ず上達を自覚できます。しかも外国語で書かれた文章はふつう異文化の文章ですから内容がぶっ飛んでいて超面白い。学べば学ぶほど読んだり聴いたりできるものが等比級数的に増え理解力も高まっていくため、モチベーションが尽きることはありません。

というわけで金がない人は外国語を趣味にしてみることをお勧めする、という話でした。

 

参考までに今日書いたPHPのコードです

else if(isset($_POST[“fix”])) {
    //日付修正
    //最後に解いた日付を得て2日前より前だったら、(今日-最終日付)-1日を全体にプラスする
    //例えば12/18に実行したとき、最終日付が12/8なら9日プラスして最終日付を12/17まで寄せる
    $mysqli = OpenDb();
    $query = “SELECT MAX(Time) FROM ltlog”;
    $result = ExecQuery($mysqli, $query);
    $row = $result->fetch_assoc();
    $MaxTime = $row[‘MAX(Time)’];
    $daysDiff = (strtotime(date(‘y-m-d’)) – strtotime($MaxTime)) / (60*60*24);
    if($daysDiff >= 2)
    {
        $shiftDays = $daysDiff – 1;
        $query = “UPDATE ltlog SET Time = Time + INTERVAL $shiftDays DAY”;
        $result = ExecQuery($mysqli, $query);
        echo $shiftDays. “日シフトして調整しました。”;
    }
    else{
        echo “調整の必要はありません。”;
    }
    $mysqli->Close();
}