1. 程式人生 > >php - ftp 上傳文件到遠程服務器

php - ftp 上傳文件到遠程服務器

運行 acc 刪除 enc ref linux 所有權限 遠程 解決

ccentos7服務器 ========================

一、安裝vsftpd及ftp命令

yum install vsftpd -y

yum install ftp -y

二、vsftpd服務器的配置文件

實現在開啟防火墻和SELinux情況下,實現匿名用戶的登錄,可以上傳下載,可以創建目錄,創建權限掩碼為022,可以刪除文件,最大上傳速度為100kbit/s。

vsftpd服務器的主要配置文件是/etc/vsftpd/vsftpd.conf。

1.服務器端設置

1.1修改配置文件開放匿名用戶上傳、下載及其他權限,

anonymous_enable=yes //允許匿名用戶登錄

anon_upload_enable=yes //允許匿名用戶上傳

write_enable=yes //賦予寫權限

anon_mkdir_write_enable=yes //允許匿名用戶新建文件夾

anon_other_write_enable=yes //匿名用戶擁有除了上傳和新建目錄之外的其他權限

然後重啟服務

systemctl restart vsftpd.service

1.2修改上傳目錄的權限

為了讓匿名用戶實現上傳,必須開放目錄的寫權限,以anonymous用戶名登錄後,相當於ftp用戶的身份,ftp的登錄目錄為/var/ftp,開放這個目錄的寫權限:

chmod 777 /var/ftp,但是再重啟服務並在服務器上用ftp登錄時會出錯,這是因為/var/ftp的權限不對所致,這個目錄的權限是不能打開所有權限的。解決方法為在/var/ftp下再建一個目錄,權限是777就可以了:

mkdir /var/ftp/pub

chmod 777 /var/ftp/pub

添加ftp用戶名和密碼

/usr/sbin/adduser -d /opt/test_ftp -g ftp -s /sbin/nologin wolfyftp
passwd wolfyftp  

查看SElinux策略內ftp相關權限

getsebool -a | grep ftp

打開ftp權限,可以代碼遠程訪問

setsebool allow_ftpd_full_access 1

然後重啟服務

systemctl restart vsftpd.service

2.測試

ftp:192.168.163.137

瀏覽器中訪問:

技術分享圖片

php===============================

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‘]."上傳成功\n";
} else {
echo "上傳失敗\n";
}
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>

運行後確實成功。

php - ftp 上傳文件到遠程服務器