PCにあるファイルを別サーバに送るバッチファイル
諸々の事情でPCにあるファイルを別サーバに送る必要がでてきた。
本来なら別サーバにSCP接続してファイル転送ってするんだけど、毎日ってする必要があるのでどうにかしようと思ったわけである。
毎日やるための手法は以前に書いた通り(
XAMPP/PHP/cronをやりたい)
問題はどうやって送るかってこと。方法はいくつかある。
・XAMPP・PHPでSSH接続をしてコピーする。
・別サーバ側に受口用のAPIを用意する。
・CMDでFTP接続してファイルを送る
実際にはこの3つを同時に気付いたわけじゃないので、かなり回り道をしている。
CMDでFTP接続
まず最初に書くけど…実際は他の2つをやってから気づいた内容。もっとも手っ取り早いと思われる内容。
「CMDでFTP接続」をやる上での問題はただ一つ。
別サーバがFTPサーバを用意しているか否か。今回は用意されていなかったのNG。
PHPでSSH接続をしてコピー
別サーバには普段からSSH接続しているんだから…ということで試してみた。
「PHPでSSH接続をしてコピー」の問題は「SSH接続するためのライブラリが必要」ってこと。
SSHのライブラリをいれるにはPEARがいる。で、そのPEARはXAMPPに入ってるけど望ましくない状態らしく、PEARのみ再インストールが必要とのこと。
次に、PEARを再インストールしてもSSHのライブラリをいれるには先に別のライブラリを入れる必要があるとのこと。で、「.dll」ファイルをダウンロードし特定のフォルダにいれる必要があるんだが、「.dll」ファイルをダウンロードすると「.exe」ファイルがダウンロードされる。ダウンロードされた「.exe」ファイルを実行すると別途、関係ないものをインストールしたがる。haoなんたらってヤツはインストールされてしまった。あまつさえインストール中にウイルス検知にひっかかる始末。
ということで、この手法は何かと手間がかかるということでNG
別サーバ側に受口用のAPIを用意
余計なコトが必要ないと思われる方法。内容としては下記。
・XAMPP内のPHPファイルから対象のファイルを読み込む
・別サーバのAPIに読み込んだデータをPOST送信
・別サーバのAPIで受け取ったデータをファイル出力
諸々、問題があったので書いていく。実際は順番通りに問題発生・解決したってわけじゃない。
CMDでの実行方法
最終的にはバッチファイルにするんだけど、CMDから直接入力。
フォルダ名とかに空白があったりするので「”」で囲うってのが重要っぽい。
文字コードの問題
PHPをいつもUTF8でやっているのでSJISで変換をかける必要があった。
PCのユーザー
PHPでfile_get_contents()を使って対象を読み込もうとした。
PHPファイルはxamppの中にいたので「c:\xampp\○○○」って感じ。
読み込みしたいファイルは「c:\Users\○○○」って感じ。
どうやら、PHPのfile_get_contents()だとユーザーの絡みで失敗するっぽい。
とりあえず、PHPファイルと読み込みしたいファイルを「c:\Users\○○○」の中にいれて対応
XAMPP・PHP
XAMPP自体は関係ない。PHPがあればいい感じ。
受取側
受け取ったデータをファイル出力するのでパーミッションの設定が必要。