PHPのスクリプトで添付ファイルをアップロードしたのちに、それをFTPなりSCPで他のサーバに転送したいのです。PHPのスクリプト内で、シェルなりを使ってFTPなりSCPなりをするようなサンプルPHPはないでしょうか? できたらタイムアウト処理もしたいのですが、可能なのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/02/05 22:14:11
  • 終了:2009/02/12 22:15:02

回答(3件)

id:mupic No.1

mupic回答回数8ベストアンサー獲得回数02009/02/05 22:19:00

id:kaiketsu

おおそういうのがありましたね。

すみません。SCPとか、sftp のはないでしょうか?

2009/02/06 00:08:45
id:hyo-suke No.2

hyo-suke回答回数43ベストアンサー獲得回数52009/02/06 00:35:29

ポイント27pt

scp, sftpがコマンドとして用意されているのであれば、単にexec()でコマンドを呼び出すのはどうでしょうか?

以前にも同様な質問があったみたいですね。

http://q.hatena.ne.jp/1154501351

id:kaiketsu

ライブラリがあるといいですね。ただ、SSH で、ftp トンネルとどっちがいいかですね。

2009/02/06 00:51:03
id:takeshi1192 No.3

takeshi1192回答回数4ベストアンサー獲得回数12009/02/06 15:39:11

ポイント26pt

http://google.com/ URLはダミーです。

自分で急いで作るとこんな感じです。

Validationとか、/tmp にアップロードしたファイルのチェックなどを

ちゃんと搭載した方がいいと思います。

if ($_POST["COMMAND"] == 'webupload') {

process_uploadfile();

} elseif ($_POST["COMMAND"] =='ftpupload') {

process_ftp_upload();

}

else {

show_form();

}

function process_uploadfile() {

$uploaddir = '/tmp/';

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);


if (move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)) {

echo "The file was uploaded.\n";

show_ftp_form($uploadfile);

} else {

echo "The file couldn't uploaded\n";

}

}

function show_form() {

print "<form action=$_SERVER[PHP_SELF] method=post enctype=multipart/form-data >";

print "

";

print '<input type="file" name="userfile" />';

print '<input type="hidden" name="COMMAND" value="webupload" >';

print '<input type="submit" value="send" />';

print "

";

print "</form>";

}

function show_ftp_form($uploadfile) {

print "<form action=$_SERVER[PHP_SELF] method=post>";

print "ftp server: <input type=text name='ftp_server'>
";

print "ftp account: <input type=text name='ftp_user_name'>
";

print "ftp password:<input type=password name='ftp_user_pass'>
";

print "<input type=hidden name=COMMAND value='ftpupload'>";

print "<input type=hidden name=source_file value=$uploadfile >";

print "<input type=submit name=send>";

print "</form>";

}

function process_ftp_upload() {

$ftp_server = $_POST[ftp_server];

$ftp_user_name = $_POST[ftp_user_name];

$ftp_user_pass = $_POST[ftp_user_pass];

$source_file = $_POST[source_file];

$destination_file = basename($source_file);

$conn_id = ftp_connect($ftp_server);

$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

if ((!$conn_id) || (!$login_result)) {

echo "FTP connection has failed!";

echo "Attempted to connect to $ftp_server for user $ftp_user_name";

exit;

} else {

echo "Connected to $ftp_server, for user $ftp_user_name
";

}

$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);

if (!$upload) {

echo "FTP upload has failed!";

} else {

echo "Uploaded $source_file to $ftp_server as $destination_file";

}


ftp_close($conn_id);

}

?>

id:kaiketsu

おおありがとうございます。

2009/02/06 16:01:22
  • id:kaiketsu
    SSHでトンネルしておけば、ftp でいけそうですね。
  • id:hyo-suke
    2です。
    私は使ったことが無いですが、ftp_ssl_connect() という関数があるようです。
    http://www.php.net/manual/ja/function.ftp-ssl-connect.php
    コレを試してみてはいかがでしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません