PCにあるファイルを別サーバに送るバッチファイル

2013/12/06

諸々の事情で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から直接入力。

“c:\○○○○\php.exe” “c:\○○○○\○○○○.php”

フォルダ名とかに空白があったりするので「”」で囲うってのが重要っぽい。

文字コードの問題

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があればいい感じ。

受取側

受け取ったデータをファイル出力するのでパーミッションの設定が必要。

新着(ニュース関連以外)

2017-08-03
formのinputでmaxlengthを使うとFirefoxでバグってた。他のブラウザでも気づかずにバグってたかもしれない。
2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。
2017-06-27
MACにWin10をインストールしてみた:再挑戦。
2017-06-25
「簡単」っていうヤツらが多いけど・・・難しいぞ。