phpリモートサーバへのファイルのアップロード
3520 ワード
FTP方式でファイルをリモートサーバにアップロードする
if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])) { $ftp_server = "192.168.1.105";
$ftp_user_name = "lesley";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = $_FILES['uploadfile']['tmp_name'];
$remote_file = '/test/'.$_FILES['uploadfile']['name'];
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo"ファイル:".$_FILES['uploadfile'][name']."アップロード成功";
} else {
echo「アップロード失敗」;
} ftp_close($conn_id);
}
CURLリモートアップロードファイル(アナログPOST提出フォーム処理リモート画像アップロード)
/** * Class CurlForm * * submit form data to a remote server use CURL * file upload support * * @link * @author Gavin yang * @msn: athotmail88 @ hotmail.com */class CurlForm { /** * url where you want to submit the form * @var String */ private $remoteUrl; /** * form vars * @var Array */ private $postvars = array(); /* * Constructor for CurlForm * @param String $remoteUrl url where you want to submit the form */ public function __construct($remoteUrl) { $this->remoteUrl = $remoteUrl;
/*コミットされたフォーム変数を処理し、post変数とfiles変数を同時に$this->postvarsに入れます.ここでは配列を返します.もちろんpost変数だけでも文字列「a=b&c=d」の形式でも構いません.files変数が含まれている場合は、数組にしか入れられません*/if(isset($_POST)){foreach($_POSTas$var=>$val){ $this->postvars[$var] = $val; } }
/*ファイルをアップロードするプロセスは、実際には2つのステップに分かれています.最初のステップは、ファイルをローカルサーバにアップロードし、ローカルサーバのキャッシュアドレス、すなわちtmp_nameを取得します.2番目のステップは、このキャッシュファイルのデータをリモートサーバに送信することです.もちろん、ファイルデータを読み取るプロセスはcurl関数の内部で実現されています.ファイルアドレスの前に「@」を付ける限り、curlは転送する添付ファイルだと思っていますが、このファイルが実際に存在することを保証します.これにより、リモートサーバ側はローカルサーバに提出された過去のフォームを受信します.リモートサーバにアップロードされたファイルはローカルサーバ上のキャッシュファイルなので、元のファイルのファイル名を取得するには、post変数に「filename」という変を追加しましたこれはfiles変数に対応する*/if(isset($_FILES){foreach($_FILESas$var=>$val){if(is_array($val[' tmp_name']){foreach($val[' tmp_name']as$k=>$fname){$this->postvars[$var.[$k]]="@".$fname;$ ththis->postvars[$var][$k]]]]][$fname;$ththis->>postvars['filename'.[$ var][$var][$k]]]]]]][$var[$k]]]]]]]]]=$val['name'][$k]; } } else { $this->postvars[$var] = "@".$val['tmp_name']; $this->postvars['filename'."[$var]"] = $val['name']; } } } }
/**post form to remote server*/public function post(){set_time_limit(0);$ch=curl_init();//リモートアドレス設定
curl_setopt($ch,CURLOPT_URL,$this->remoteUrl);//postメソッドcurl_setopt($ch,CURLOPT_POST,1);//フォーム変数curl_setopt($ch,CURLOPT_POSTFILDS,$this->postvars);//戻りデータを直接表示するかどうか//curl_setopt($ch,CURLOPT_RETURNTRASFER,false);//ヘッダ情報を表示するかどうか//curl_setopt($ch,CURLOPT_RETURNTRANSFER,false);//設定($ch,CURLOPT_HEADER,false);//ページ内容を直接出力するかどうかを設定するfalseを出力//curl_setopt($ch,CURLOPT_NOBODY,false);curl_exec($ch);//エラーが発生するとcurl_errno($ch)&&die(curl_error($ch);//リソースcurl_close($ch);exit(); } } ?>
server.php
echo "
if(move_uploaded_file($_FILES['file1']['tmp_name'][1],'./test.txt')){ echo 'ok'; } ?>
if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])) { $ftp_server = "192.168.1.105";
$ftp_user_name = "lesley";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = $_FILES['uploadfile']['tmp_name'];
$remote_file = '/test/'.$_FILES['uploadfile']['name'];
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo"ファイル:".$_FILES['uploadfile'][name']."アップロード成功";
} else {
echo「アップロード失敗」;
} ftp_close($conn_id);
}
CURLリモートアップロードファイル(アナログPOST提出フォーム処理リモート画像アップロード)
/** * Class CurlForm * * submit form data to a remote server use CURL * file upload support * * @link * @author Gavin yang * @msn: athotmail88 @ hotmail.com */class CurlForm { /** * url where you want to submit the form * @var String */ private $remoteUrl; /** * form vars * @var Array */ private $postvars = array(); /* * Constructor for CurlForm * @param String $remoteUrl url where you want to submit the form */ public function __construct($remoteUrl) { $this->remoteUrl = $remoteUrl;
/*コミットされたフォーム変数を処理し、post変数とfiles変数を同時に$this->postvarsに入れます.ここでは配列を返します.もちろんpost変数だけでも文字列「a=b&c=d」の形式でも構いません.files変数が含まれている場合は、数組にしか入れられません*/if(isset($_POST)){foreach($_POSTas$var=>$val){ $this->postvars[$var] = $val; } }
/*ファイルをアップロードするプロセスは、実際には2つのステップに分かれています.最初のステップは、ファイルをローカルサーバにアップロードし、ローカルサーバのキャッシュアドレス、すなわちtmp_nameを取得します.2番目のステップは、このキャッシュファイルのデータをリモートサーバに送信することです.もちろん、ファイルデータを読み取るプロセスはcurl関数の内部で実現されています.ファイルアドレスの前に「@」を付ける限り、curlは転送する添付ファイルだと思っていますが、このファイルが実際に存在することを保証します.これにより、リモートサーバ側はローカルサーバに提出された過去のフォームを受信します.リモートサーバにアップロードされたファイルはローカルサーバ上のキャッシュファイルなので、元のファイルのファイル名を取得するには、post変数に「filename」という変を追加しましたこれはfiles変数に対応する*/if(isset($_FILES){foreach($_FILESas$var=>$val){if(is_array($val[' tmp_name']){foreach($val[' tmp_name']as$k=>$fname){$this->postvars[$var.[$k]]="@".$fname;$ ththis->postvars[$var][$k]]]]][$fname;$ththis->>postvars['filename'.[$ var][$var][$k]]]]]]][$var[$k]]]]]]]]]=$val['name'][$k]; } } else { $this->postvars[$var] = "@".$val['tmp_name']; $this->postvars['filename'."[$var]"] = $val['name']; } } } }
/**post form to remote server*/public function post(){set_time_limit(0);$ch=curl_init();//リモートアドレス設定
curl_setopt($ch,CURLOPT_URL,$this->remoteUrl);//postメソッドcurl_setopt($ch,CURLOPT_POST,1);//フォーム変数curl_setopt($ch,CURLOPT_POSTFILDS,$this->postvars);//戻りデータを直接表示するかどうか//curl_setopt($ch,CURLOPT_RETURNTRASFER,false);//ヘッダ情報を表示するかどうか//curl_setopt($ch,CURLOPT_RETURNTRANSFER,false);//設定($ch,CURLOPT_HEADER,false);//ページ内容を直接出力するかどうかを設定するfalseを出力//curl_setopt($ch,CURLOPT_NOBODY,false);curl_exec($ch);//エラーが発生するとcurl_errno($ch)&&die(curl_error($ch);//リソースcurl_close($ch);exit(); } } ?>
server.php
echo "
";
print_r($_POST);
print_r($_FILES);
echo "
"; if(move_uploaded_file($_FILES['file1']['tmp_name'][1],'./test.txt')){ echo 'ok'; } ?>