PHP文件上传实现上传到另一台服务器

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

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

语法

host 必需。规定要连接的 FTP 服务器。可以是域名或 IP 地址。
后面不应以斜线结尾,前面也不需要用 ftp:// 开头。
 
port 可选。规定 FTP 服务器的端口。

timeout 可选。规定该 FTP 服务器的超时时间。默认是 90 秒。

然后在台式机本地做了个测试:

 代码如下 复制代码
$ftp_server = "192.168.1.100";
$ftp_user_name = "laohu";
$ftp_user_pass = "123456";
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
$file = 'test.txt';
$remote_file = '/test/a.txt';

// 注意:这里的"/test"指的是ftp根目录下的test文件夹,而非系统跟目录下的

test

 代码如下 复制代码

$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
  echo "文件移动成功";
} else {
  echo "移动失败";
}
ftp_close($conn_id);

运行后:文件移动成功。

要的就是这个效果了,之后用台式机做程序服务器,上传附件时全用ftp方法上传至笔记本上,笔记本ip是105,相

应代码如下:

 代码如下 复制代码

if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])) {
  $ftp_server = "192.168.1.105";
  $ftp_user_name = "lesley";
  $ftp_user_pass = "123456";
  $conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
  $file = $_FILES['uploadfile']['tmp_name'];
  $remote_file = '/test/'.$_FILES['uploadfile']['name'];
  $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

  if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
    echo "文件:".$_FILES['uploadfile']['name']."上传成功";
  } else {
    echo "上传失败";
  }
  ftp_close($conn_id);
}

对应的前台页面代码:

 代码如下 复制代码

<form action="uploadfile.php" method="post" enctype="multipart/form-data">
  <input type="file" name="uploadfile" id="uploadfile" />
  <input type="submit" name="submit" value="submit" />
</form>

运行后确实成功。

下面看一个ftp文件上传类

 代码如下 复制代码

<?php 
/**
* desc:FTP类
* link:www.111cn.net
* date:2013/02/24
*/ 
class ftp 

public $off;  // 返回操作状态(成功/失败) 
public $conn_id;  // FTP连接 
 
/**
* 方法:FTP连接
* @FTP_HOST -- FTP主机
* @FTP_PORT -- 端口
* @FTP_USER -- 用户名
* @FTP_PASS -- 密码
*/ 
function __construct($FTP_HOST,$FTP_PORT,$FTP_USER,$FTP_PASS) 

$this->conn_id = @ftp_connect($FTP_HOST,$FTP_PORT) or die("FTP服务器连接失败"); 
@ftp_login($this->conn_id,$FTP_USER,$FTP_PASS) or die("FTP服务器登陆失败"); 
@ftp_pasv($this->conn_id,1); // 打开被动模拟 

 
/**
* 方法:上传文件
* @path-- 本地路径
* @newpath -- 上传路径
* @type-- 若目标目录不存在则新建
*/ 
function up_file($path,$newpath,$type=true) 

if($type) $this->dir_mkdirs($newpath); 
$this->off = @ftp_put($this->conn_id,$newpath,$path,FTP_BINARY); 
if(!$this->off) echo "文件上传失败,请检查权限及路径是否正确!"; 

 
/**
* 方法:移动文件
* @path-- 原路径
* @newpath -- 新路径
* @type-- 若目标目录不存在则新建
*/ 
function move_file($path,$newpath,$type=true) 

if($type) $this->dir_mkdirs($newpath); 
$this->off = @ftp_rename($this->conn_id,$path,$newpath); 
if(!$this->off) echo "文件移动失败,请检查权限及原路径是否正确!"; 

 
/**
* 方法:复制文件
* 说明:由于FTP无复制命令,本方法变通操作为:下载后再上传到新的路径
* @path-- 原路径
* @newpath -- 新路径
* @type-- 若目标目录不存在则新建
*/ 
function copy_file($path,$newpath,$type=true) 

$downpath = "c:/tmp.dat"; 
$this->off = @ftp_get($this->conn_id,$downpath,$path,FTP_BINARY);// 下载 
if(!$this->off) echo "文件复制失败,请检查权限及原路径是否正确!"; 
$this->up_file($downpath,$newpath,$type); 

 
/**
* 方法:删除文件
* @path -- 路径
*/ 
function del_file($path) 

$this->off = @ftp_delete($this->conn_id,$path); 
if(!$this->off) echo "文件删除失败,请检查权限及路径是否正确!"; 

 
/**
* 方法:生成目录
* @path -- 路径
*/ 
function dir_mkdirs($path) 

$path_arr  = explode('/',$path);  // 取目录数组 
$file_name = array_pop($path_arr);// 弹出文件名 
$path_div  = count($path_arr);// 取层数 
 
foreach($path_arr as $val)// 创建目录 

if(@ftp_chdir($this->conn_id,$val) == FALSE) 

$tmp = @ftp_mkdir($this->conn_id,$val); 
if($tmp == FALSE) 

echo "目录创建失败,请检查权限及路径是否正确!"; 
exit; 

@ftp_chdir($this->conn_id,$val); 


 
for($i=1;$i<=$path_div;$i++)  // 回退到根 

@ftp_cdup($this->conn_id); 


 
/**
* 方法:关闭FTP连接
*/ 
function close() 

@ftp_close($this->conn_id); 


// class class_ftp end
?>

调用代码

 代码如下 复制代码

<?
/***
* desc:调用示例
* link:www.111cn.net
* date:2013/2/24
*/
$ftp = new ftp('192.168.0.249',21,'hlj','123456');  // 打开FTP连接
$ftp->up_file('aa.wav','test/13548957217/bb.wav'); // 上传文件
//$ftp->move_file('aaa/aaa.php','aaa.php');// 移动文件
//$ftp->copy_file('aaa.php','aaa/aaa.php');// 复制文件
//$ftp->del_file('aaa.php');   // 删除文件
$ftp->close(); // 关闭FTP连接
?>

需要注意,在用ftp_put方法时,第四个参数传送模式,需要用FTP_BINARY(二进制模式),用FTP_ASCII(文本模式)

时,图片能上传但无法显示,其他文件重命名、中文乱码解决、上传权限控制等,就不在此提及了。

时间: 2024-10-29 23:14:29

PHP文件上传实现上传到另一台服务器的相关文章

php限制上传文件类型并保存上传文件的方法

 这篇文章主要介绍了php限制上传文件类型并保存上传文件的方法,涉及php针对上传文件的常用操作技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了php限制上传文件类型并保存上传文件的方法.分享给大家供大家参考.具体如下: 下面的代码演示了php中如何获取用户上传的文件,并限制文件类型的一般图片文件,最后保存到服务器 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3

php基础教程:文件以二进制形式上传并放入数据库

  php基础教程:文件以二进制形式上传并放入数据库 conn.php: <?php $id=mysql_connect('localhost','root','root'); mysql_select_db("db_database12",$id); mysql_query("set names gb2312"); ?> index.php: <html> <head> <meta http-equiv="Con

asp.net上传execl文件后,在页面上加载显示

 本篇文章主要是对asp.net上传execl文件后,在页面上加载显示(示例代码)进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助  代码如下:     #region 上传Execl文件     protected void Button1_Click(object sender, EventArgs e)     {         if (FileUpload1.HasFile)         {             string NewFileName = string.E

文件上传功能,关闭网页后文件还能继续上传,再次打开网站的时候能显示文件的进度

问题描述 文件上传功能,关闭网页后文件还能继续上传,再次打开网站的时候能显示文件的进度 小弟,想开发一个b/s结构的文件上传功能,然后怎么能在关闭网页后文件还能继续上传 ,然后再次打开网站的时候能显示文件上传的进度,小弟先谢谢了! 解决方案 纯b/s肯定不行,浏览器关闭了谁去上传数据?只能是用activex去启动一个客户端程序,让它在后台上传文件. 解决方案二: 这个在B/S结构下是不能实现的,二楼的回答貌似是断点续传的实现,是你的想法? 建议你不要在这个想法上花心思了,没结果的, 冒昧问一下,

asp.net-C# Activx 上传分块上传大文件时能由Activx来完成合并分块的工作吗

问题描述 C# Activx 上传分块上传大文件时能由Activx来完成合并分块的工作吗 我用C#做activx上传大文件,采用http分块上传的思想,可是服务器端的人说,分块和拼接的工作都应由activx完成,上传完了给服务器一个完成的信号,服务器端只负责把拼接的文件编入数据库和移动到合适的位置,可是网上的好多资料都是拼接工作在服务器端完成,Activx真的能实现远程拼接工作吗,如果能,能否给一些资料,谢谢 解决方案 服务器端的人说的不对,ActiveX只需要分块就可以了.再拼接上显然是服务器

java-使用jspsmart.upload组件上传文件总是上传不上,跪求指点

问题描述 使用jspsmart.upload组件上传文件总是上传不上,跪求指点 JSP body区: <% SmartUpload su=new SmartUpload(); su.initialize(pageContext); su.upload(); int num=su.save("/file/", SmartUpload.SAVE_VIRTUAL); out.println(num+"个文件上传成功!!!"); %> 已经把组件的包导进去了 &

php实现SAE上使用storage上传与下载文件的方法_php技巧

本文实例讲述了php实现SAE上使用storage上传与下载文件的方法.分享给大家供大家参考.具体如下: <?php if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: "

php限制上传文件类型并保存上传文件的方法_php技巧

本文实例讲述了php限制上传文件类型并保存上传文件的方法.分享给大家供大家参考.具体如下: 下面的代码演示了php中如何获取用户上传的文件,并限制文件类型的一般图片文件,最后保存到服务器 <?php $allowedExts = array("gif", "jpeg", "jpg", "png"); $extension = end(explode(".", $_FILES["file&qu

javaweb 大文件上传-上传单个大文件和一次上传多个分割文件效果一样吗?

问题描述 上传单个大文件和一次上传多个分割文件效果一样吗? 用struts2上传大文件.直接上传一个大文件,和在一个表单里面上传它的分割个文件效果一样吗?就是多文件上传是一个一个文件的进入内存上传释放内存,还是一次性全部进内存.. 对js不熟,没学过jQuery网上很多上传大文件的都看不懂.今天试着上传2个文件,一个20多M,一个30多M的.内存就到90%了... 解决方案 看你是怎么一个分隔,如果是ajax方式的,一个一个来,那么就是你说的一个一个读取内存再释放.如果是放在一个http会话中,

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 [源码下载] 重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之通信的新特性 下载数据(显示下载进度,将下载数据保存到本地) 上传数据(显示上传进度) 上传文件 示例HTTP 服务端WebServer/HttpDemo.