怎么通过PHP来支持FTP和HTTP上传

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么通过PHP来支持FTP和HTTP上传相关的知识,希望对你有一定的参考价值。

给你一些 php 操作 ftp 的函数:


FTP 函数

    ftp_alloc — 为要上传的文件分配空间

    ftp_cdup — 切换到当前目录的父目录

    ftp_chdir — 在 FTP 服务器上改变当前目录

    ftp_chmod — 设置 FTP 服务器上的文件权限

    ftp_close — 关闭一个 FTP 连接

    ftp_connect — 建立一个新的 FTP 连接

    ftp_delete — 删除 FTP 服务器上的一个文件

    ftp_exec — 请求运行一条 FTP 命令

    ftp_fget — 从 FTP 服务器上下载一个文件并保存到本地一个已经打开的文件中

    ftp_fput — 上传一个已经打开的文件到 FTP 服务器

    ftp_get_option — 返回当前 FTP 连接的各种不同的选项设置

    ftp_get — 从 FTP 服务器上下载一个文件

    ftp_login — 登录 FTP 服务器

    ftp_mdtm — 返回指定文件的最后修改时间

    ftp_mkdir — 建立新目录

    ftp_nb_continue — 连续获取/发送文件(non-blocking)

    ftp_nb_fget — 从 FTP 服务器获取文件并写入到一个打开的文件(非阻塞)

    ftp_nb_fput — 将文件存储到 FTP 服务器 (非阻塞)

    ftp_nb_get — 从 FTP 服务器上获取文件并写入本地文件(non-blocking)

    ftp_nb_put — 存储一个文件至 FTP 服务器(non-blocking)

    ftp_nlist — 返回给定目录的文件列表

    ftp_pasv — 返回当前 FTP 被动模式是否打开

    ftp_put — 上传文件到 FTP 服务器

    ftp_pwd — 返回当前目录名

    ftp_quit — ftp_close 的 别名

    ftp_raw — 向 FTP 服务器发送命令

    ftp_rawlist — 返回指定目录下文件的详细列表

    ftp_rename — 更改 FTP 服务器上的文件或目录名

    ftp_rmdir — 删除 FTP 服务器上的一个目录

    ftp_set_option — 设置各种 FTP 运行时选项

    ftp_site — 向服务器发送 SITE 命令

    ftp_size — 返回指定文件的大小

    ftp_ssl_connect — 打开 SSL-FTP 连接

    ftp_systype — 返回远程 FTP 服务器的操作系统类型


例子:

<?php
 
$ftp_server=""; 
$ftp_user_name=""; 
$ftp_user_pass=""; 
$file = "";//tobe uploaded 
$remote_file = ""; 

// 简历ftp链接
$conn_id = ftp_connect($ftp_server); 

// 使用用户名和密码登录
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// 上传文件
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII))  
    echo "成功上传文件: $file\\n"; 
    exit; 
 else  
    echo "上传文件错误: $file\\n"; 
    exit; 
 
    
// 关闭ftp链接
ftp_close($conn_id);
参考技术A 本来就支持的。 参考技术B 本来就支持!

PHP ftp使用

本文章来总结几个利用php中的ftp功能来实现通过FTP上传文件,有需要学习的朋友可参考参考。ftp_get() 函数从 FTP 服务器上下载一个文件。若成功则返回 true,失败则返回 false。语法ftp_get(ftp_connectio

本文章来总结几个利用php中的ftp功能来实现通过FTP上传文件,有需要学习的朋友可参考参考。
 

ftp_get() 函数从 FTP 服务器上下载一个文件。

若成功则返回 true,失败则返回 false。

语法
ftp_get(ftp_connection,local,remote,mode,resume)


ftp_connect() 函数建立一个新的 FTP 连接。

若成功,则返回一个连接标识,否则返回 false。

语法
ftp_connect(host,port,timeout)


ftp_login() 函数登录 FTP 服务器。

若成功则返回 true,失败则返回 false 并发出一个警告。

语法
ftp_login(ftp_connection,username,password)

三个函数己经介绍好了,现在开始了。

例1

 代码如下 复制代码

$ftp_server = "*.*.*.*";
$ftp_user = "lu";
$ftp_pass = "love you";

// set up a connection or die
$conn_id = ftp_connect($ftp_server) or die("Couldn‘t connect to $ftp_server");

$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);

if ((!$conn_id) || (!$login_result)) {
        echo "FTP connection has failed!";
        echo "Attempted to connect to $ftp_server for user $ftp_user_name";
        exit;
    } else {
        echo "Connected to $ftp_server, for user $ftp_user_name";
    }

// try to login
 $filename=date(‘Ymd‘).".xml";
 $source_file="/usr/local/IVR/sendwireless/xml/data/".$filename;  //源地址
 echo $source_file;
 $destination_file="/ITC/admin/logstat/ftplog/".$filename;  //目标地址
 $upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY) or die("Couldn‘t connect to $ftp_server");
 ftp_quit($conn_id);

 if (!$upload) {
        echo "FTP upload has failed!";
    } else {
        echo "Uploaded $source_file to $ftp_server as $destination_file";
    }
ftp_close($conn_id);


上传时先传至本地对文件作必要的修改,如加水印等等操作,然后再通过FTP传至远程服务器.

例2:

 代码如下 复制代码

//上传图片

if ($_FILES[‘pic‘][‘name‘])
{
$file_path=‘/opt/www/img/‘;
$pic = upload(‘pic‘, $filename, ‘jpg|jpeg|gif|bmp|png‘, $file_path);
if(!$pic)
{
echo "图片上传失败!";
exit;
}
require_once(ROOT_PATH . ‘Lib/Class/Ftp.class.php‘);
$ftp = new ftp("127.0.0.1","gamezeroftp","123456","/opt/www");
$localfile=‘/opt/www/img/‘.$pic;
$remotefile=‘/opt/www/gamepics/‘.$pic;
$ftpput = $ftp->put($localfile, $remotefile); //FTP上传原图到远程服务器
if(!$ftpput){
echo "上传图片到远程服务器失败!";
}
$ftp->bye(); //关闭FTP连接
}
附上FTP操作类:


ftpUrl=$ftpUrl;
}
if($ftpUser){
$this->ftpUser=$ftpUser;
}
if($ftpPass){
$this->ftpPass=$ftpPass;
}
if($ftpUrl){
$this->ftpDir=$ftpDir;
}
if ($this->ftpR = ftp_connect($this->ftpUrl, 21)) {
if (ftp_login($this->ftpR, $this->ftpUser, $this->ftpPass)) {
if (!empty($this->ftpDir)) {
ftp_chdir($this->ftpR, $this->ftpDir);
}
ftp_pasv($this->ftpR, true);//R 启用被动模式;
$status = 1;
} else {
$status = 3;
}
} else {
$status = 2;
}
}
//R 切换目录;
function cd($dir) {
return ftp_chdir($this->ftpR, $dir);
}
//R 返回当前路劲;
function pwd() {
return ftp_pwd($this->ftpR);
}
//R 创建目录
function mkdir($directory) {
return ftp_mkdir($this->ftpR,$directory);
}
//R 删除目录
function rmdir($directory) {
return ftp_rmdir($this->ftpR,$directory);
}
//R 上传文件;
function put($localFile, $remoteFile = ‘‘) {
if ($remoteFile == ‘‘) {
$remoteFile = end(explode(‘/‘, $localFile));
}
$res = ftp_nb_put($this->ftpR, $remoteFile, $localFile, FTP_BINARY);
while ($res == FTP_MOREDATA) {
$res = ftp_nb_continue($this->ftpR);
}
if ($res == FTP_FINISHED) {
return true;
} elseif ($res == FTP_FAILED) {
return false;
}
}
//R 下载文件;
function get($remoteFile, $localFile = ‘‘) {
if ($localFile == ‘‘) {
$localFile = end(explode(‘/‘, $remoteFile));
}
if (ftp_get($this->ftpR, $localFile, $remoteFile, FTP_BINARY)) {
$flag = true;
} else {
$flag = false;
}
return $flag;
}
//R 文件大小;
function size($file) {
return ftp_size($this->ftpR, $file);
}
//R 文件是否存在;
function isFile($file) {
if ($this->size($file) >= 0) {
return true;
} else {
return false;
}
}
//R 文件时间
function fileTime($file) {
return ftp_mdtm($this->ftpR, $file);
}
//R 删除文件;
function unlink($file) {
return ftp_delete($this->ftpR, $file);
}
function nlist($dir = ‘/service/resource/‘) {
return ftp_nlist($this->ftpR, $dir);
}
//R 关闭连接;
function bye() {
return ftp_close($this->ftpR);
}
}
?>

以上是关于怎么通过PHP来支持FTP和HTTP上传的主要内容,如果未能解决你的问题,请参考以下文章

求php怎么实现web端上传超大文件

php POST上传和FTP上传哪个好 为啥

如何设置http代理上ftp并且可以上传?

php上传文件到服务器

FTP客户端上传怎么样?

通过带有PHP代码的Web服务器将应用程序上的本地文件上传到FTP服务器