星期三, 10月 15th, 2008 | Author: Joshua

最近公司有个项目,是将本地生成的文件使用ftp传递到另外一台服务器上。

分析需求,无非就是跑出个csv文件,然后再将文件使用php的ftp相关函数传递到ftp服务器上。

总不能让客服天天定点用ftp工具从这个服务器上拉到那个服务器上吧?。。。

so,先温习下相关知识,点这里,多了不说了。
ps:有人愿意使用第三方类库,如果你不嫌麻烦,你去用好了,pear的net_ftp里的方法我看比php自带的函数不少多少。

第一步:确信你拥有连接/上传到FTP服务器的权限
无聊嘛?不无聊,有很多人就是写了半天,测了几天,浪费N天,最后傻乎乎的在那笑说,哦原来我没权限。。。

先用命令行测试下:
我的是mac,用Terminal,Linux上也有,没有的用cmd,不过自己先查下命令是啥。

ftp> open ftp.xxxx.com
Connected to ftp.xxxx.com.
220-FileZilla Server version 0.9.24 beta
220-written by Tim Kosse (Tim.Kosse@gmx.de)
220 Please visit http://sourceforge.net/projects/filezilla/
Name (www.sasacity.loc:Joshua): joshua
331 Password required for joshua
Password:
230 Logged on
Remote system type is UNIX.
ftp> bin
200 Type set to I
ftp> hash
Hash mark printing on (1024 bytes/hash mark).
ftp> put ~/Documents/hosts host
local: /Users/Joshua/Documents/hosts remote: host
200 Port command successful
150 Opening data channel for file transfer.
#
226 Transfer OK
1043 bytes sent in 00:00 (83.03 KB/s)
ftp> bye
221 Goodbye
bash-3.2#

确认权限没有问题,ok,继续。

第二步,使用php函数传。

我写一段程序吧,很简单,大家看下就明白了。

// FTP服务器的相关信息
$host = your ftp host;
$user = your name;
$pass = your password;

//上传路径及文件名
$ftp_file = ‘/files.txt’

//要上传的文件
$file = ‘/home/joshua/file.txt’

//连接ftp服务器
$conn = ftp_connect($host) or die (”不能够连接到ftp服务器”);
//发送连接参数
ftp_login($conn, $user, $pass) or die(”不能登录”);

//上传,FTP_BINARY参数是要指定文件以二进制(而非ASCII)模式传输
$upload = ftp_put($conn, $ftp_file, $file, FTP_BINARY);

//检查是否上传成功
if (!$upload) {
echo “上传失败”;
} else {
echo “上传成功”;
}

//关闭连接
ftp_close($conn);
?>

好了。

此方法还可以代替http上传到你想传的服务器上。

接下来讲,php如何使用sftp来传送文件。

首先要提示一点:

SSL-FTP!= sftp ,不要傻乎乎地去用 ftp_ssl_connect()连接一个sftp.

php正确连接sftp的方法是用:ssh2_connect(),不过需要 php 安装 ssh2 扩展。

例子如下:其他的同ftp

$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');

ssh2_scp_send($connection, '/local/filename', '/remote/filename', 0644);
?>

Tags: ,
Category: PHP
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Leave a Reply