用PHP写FTP文件上传

 更新时间:2016年11月25日 17:35  点击:1787

$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);

虚拟主机设置
<VirtualHost 127.0.10.10>
ServerAdmin webmaster@hostmachine.com
DocumentRoot /www/virtual.com/htdocs
ServerName www.virtual.com
UserDir /www/virtual.com/htdocs
ScriptAlias /cgi-bin/ /www/virtual.com/cgi-bin/
ErrorLog /www/virtual.com/logs/error_log
CustomLog /www/virtual.com/logs/access_log common

目录设置
<Directory /www/virtual.com/htdocs>
# 对该虚拟主机设置是否使用php3
php3_engine On
# 设置php3出错信息的调试级别
php3_error_reporting 1
# 设置是否记录php3出错日志
php3_log_errors On
# 设置php3的出错日志文件
php3_error_log /www/virtual.com/logs/php3_error_log
# 设置一个php3线程的最长存活时间
php3_max_execution_time 180
# 设置用户临时上载目录
php3_upload_tmp_dir /www/virtual.com/htdocs/tmp
# 设置包含头文件
php3_include_path /www/virtual.com/htdocs/include

可执行目录设置

Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all

最近一段时间对PHP文件处理方面很感爱好,因此在许多站点上看了许多的文件处理的文章,但是国内许多的站点上的PHP文件处理方面的知识大多数是你抄我的我抄你的,用baidu.com或者是google.com搜索出来的东西多是重复的。最近在国外一个站点上盾了一篇文章感觉很不错,因此推荐给大家阅读。

首先我们有必要说明一下文件上传的操作流程及用到的知识点:

文件上传我们需要用到HTML里面表单的type="file"类型,及其enctype属性。这是我们大家必须要用的。当然了PHP函数库当中的FILE函数库,字符串类型函数库,目录函数库及$_FILES[]的使用是我们必须要用到的。

也许每一个站点都可能会对上传文件有许多的限制,这些限制会包括 文件类型,文件大小,扩展名,以及上传目录的存在与否,上传文件的存在与否,目录的可写性,可读性,上传文件的改名及怎样把文件从缓存当中复制到你所需要的目录当中。

当然出错的预处理也是我们不容忽视的!假如再深一步的讨论我们还可以对文件的操作起用事件日志的记录。

下面我们通过一段程序来实现这些功能:

--------------------------------------------------------------------------------------------


首先是我们预设的变量值,它包括文件大小,文件扩展名类型,MIMI类型,及是否删除的开关变量

$MAX_SIZE = 2000000;
$FILE_MIMES = array('image/jpeg','image/jpg','image/gif'
,'image/png','application/msword');

$FILE_EXTS = array('.zip','.jpg','.png','.gif');

$DELETABLE = true;


下一部就是设置浏览器访问变量及目录访问变量:

$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$upload_dir = "files/";
$upload_url = $url_dir."/files/";
$message ="";


建立上传目录并相应改变权限:

if (!is_dir("files")) {
if (!mkdir($upload_dir))
die ("upload_files directory doesn't exist and creation failed");
if (!chmod($upload_dir,0755))
die ("change permission to 755 failed.");
}



用户请求的处理:

if ($_REQUEST[del] && $DELETABLE) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."DELETE - $_SERVER[REMOTE_ADDR]"."$_REQUEST[del]n");
fclose($resource);

if (strpos($_REQUEST[del],"/.")>0); //possible hacking
else if (strpos($_REQUEST[del],"files/") === false); //possible hacking
else if (substr($_REQUEST[del],0,6)=="files/") {
unlink($_REQUEST[del]);
print "<script>window.location.href='$url_this?message=deleted successfully'</script>";
}
}
else if ($_FILES['userfile']) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."UPLOAD - $_SERVER[REMOTE_ADDR]"
.$_FILES['userfile']['name']." "
.$_FILES['userfile']['type']."n");
fclose($resource);

$file_type = $_FILES['userfile']['type'];
$file_name = $_FILES['userfile']['name'];
$file_ext = strtolower(substr($file_name,strrpos($file_name,".")));

//文件大小的检查:

这是一个用PHP制作的意见反馈表,稍加修改也可用于网上发信程序,主要是让访问者填写表单,用PHP处理后发送到治理员信箱,并向访问者信箱发送一个证实信件。

about.php
-------------------------
<html>
<head>
<title>意见反馈表</title>
</head>
<body>
<?php

$adminmail="admin@etoow.com"; #治理员信箱
$pagename="Acme"; #主页名称
$pageline="http://etoow.com"; #主页地址

#治理员信件内容
if (($formno1!="") and ($formno4!="") and ($formno11!="")) {

$Email=$formno4; #来访者E-mail
$sender=$formno1; #送信人
$nowtime=date("Y年m月d日H时i分");


$tmpfilename = tempnam("./tmp", "dm");
$fp = fopen($tmpfilename, "w");

fwrite($fp, "From: ".$Email."n");
fwrite($fp, "Subject: ".$sender." <".$pagename."-意见反馈表>nn");
fwrite($fp, "送信人:".$sender."n发信IP:".$REMOTE_ADDR."n发信时间:".$nowtime."nn");
fwrite($fp, "反馈表具体内容:n------------------------------------------------------n");
fwrite($fp, "姓名:".$formno1."n性别:".$formno2."n年龄:".$formno3."nE-mail:".$formno4."n工作单位:".$formno5."n联系地址:".$formno6."n邮编:".$formno7."n电话:".$formno8."n传真:".$formno9."n网址:".$formno10."n意见建议:".$formno11."n------------------------------------------------------n");
fclose($fp);

$execstr="cat ".$tmpfilename." | /usr/sbin/sendmail ".$adminmail;
exec($execstr);

$execstr="echo $sender $nowtime $REMOTE_ADDR $REMOTE_HOST >> mail.log";
exec($execstr);

#来客信件内容;
$tmpfilename1 = tempnam("./tmp", "dm");
$fp = fopen($tmpfilename1, "w");

fwrite($fp, "From: ".$adminmail."n");
fwrite($fp, "Subject: 你在[".$pagename."]填写的<意见反馈表>nn");
fwrite($fp, "****此信为自动回复信件,请勿回复。给你带来不便,我们深表歉意。****nn------------------------------------------------------n非常感谢你在[".$pagename."]填写意见反馈表!n以下是您在".$nowtime."填写的具体内容,请确认:n------------------------------------------------------n");
fwrite($fp, "姓名:".$formno1."n性别:".$formno2."n年龄:".$formno3."nE-mail:".$formno4."n工作单位:".$formno5."n联系地址:".$formno6."n邮编:".$formno7."n电话:".$formno8."n传真:".$formno9."n网址:".$formno10."n意见建议:".$formno11."n------------------------------------------------------n".$pagename.":".$pageline."nE-mail:".$adminmail);
fclose($fp);

$execstr="cat ".$tmpfilename1." | /usr/sbin/sendmail ".$Email;
exec($execstr);

#确认页开始;
echo "
<style type=text/css><STYLE>
A {FONT-SIZE: 9pt}
A:link {COLOR: #006666; }
A:visited {COLOR: #006666;}
A:hover {COLOR: #ff0000; TEXT-DECORATION: underline}
TD {FONT-SIZE: 9pt}
INPUT {FONT-SIZE: 9pt}
</style>
<br><p align=center><font size=4><b>*** 非常感谢你在<a href=$pageline>$pagename</a>填写意见反馈表! ***</b></font></p>以下是您填写的具体内容:<hr><br>
<b>姓名:</b>  $formno1<br>
<b>性别:</b>  $formno2<br>

预备知识:Javascript, PHP(少量)/Perl(少量)!
测试环境:Windows2000 IIS5 PHP (Win98 PWS PHP3 失败,估计是配置出了问题)
目录结构:
/wwwroot/cgi-bin/fileup.php (文件接收)
/wwwroot/www/test/phpfileup.htm (文件提交)
/wwwroot/www/test/tmp/ (默认保存目录)

前言:文件上传,简单又麻烦。下面是上传文件的提交页面,利用该页面你不仅可以生成 1000 个上传文件框(实际是任意多个 0~n ),而且可分别指出它们的保存路径。
提交页面的文件输入框为命名为: file0,file1,...file100,...fileN
提交页面的文件路径框为命名为: path0,path1,...path100,...pathN
由于页面的生成非常简单,所以就不在此多解释了,用 javascript 定义了两个函数,check() 用于提交页面,create()用于生成文件上传框。假如你有什么更好的建议或有什么疑问请 Email: gearsoft@netease.com

phpfileup.htm
--------------------------------------------------------
<html>
<head>
<title></title>
<style>
.lbtn {font-family:verdana;font-size:10.5pt;}
.ist {font-family:verdana;font-size:14.8px;size:400}
</style>

<script LANGUAGE="javascript">
function check(){
document.frm1.submit();
document.body.innerHTML="Uploading Please wait!";
}

var i=0;
function create(){
var sfrm = document.frm1.innerHTML;
var icnt = cnt.value;
for(j=0;j<icnt;j )
{
sfrm = sfrm "请选择文件 " i " <input type=file name='file" i "' class=ist>";
sfrm = sfrm " 路径:<input type=text name='path" i "' value='../www/test/tmp/' class=ist>";
sfrm = sfrm "<br>";
i ;
}
document.frm1.innerHTML = sfrm;
document.frm1.cnt.value=i;
}

</script>

</head>
<body class=lbtn onload="document.frm1.cnt.value=cnt.value;">
请输入要上传文件的数量: <input type=text name=cnt value="10" class=ist onchange="document.frm1.cnt.value=this.value;">
<input type=button name=bt1 value="生成上传文件框" onclick="create();" class=lbtn>
<input type=button name=bt1 value="上传" onclick="check();" class=lbtn>
<input type=button name=bt1 value="清除" onclick="document.location.reload();" class=lbtn>

<form name=frm1 method="post" Enctype="multipart/form-data" action="../../cgi-bin/fileup.php">
<input type=hidden name=cnt value="20" class=ist>
</form>

<input type=button name=bt1 value="上传" onclick="check();" class=lbtn>
<input type=button name=bt1 value="清除" onclick="document.location.reload();" class=lbtn>
</body>
</html>
文件提交页面既已生成,下面任务就很明确了:将提交的文件内容保存到服务器上。

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23