php通过ftp协议上传文件
2012-07-24 16:00
531 查看
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <script> function send(){ document.form2012.action="up.php"; document.form2012.submit(); } function save(){ document.form2012.action="up_save.php"; document.form2012.submit(); } </script> </head> <body> <?php $username='test10086'; if($_POST){ $postid=$_POST['postid']; if($postid=='1'){ $conn_id=ftp_connect('test.com','6305') or die("连接失败"); $ftp_user = "root"; $ftp_pass = "123456"; if(@ftp_login($conn_id, $ftp_user, $ftp_pass)){ //echo '登录ftp成功'; } else{ echo '登录ftp失败'; } $file_name=$_FILES["file"]["name"]['0']; $file_size=$_FILES["file"]["size"]['0']; $temp_url=$_FILES["file"]["tmp_name"]['0']; $source_file=$temp_url; $remote_file='www.test.com/test/upvideo_files/'.$file_name; if(ftp_put($conn_id, $remote_file, $source_file, FTP_BINARY)){ //echo '文件上传成功'; } else{ echo '文件上传失败'; } $file_name01=$_FILES["file"]["name"]['1']; $temp_url01=$_FILES["file"]["tmp_name"]['1']; $source_file01=$temp_url01; $remote_file01='www.test.com/test/upvideo_images/'.$file_name01; if(ftp_put($conn_id, $remote_file01, $source_file01, FTP_BINARY)){ //echo '图片上传成功'; } else{ echo '图片上传失败'; } ftp_close($conn_id); } elseif($postid=='2'){ $conn_id=ftp_connect('test.com','6305') or die("连接失败"); $ftp_user = "root"; $ftp_pass = "123456"; if(@ftp_login($conn_id, $ftp_user, $ftp_pass)){ //echo '登录ftp成功'; } else{ echo '登录ftp失败'; } $file_name=$_FILES["file"]["name"]; $file_size=$_FILES["file"]["size"]; $temp_url=$_FILES["file"]["tmp_name"]['0']; $source_file=$temp_url; $remote_file='www.test.com/test/upvideo_files/'.$file_name; if(ftp_put($conn_id, $remote_file, $source_file, FTP_BINARY)){ //echo '文件上传成功'; } else{ echo '文件上传失败'; } ftp_close($conn_id); } } ?> <?php if($_GET['fid']){ $fid=$_GET['fid']; include('../conn.php'); $sql="select * from `upload_video` where `id`='$fid';"; $query=mysql_query($sql,$conn); $row=mysql_fetch_array($query); ?> <form action="" method="post" enctype="multipart/form-data" name="form2012"> <input type="hidden" name="postid" value="2" /> <input type="hidden" name="fid" value="<?php echo $fid?>" /> 标题:<input type="text" name="title" value="<?php echo $row['title']?>" /><br /> 简介:<textarea name="introduce"><?php echo $row['introduce']?></textarea><br /> 所属分类:<?php echo $row['sortid']?><br /> 标签:<input type="text" name="tag" value="<?php echo $row['tag']?>" /><br /> 售价:<input type="text" name="gold" value="<?php echo $row['gold']?>" /><br /> 添加视频: <input type="file" name="file" /> <input type="button" value="添加" onclick="send();"> <br /><br /> 分段视频列表:<br /> <table border="1" style="width:400px;border-collapse:collapse;text-align:center" cellspacing="0" cellpadding="0"> <tr> <td>序号</td> <td>在页面显示的名称标题</td> <td>文件名</td> </tr> <?php $sql03="select * from `upload_video` where `username`='$username' and `fid`='$fid'"; $query03=mysql_query($sql03); $i=1; while($row03=mysql_fetch_array($query03)){ ?> <tr> <td><?php echo $i++?></td> <td> <input type="hidden" name="upnameid[]" value="<?php echo $row03['id']?>" /> <input type="text" name="upname[]" value="<?php echo $row03['small_title']?>" /> </td> <td><?php echo $row03['file_name']?></td> </tr> <? } ?> </table> <br /> <br /> <a href="#" onclick="save();"><img src="../images/v_up.jpg" /></a> </form> <br /> 封面:<br /><img src="<?php echo $row['img_url']?>" width="150" height="120" border="1" /><br /> <?php }else{ //下面是第一次添加文件 ?> <form action="" method="post" enctype="multipart/form-data" name="form2012"> <input type="hidden" name="postid" id="postid" value="1" /> 标题:<input type="text" name="title" /><br /> 简介:<textarea name="introduce"></textarea><br /> 所属分类:1<br /> 标签:<input type="text" name="tag" /><br /> 售价:<input type="text" name="gold" /><br /> <input type="file" name="file[]" /><br /> <input type="file" name="file[]" /><br /> <input type="button" value="添加" onclick="send();"> <br /> <br /> <a href="#" onclick="save();"><img src="../images/v_up.jpg" /></a> </form> <br /> <?php } ?> </body> </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)。
<virtualhost *> <directory "../vhosts/zf.com"> Options -Indexes FollowSymLinks </directory> ServerAdmin admin@zf.com DocumentRoot "../vhosts/zf.com" ServerName zf.com:80 ServerAlias *.zf.com ErrorLog logs/zf.com-error_log php_admin_value open_basedir "D:/htdocs;C:\Windows\Temp;" </virtualhost>
修改php.ini中
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设置包括:
upload_max_filesize = 1024M post_max_size = 1024M max_input_time = 3600 memory_limit = 32M 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 表示没有执行时间的限制,你的程序需要跑多久便跑多久。若果你的程序仍在测试阶段,推荐你把时限设置一个实数,以免程序的错误把服务器当掉。
<?php //max_execution_time=100; ini_set("max_execution_time", 1); //用此function才能真正在运行时设置 for($i=1; $i< 100000; $i++) { echo "No. {$i}\n"; echo '<br />'; flush(); } ?>
同时可以使用ini_get把原来设置的max_execution_time保存下来,在进行完操作时回复原来的设定值。
当然如果你只是想想php的配置信息用phpinfo()更方便
ini_set具有更改php.ini设置的功能。此函数接收两个参数:需要调整的配置变量名,以及变量的新值。 例如,在某脚本出现时增加最大执行时间(maximum execution time):
<?php ini_set('max_execution_time', 600) // more code ?>
这样的设置将仅仅影响被设置的脚本。一旦脚本执行完毕,该变量将自动恢复到原始值。
相关文章推荐
- 在 php 中通过 CURL 上传文件
- PHP可以通过什么组件上传大文件
- 通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
- 如何通过表单上传图片数据,PHP后端获取并且保存文件数据
- php实现通过ftp上传文件
- PHP通过curl模拟POST上传文件,5.5之前和之后的区别
- PHP通过CURL上传文件
- PHP如何通过CURL上传文件
- php 通过curl上传文件
- 在 php 中通过 CURL 上传文件
- 通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
- 通过PHP上传文件
- python 通过post方式上传文件到php服务器
- PHP通过APC获取上传文件进度
- [转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
- Android端通过Okhttp与PHP服务器进行交互并实现文件上传下载(一)
- PHP通过kindeditor上传文件失败的扩展思考。
- 通过PHP简单实例介绍文件上传
- 通过form上传文件(php)
- 通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题