/**
* Ftp上传文件
*/
public function ftpUpload()
{
ini_set('memory_limit', '-1');//取消内存限制
set_time_limit(0);//无时间限制可以一直执行到结束
// 建立基础连接
// 如果成功返回一个连接标识,失败则返回 FALSE 。
$ftpUrl = '175.***.***.**';//(这里不能包含 "ftp://" 或者斜线)
$conn_id = ftp_connect($ftpUrl);//打开 FTP 连接
if (!$conn_id) {
return $this->error('FTP基础连接失败!');
}
// 登录Ftp 用户名和口令
$login_result = ftp_login($conn_id, '用户名', '密码');
// 检查是否登录成功
// 成功时返回 TRUE, 或者在失败时返回 FALSE。 如果登录失败,PHP 会抛出一个警告。
if (!$login_result) {
return $this->error('FTP登录失败!');
}
$pwd = ftp_pwd($conn_id);//获取当前目录
$list = ftp_nlist($conn_id, $pwd);//获取当前目录下所有的目录与文件
if (!$list) {
return $this->error('获取当前目录失败');
}
$dir_name = date("Ymd");//新目录名
if (!in_array($pwd . $dir_name, $list)) {
//创建新目录
if (!ftp_mkdir($conn_id, $dir_name)) {
return $this->error('创建' . $dir_name . '目录失败');
}
}
//切换目录
$chdir = @ftp_chdir($conn_id, $dir_name);
if (!$chdir) {
return $this->error('切换' . $dir_name . '目录失败');
}
$filePath = realpath('D:\Win10系统默认(不能删)\桌面\test_01.txt'); //待上传的文件地址
if (!$filePath) {
return $this->error('上传的文件不存在');
}
// 上传文件
$upload = ftp_put($conn_id, "test_01.txt", $filePath, FTP_ASCII);
// 检查上传结果
// 成功时返回 TRUE, 或者在失败时返回 FALSE。
if (!$upload) {
$res = '上传失败!';
} else {
$res = '上传成功!';
}
// 关闭 FTP 流
ftp_close($conn_id);
return $this->error($res);
}
/**
* Ftp下载文件
*/
public function ftpDowlond()
{
ini_set('memory_limit', '-1');//取消内存限制
set_time_limit(0);//无时间限制可以一直执行到结束
// 建立基础连接
// 如果成功返回一个连接标识,失败则返回 FALSE 。
$ftpUrl = '175.***.***.**';//(这里不能包含 "ftp://" 或者斜线)
$conn_id = ftp_connect($ftpUrl);//打开 FTP 连接
if (!$conn_id) {
return $this->error('FTP基础连接失败!');
}
// 登录Ftp 用户名和口令
$login_result = ftp_login($conn_id, '用户名', '密码');
// 检查是否登录成功
// 成功时返回 TRUE, 或者在失败时返回 FALSE。 如果登录失败,PHP 会抛出一个警告。
if (!$login_result) {
return $this->error('FTP登录失败!');
}
$ftp_file_name = 'test_01.txt';//FTP要下载的文件
$ftp_path = ftp_pwd($conn_id) . date('Ymd');// FTP指定的目录 /20220516
$chir = @ftp_chdir($conn_id, $ftp_path);//切换到FTP下/20220516目录
if (!$chir) {
return $this->error('FTP不存在' . "'$ftp_path'" . '目录!');
}
//在当前访问项目中创建临时文件
$tmpfile = tempnam(getcwd() . "/", "temp");
if (!$tmpfile) {
return $this->error('临时文件创建失败');
}
// 进行ftp下载
if (!ftp_get($conn_id, $tmpfile, $ftp_file_name, FTP_BINARY)) {
return $this->error('下载失败');
}
// 关闭 FTP 流
ftp_close($conn_id);
//读取临时文件,将其内容写入到输出缓冲(这个不能少不)
//成功,该函数返回从文件中读入的字节数。如果失败,该函数返回 FALSE 并附带错误信息 '@' 来隐藏错误输出。
@readfile($tmpfile);
//clearstatcache();//清除文件状态缓存
unlink($tmpfile);// 删除临时文件
//告诉浏览器这是一个文件流格式的文件
Header("Content-type: application/octet-stream");
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
header("Content-Disposition: attachment; filename=" . $ftp_file_name);
//告诉浏览器当前页面不进行缓存,每次访问的时间必须从服务器上读取最新的数据
header('Cache-Control: must-revalidate');
// 缓存控制
header('Cache-Control:max-age=0');
exit();
}
网友评论