php通过ftp协议上传文件

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> 
  5. <script> 
  6. function send(){ 
  7. document.form2012.action="up.php"
  8. document.form2012.submit(); 
  9. function save(){ 
  10. document.form2012.action="up_save.php"
  11. document.form2012.submit(); 
  12. </script> 
  13. </head> 
  14. <body> 
  15. <?php 
  16. $username='test10086'
  17. if($_POST){ 
  18.     $postid=$_POST['postid']; 
  19.     if($postid=='1'){ 
  20.  
  21.         $conn_id=ftp_connect('test.com','6305') or die("连接失败"); 
  22.         $ftp_user = "root"
  23.         $ftp_pass = "123456"
  24.         if(@ftp_login($conn_id, $ftp_user, $ftp_pass)){ 
  25.             //echo '登录ftp成功'; 
  26.         } 
  27.         else{ 
  28.             echo '登录ftp失败'; 
  29.         } 
  30.          
  31.         $file_name=$_FILES["file"]["name"]['0']; 
  32.         $file_size=$_FILES["file"]["size"]['0']; 
  33.         $temp_url=$_FILES["file"]["tmp_name"]['0']; 
  34.         $source_file=$temp_url; 
  35.         $remote_file='www.test.com/test/upvideo_files/'.$file_name; 
  36.         if(ftp_put($conn_id, $remote_file, $source_file, FTP_BINARY)){ 
  37.             //echo '文件上传成功'; 
  38.         } 
  39.         else{ 
  40.             echo '文件上传失败'; 
  41.         } 
  42.          
  43.         $file_name01=$_FILES["file"]["name"]['1']; 
  44.         $temp_url01=$_FILES["file"]["tmp_name"]['1']; 
  45.         $source_file01=$temp_url01; 
  46.         $remote_file01='www.test.com/test/upvideo_images/'.$file_name01; 
  47.         if(ftp_put($conn_id, $remote_file01, $source_file01, FTP_BINARY)){ 
  48.             //echo '图片上传成功'; 
  49.         } 
  50.         else{ 
  51.             echo '图片上传失败'; 
  52.         } 
  53.          
  54.         ftp_close($conn_id); 
  55.     } 
  56.     elseif($postid=='2'){ 
  57.         $conn_id=ftp_connect('test.com','6305') or die("连接失败"); 
  58.         $ftp_user = "root"
  59.         $ftp_pass = "123456"
  60.         if(@ftp_login($conn_id, $ftp_user, $ftp_pass)){ 
  61.             //echo '登录ftp成功'; 
  62.         } 
  63.         else{ 
  64.             echo '登录ftp失败'; 
  65.         } 
  66.          
  67.         $file_name=$_FILES["file"]["name"]; 
  68.         $file_size=$_FILES["file"]["size"]; 
  69.         $temp_url=$_FILES["file"]["tmp_name"]['0']; 
  70.         $source_file=$temp_url; 
  71.         $remote_file='www.test.com/test/upvideo_files/'.$file_name; 
  72.         if(ftp_put($conn_id, $remote_file, $source_file, FTP_BINARY)){ 
  73.             //echo '文件上传成功'; 
  74.         } 
  75.         else{ 
  76.             echo '文件上传失败'; 
  77.         } 
  78.         ftp_close($conn_id); 
  79.     } 
  80. ?> 
  81.  
  82. <?php 
  83.     if($_GET['fid']){ 
  84.         $fid=$_GET['fid']; 
  85.         include('../conn.php'); 
  86.         $sql="select * from `upload_video` where `id`='$fid';"
  87.         $query=mysql_query($sql,$conn); 
  88.         $row=mysql_fetch_array($query);
  89. ?> 
  90.     <form action="" method="post" enctype="multipart/form-data" name="form2012"> 
  91.         <input type="hidden" name="postid" value="2" /> 
  92.         <input type="hidden" name="fid" value="<?php echo $fid?>" /> 
  93.         标题:<input type="text" name="title" value="<?php echo $row['title']?>" /><br /> 
  94.         简介:<textarea name="introduce"><?php echo $row['introduce']?></textarea><br /> 
  95.         所属分类:<?php echo $row['sortid']?><br /> 
  96.         标签:<input type="text" name="tag" value="<?php echo $row['tag']?>" /><br /> 
  97.         售价:<input type="text" name="gold" value="<?php echo $row['gold']?>" /><br /> 
  98.         添加视频:   <input type="file" name="file" /> 
  99.     <input type="button" value="添加" onclick="send();"> 
  100.  
  101.      
  102.     <br /><br /> 
  103.     分段视频列表:<br /> 
  104.         <table border="1" style="width:400px;border-collapse:collapse;text-align:center" cellspacing="0" cellpadding="0"> 
  105.             <tr> 
  106.                 <td>序号</td> 
  107.                 <td>在页面显示的名称标题</td> 
  108.                 <td>文件名</td> 
  109.             </tr> 
  110.         <?php 
  111.             $sql03="select * from `upload_video` where `username`='$username' and `fid`='$fid'"
  112.             $query03=mysql_query($sql03); 
  113.             $i=1
  114.             while($row03=mysql_fetch_array($query03)){ 
  115.                  
  116.         ?> 
  117.             <tr> 
  118.                 <td><?php echo $i++?></td> 
  119.                 <td> 
  120.                     <input type="hidden" name="upnameid[]" value="<?php echo $row03['id']?>" /> 
  121.                     <input type="text" name="upname[]" value="<?php echo $row03['small_title']?>" /> 
  122.                 </td> 
  123.                 <td><?php echo $row03['file_name']?></td> 
  124.             </tr> 
  125.         <? 
  126.             } 
  127.         ?> 
  128.         </table> 
  129.  
  130.     <br /> 
  131.     <br /> 
  132.     <a href="#" onclick="save();"><img src="../images/v_up.jpg" /></a> 
  133.     </form> 
  134.     <br /> 
  135.     封面:<br /><img src="<?php echo $row['img_url']?>" width="150" height="120" border="1" /><br /> 
  136.  
  137.  
  138. <?php 
  139.     }else{ //下面是第一次添加文件
  140. ?> 
  141.  
  142.  
  143. <form action="" method="post" enctype="multipart/form-data" name="form2012"> 
  144.     <input type="hidden" name="postid" id="postid" value="1" /> 
  145.     标题:<input type="text" name="title" /><br /> 
  146.     简介:<textarea name="introduce"></textarea><br /> 
  147.     所属分类:1<br /> 
  148.     标签:<input type="text" name="tag" /><br /> 
  149.     售价:<input type="text" name="gold" /><br /> 
  150.     <input type="file" name="file[]" /><br /> 
  151.     <input type="file" name="file[]" /><br /> 
  152.     <input type="button" value="添加" onclick="send();"> 
  153.     <br /> 
  154.     <br /> 
  155.     <a href="#" onclick="save();"><img src="../images/v_up.jpg" /></a> 
  156.  
  157. </form> 
  158. <br /> 
  159.  
  160.  
  161. <?php 
  162.     } 
  163. ?> 
  164.  
  165. </body> 
  166. </html> 

 

 

 


问题:

今天公司将网站从linux迁到windows服务器,突然上传出现问题了,文件上传不了,报错:

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(C:\WINDOWS\Temp\php6F44.tmp) is not within the allowed path(s): (D:\htdocs)...

权限问题:不允许操作服务器设置的路径之外的文件路径。

 

权限问题,不允许操作服务器设置的路径之外的文件路径。

解决办法:找网管(或空间商)修改,apache下的httpd.conf   或者   php下的php.ini。

修改apache中(级别最高,父级别,其权限币php.ini还高):

记得后面有两个路径:一个是指定的,另一个是默认的(C:Windows\Temp)。

 
  1. <virtualhost *> 
  2.     <directory "../vhosts/zf.com"
  3.         Options -Indexes FollowSymLinks 
  4.     </directory> 
  5.     ServerAdmin admin@zf.com 
  6.     DocumentRoot "../vhosts/zf.com" 
  7.     ServerName zf.com:80 
  8.     ServerAlias *.zf.com 
  9.     ErrorLog logs/zf.com-error_log 
  10.     php_admin_value open_basedir "D:/htdocs;C:\Windows\Temp;" 
  11. </virtualhost> 

 

修改php.ini中

 

 
  1. open_basedir = "D:/htdocs;C:/WINDOWS/Temp; 

 

更详细的关于:open_basedir配置的

http://chenling1018.blog.163.com/blog/static/148025420087250851438/

http://tunps.com/php-open_basedir

http://www.cnblogs.com/ybbqg/archive/2012/05/04/2482479.html

 

 


 

注意php.ini设置包括:

 

 
  1. upload_max_filesize = 1024M 
  2. post_max_size = 1024M 
  3. max_input_time = 3600 
  4. memory_limit = 32M 
  5. max_execution_time = 0  //php执行时间无限制 

max_execution_time默认是30秒,没有设置这个可能报错:

Fatal error: Maximum execution time of 30 seconds exceeded

注意:当php运行于安全模式时,set_time_limit(0)此功能不能生效。除了关闭安全模式或改变php.ini中的max_execution_time时间限制,没有别的办法。

 

这里有一篇关于php通过ftp上传大文件的研究报告:

http://wenku.baidu.com/view/daa108687e21af45b307a8e3.html

 

 

大部分PHP代码执行时间都不会很久。但是有些时候,比如等待图片上传,可能执行时间过长导致超时。

php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的工作,例如要发送很多电子邮件给大量收件者,或者要进行繁重的数据分析工作,服务器会在 30 秒后强行中止正在执行的程序,如何解决这个问题呢。 
最简单当然是修改 php.ini 中 max_execution_time 的数值,不过不是所有人都有权修改 php.ini,例如使用网页寄存的开发人员,服务器上的 php.ini 由很多网站共同使用,所以不能随意修改。 
另一个办法是在 PHP 程序中加入 ini_set('max_execution_time', '0'),数值 0 表示没有执行时间的限制,你的程序需要跑多久便跑多久。若果你的程序仍在测试阶段,推荐你把时限设置一个实数,以免程序的错误把服务器当掉。

 

 
  1. <?php 
  2. //max_execution_time=100; 
  3. ini_set("max_execution_time", 1); //用此function才能真正在运行时设置 
  4. for($i=1; $i< 100000; $i++) 
  5. echo "No. {$i}\n"
  6. echo '<br />'
  7. flush(); 
  8. ?>  

同时可以使用ini_get把原来设置的max_execution_time保存下来,在进行完操作时回复原来的设定值。

 

当然如果你只是想想php的配置信息用phpinfo()更方便

  ini_set具有更改php.ini设置的功能。此函数接收两个参数:需要调整的配置变量名,以及变量的新值。   例如,在某脚本出现时增加最大执行时间(maximum execution time):

 

 
  1. <?php 
  2. ini_set('max_execution_time', 600) 
  3. // more code 
  4. ?> 

这样的设置将仅仅影响被设置的脚本。一旦脚本执行完毕,该变量将自动恢复到原始值。





      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/940955,如需转载请自行联系原作者



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
安全 算法 网络协议
【Linux】文件服务FTP(File Transfer Protocol)
【Linux】文件服务FTP(File Transfer Protocol)
51 0
|
4月前
|
开发框架 Java 数据处理
多sheet页导出 + FTP上传文件实战
多sheet页导出 + FTP上传文件实战
|
7月前
|
安全 数据安全/隐私保护
直播系统源码部署,高效文件管理与传输的FTP协议
在直播系统源码部署后的每天要处理大量媒体文件的情况下,FTP协议可以依靠自身的强大文件传输管理机制、备份与恢复与自动化任务来帮助平台用户更好的操作体验,通过FTP协议,也确保直播系统源码媒体文件传输的可靠性与安全性,让直播系统源码成为了更优质的平台。
直播系统源码部署,高效文件管理与传输的FTP协议
|
1月前
|
监控 安全 测试技术
使用pyftpdlib组件实现FTP文件共享
使用pyftpdlib组件实现FTP文件共享
28 0
|
2月前
|
Java
java上传、下载、预览、删除ftp服务器上的文件
java上传、下载、预览、删除ftp服务器上的文件
|
3月前
|
存储 数据处理
Dataphin集成任务支持自定义FTP标记完成文件内容(V3.14)
在文件传输的场景中,标记完成文件(有时也被称为标档文件)作为一种重要的确认机制被广泛应用。这一机制通过创建特定的“传输完成标识文件”,用于明确指示数据文件已成功完成全量传输,并达到可以进行下一步业务处理的状态,从而有效防止了基于不完整数据流的错误操作。
|
8月前
|
Java
Java——通过Java代码从ftp服务器下载文件
Java——通过Java代码从ftp服务器下载文件
|
4月前
|
PHP
ctfshow-web3(伪协议php://input的利用)
ctfshow-web3(伪协议php://input的利用)
38 0
|
7月前
|
存储 网络协议 Linux
网络协议与攻击模拟-19-FTP协议
网络协议与攻击模拟-19-FTP协议
60 0
|
8月前
|
Unix Linux 测试技术
FTP命令不同系统之间传输文件
FTP命令不同系统之间传输文件