一般 PHP 的上传档案方法, 是将上传的档案放到暂存目录, 再复制到指定的目录, 虽然操作上方便, 但问题是储存上传档案的目录必需要有写入权限 (CHMOD 777), 而且不能上传到远端服务器。
要解决以上问题, 我觉得较简单的方法是用 PHP 内建的 FTP 功能, 例如现时 WordPress 的更新功能, 也是透过 FTP 操作。以下会介绍在 PHP 连接到 FTP 上传及下载档案的方法:
FTP 下载档案
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php $remote_file = 'somefile.txt'; ### 远端档案 $local_file = 'localfile.txt'; ### 本机储存盘案名称 $handle = fopen($local_file, 'w'); ### 连接的 FTP 服务器是 localhost $conn_id = ftp_connect('localhost'); ### 登入 FTP, 帐号是 USERNAME, 密码是 PASSWORD $login_result = ftp_login($conn_id, 'USERNAME', 'PASSWORD'); if (ftp_fget($conn_id, $handle, $remote_file, FTP_ASCII, 0)) { echo "下载成功, 并储存到 $local_file\n"; } else { echo "下载 $remote_file 到 $local_file 失败\n"; } ftp_close($conn_id); fclose($handle); ?> |
FTP 上传档案
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $file = 'upload_file.pdf'; ### 上传的档案 $fp = fopen($file, 'r'); ### 连接的 FTP 服务器是 localhost $conn_id = ftp_connect('localhost'); ### 登入 FTP, 帐号是 USERNAME, 密码是 PASSWORD $login_result = ftp_login($conn_id, 'USERNAME', 'PASSWORD'); if (ftp_fput($conn_id, $file, $fp, FTP_ASCII)) { echo "成功上传 $file\n"; } else { echo "上传档案 $file 失败\n"; } ftp_close($conn_id); fclose($fp); ?> |
PHP 的 FTP 功能十分完善, 除了基本的上传, 下载档案外, 其他常用的 FTP 操作指令也包括在内, 以下是常用 PHP 的 FTP 函式:
ftp_pwd() — 回传当前的目录.
ftp_chdir() — 改变工作目录.
ftp_cdup() — 移到上一层目录, 等如 Linux 指令的 “cd ../”.
ftp_delete() — 删除档案.
ftp_chmod — 设定权限.
ftp_rename — 将档案或目录重新名命, 即 Linux 的 mv 指令.
ftp_rmdir — 删除目录.
ftp_size — 回传档案的体积, 单位是 bytes.
ftp_nlist — 回传当前目录所有档案/目录名称.
ftp_rawlist — 回传当前目录所有档案/目录及其详细资料.
ftp_raw — 执行自订 FTP 指令.