人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: kaiketsu
●カテゴリ:コンピュータ インターネット
✍キーワード:FTP PHP アップロード サーバ シェル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● mupic
●27ポイント

PHP FTP関数

http://php.benscom.com/manual/ja/ref.ftp.php

サンプル

http://php.benscom.com/manual/ja/function.ftp-fput.php

◎質問者からの返答

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

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


2 ● hyo-suke
●27ポイント

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

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

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

◎質問者からの返答

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


3 ● takeshi1192
●26ポイント

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);

}

?>

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ