プログラミングの話

Scpより簡単にファイルをローカルに落とす方法

scpとは

リモートのPCにファイルをアップロードしたり、ダウンロードできるコマンド 基本的にはcpと同じ体系になってると思う。 で、最初のsは多分sshのs

問題点

sshの問題点でも有るんだけど、scpのコマンドの問題でも合って、 多段sshをしている時って、ファイルをアップロードしたりダウンロードしたりって結構面倒。 ただでさえコマンドが長くなりがちなのに、「踏み台を一度経由してー」とかやってると日が暮れる。

解決の仕組み

webのリンクを踏むとファイルをダウンロードさせる仕組みを使うとリモートからローカルの転送はかなり楽になる。 この方法を応用すると、同じネットワーク内にいる際にこの方法でファイル共有が出来るのかな。

必要なもの

  • PHP5.4以上

PHP5.4以上にはビルトインサーバーが組み込まれているのでこれを使いたい

参考

PHPでユーザーにファイルをダウンロード「させる」方法

方法

上記のリンクのファイルを作成し、以下のコマンドで起動する

1
2
#sample.phpで作成した例, optionはip:ポート番号
php -S 0.0.0.0:5000 sample.php

こうすることで、webサーバーがsample.phpを動かすので気軽にファイルをダウンロードは出来るようになる。

(当然リモート側はアクセスできるようにiptables等の設定が必要です)

本当は取り組みたかったこと

1
php -S 0.0.0.0:5000 sample.php ファイル名

で任意のファイルをダウンロードさせるスクリプトを作りたかった。

が、コマンドライン引数を受け付けてくれなくて断念した。

コマンドライン引数とかを指定してもipとポート番号と以外無駄。

他の事例として

最近python製のマイクロフレームワークのflaskを取り組んでいまして、そっちでも似たようなことをやっていた。

1
python app.py 引数

って感じでやるといい感じにwebアプリケーションだけどコマンドライン引数を受け取ってくれてた。

これができちゃうのにはスクリプトからwebサーバーを動かす仕組みになっているからですが。 (つまり、本日、本当にやりたかったことはflaskとpythonがあればできるので、それは後日書きます。)

結論として

phpの場合はサーバーの上にスクリプトが存在してて、URLから別ファイルを参照することも(ファイルが存在すると)可能。

python(flask)の場合はスクリプトからwebサーバーを動いているので、そのスクリプト上にルーティングが存在しないとだめ。

両者ともにwebサーバーの機能を実現しているが、仕組みが結構異なるということだと思われる。 この話を突き詰めていくと結構ちゃんとした話になると思うが、何を突っついたらいいのか分からないのが本音。

話がずれたけど以上。