<< Prev Page Next Page >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


PHPでSFTPが遅い時の対処法

PHPで、よそのサーバにSFTPで接続して転送して…ということをやりたかった。SCPが使えない相手サーバなので、あくまでSFTP。

普通に書くとこうなる。(エラー処理は全部省略して)

// 接続してー
$connect = ssh2_connect($dstHost, 22);
// ログインしてー
ssh2_auth_password($connect, $username, $password);
// 謎の文字列にしてー
$sftp = ssh2_sftp($connect);
$sftpPath = 'ssh2.sftp://' . $sftp . '/' . $dstPath;
// copyで転送
copy($srcPath, $sftpPath);

簡単で助かるなあPHP。と思ってたら、これがびっくりするほど遅かった。100MB送信するのに2〜3分かかる始末。

「まーね、相手のSFTPサーバが遅いからしょうがないんですよこーいうのはー」とか言いつつ、ためしにLinuxシェルから普通にsftpコマンド叩いてputしてみたら、100MBの転送が5秒ぐらいで終わった。なんじゃそら!

そりゃああんまりだ。copyじゃなくてfreadとfwriteを使ったりしてみたけど変わらず。とにかくPHPのSFTPラッパーが遅いんだ多分。

しかたがないので、シェルスクリプトを作った。

#!/bin/sh

HOST=$1
USER=$2
PASS=$3
SRC=$4
DSTDIR=$5

expect -c "
set timeout 30
spawn sftp $USER@$HOST
expect \"password:\"
send \"${PASS}\r\"
expect \"sftp>\"
send \"cd ${DSTDIR}\r\"
expect \"sftp>\"
send \"put ${SRC}\r\"
expect \"sftp>\"
send \"bye\r\"
"

んで、PHPから呼ぶ。

exec("/path/to/script.sh {$host} {$user} {$password} {$srcPath} {$dstDir}");

すんごい速くなった。いや、ほんと、こんなことしてダメなのに、さすがに20倍の速度差となると、ダメなこともしなきゃいけなくなるという。


この記事に対するコメント

この記事に対するコメントの投稿



管理者にだけ表示を許可する

この記事に対するトラックバック

トラックバックURL
http://tockri.blog78.fc2.com/tb.php/280-9bb28dda
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。