php上传+shell,python/php/shell实现ftp上传文件

今天同事问我用python来实现ftp上传文件是否熟悉,因为之前没接触过,所以现在研究下,通过参考了一些文档,简单编写了code,已测试通过!Ftp服务端相关的配置我这里就不啰嗦了!希望对大家有所帮助!

python代码如下:

#!/usr/bin/env python

#-*- coding:utf-8 -*-

#author:icyboy

from ftplib import FTP

import os,sys,string,datetime,time

#import traceback

hostaddr = '192.168.2.58' #ftp地址

username = 'jiunile' #用户名

password = '123456' #密码

port = 21 #端口号

rootdir_local = '/Users/icyboy/upload/' #本地目录

rootdir_remote = './' #远程目录,注意如果ftp是chroot的话就不能写/home/jiunile/xxx/,默认进去就是/目录了,只需要写xxx/即可,不然会提示550没权限

local_file = '/Users/icyboy/upload/1.txt' #本地文件

remote_filename = '1.txt' #保存到远程目录文件名

def login(remotedir='.'):

try:

ftp.set_pasv(True) #模式:被动模式

ftp.connect(hostaddr, port)#连接:地址端口

ftp.login(username, password) #登录:用户密码

log("---------------------------------------------")

log("连接已完成:"+ftp.getwelcome())

except Exception:

log("连接或登录失败")

sys.exit() #返回一个 SystemExit异常 (退出程序)

try:

#print ftp.pwd() #打印ftp目录

#ftp.retrlines('LIST') #列出ftp目录下的信息

ftp.cwd(remotedir)

except Exception:

log("切换目录失败")

sys.exit()

def is_same_size( localfile, remotefile):

try:

remotefile_size = ftp.size(remotefile)

except:

remotefile_size = -1

try:

localfile_size = os.path.getsize(localfile)

except:

localfile_size = -1

if remotefile_size == localfile_size:

return 1

else:

return 0

#上传文件函数

def upload_file( localfile, remotefile):

if not os.path.isfile(localfile): #如果文件不存在

return

if is_same_size(localfile, remotefile): #本地与远程文件大小一样的话(文件存在)

log('文件已存在: %s' %localfile)

return

file_handler = open(localfile, 'rb') #打开本地要上传的文件

ftp.storbinary('STOR %s' %remotefile, file_handler) #上传本地文件

file_handler.close() #关闭打开的文件

log('文件已传送: %s' %localfile)

#创建子目录并执行上面的 上传文件upload_file函数

def upload_files( localdir='./', remotedir = './'):

if not os.path.isdir(localdir): #目录是否存在

return

localnames = os.listdir(localdir) #获取目录中的文件及子目录的列表

ftp.cwd(remotedir) #变更工作目录

#循环目录下的文件与子目录

for item in localnames:

src = os.path.join(localdir, item) #连接字符串

if os.path.isdir(src): #目录是否存在

try:

ftp.mkd(item) #创建目录

except:

log('目录已存在: %s' %item)

upload_files(src, item)

else:

upload_file(src, item) #上传文件(upload_file函数)

ftp.cwd('..') #变更工作目录

#记录日志函数

def log(msg):

datenow = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())

logstr = '%s : %s \n' %(datenow, msg)

logfile.write(logstr)

if __name__ == '__main__':

logfile = open("/tmp/log.txt", "a")

ftp = FTP()

login(rootdir_remote)

#上传文件夹下面的文件

upload_files(rootdir_local,rootdir_remote)

#上传某个文件

#upload_file(local_file, remote_filename)

log('操作已完成')

log('---------------------------------------------')

logfile.close()

php代码如下:

$hostaddr = "192.168.2.58";

$username = "mm";

$password = "123456";

$local_file = "/Users/icyboy/upload/1.txt";

$remote_filename = "./1.txt";

$conn_id = ftp_connect($hostaddr,0) or die("Couldn't connect to $hostaddr");

$login_result = ftp_login($conn_id, $username, $password);

if ( !$conn_id || !$login_result )

{

echo 'FTP连接失败!\n';

exit;

}

else

{

echo "FTP连接成功!\n";

}

$upload = ftp_put($conn_id, $remote_filename, $local_file, FTP_BINARY) or die("连接失败!");

ftp_close($conn_id);

if ( !$upload )

echo "上传失败!\n";

else

echo "上传成功!\n";

shell代码如下:

#!/bin/sh

TRANS_DATE=`date +%y%m%d%H%M`

echo "

open 192.168.2.58

prompt

user mm 123456

cd .

binary

lcd /Users/icyboy/upload

mput 1.txt

close

bye

"|ftp -v -n |sed 's/^/>/g' >>run.log

#open 192.168.2.58 建立FTP服务器连接

#user mm 123456 设置FTP服务器登录时的用户名和密码

#cd . 设置要上传到FTP服务器上目标文件夹

#lcd /Users/icyboy/upload 进入要进入上传文件的目录

#mput 1.txt 将1.txt传至服务器目标文件夹

#ftp -v -n -v 显示远程服务器所有响应信息,-n 限制FTP的自动登录

#sed 's/^/>/g' 每行开头处都替换为>

if [ -s run.log ] #判断run.log是否存在且不为空

then

echo "SYSTEM: FTP LOGGING SUCCESS!!!"

SEARCH=`grep 'bytes sent in' run.log`

if [ $? -eq 0 ] #$?为上次命令的退出状态,$?=0表示从中寻找到bytes sent in关键字

then

echo "FTP transfer file OK"

rm run.log

else

echo "FTP transfer file fail"

mv run.log ${TRANS_DATE}_fail.log

fi

else

echo "SYSTEM: FTP LOGGING FAIL!!!"

exit 1

fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值