PHP程序上傳文件時,想指定上傳到另一台服務器。
move_uploaded_file這個方法第二個參數指定的存放路徑需要和php程序文件一個服務器,沒辦法指定其他服務器的地址,本人才疏學淺,哪位大哥會的還請賜教下。
既然不能這樣實現,肯定有其他辦法的,想着ftp也可以實現文件傳輸的哇,繼而朝ftp方向入手。
首先,在自己台式機和筆記本上都開通了ftp,這個不會的同學可以網上查serv-u,相關教程肯定不少的。
然后在台式機本地做了個測試:
$ftp_server = "192.168.1.100";
$ftp_user_name = "laohu";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = 'test.txt';
$remote_file = '/test/a.txt'; // 注意:這里的"/test"指的是ftp根目錄下的test文件夾,而非系統跟目錄下的test
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
echo "文件移動成功";
} else {
echo "移動失敗";
}
ftp_close($conn_id);
運行后:文件移動成功。
要的就是這個效果了,之后用台式機做程序服務器,上傳附件時全用ftp方法上傳至筆記本上,筆記本ip是105,相應代碼如下:
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);
}
對應的前台頁面代碼:
<form action="uploadfile.php" method="post" enctype="multipart/form-data"> <input type="file" name="uploadfile" id="uploadfile" /> <input type="submit" name="submit" value="submit" /> </form>
運行后確實成功。
需要注意,在用ftp_put方法時,第四個參數傳送模式,需要用FTP_BINARY(二進制模式),用FTP_ASCII(文本模式)時,圖片能上傳但無法顯示,其他文件重命名、中文亂碼解決、上傳權限控制等,就不在此提及了。
