1. 云栖社区>
  2. PHP教程>
  3. 正文

php中ftp

作者:用户 来源:互联网 时间:2017-12-01 09:22:25

php中ftp - 摘要: 本文讲的是php中ftp, 在php中使用ftp函数进行文件上传功能的开发,可以正常连接到ftp服务器端,但就是无法上传文件。 程序代码如下: <?php//测试ftp上传文件//by www.ahlinux.comif ($_POST['action']==

在php中使用ftp函数进行文件上传功能的开发,可以正常连接到ftp服务器端,但就是无法上传文件。

程序代码如下:

<?php//测试ftp上传文件//by www.ahlinux.comif ($_POST['action']=='上传'){$tmpname = $_FILES['file']['tmp_name'];$filename = $_FILES["file"]["name"];$conn_id = ftp_connect('192.168.11.186') or die('连接失败');$ftp_user = 'user1';$ftp_pass = 'xxxxxx';if(! @ftp_login($conn_id, $ftp_user, $ftp_pass)){    echo '登录失败<br/>';  } else {    echo "连接成功<br/>";}echo ftp_pwd();//ftp_pasv($conn_id, true);$remote = '/d/file/' . $filename;$local = $tmpname;if(ftp_put($conn_id, $remote,$local, FTP_BINARY)){    echo '图片ftp上传成功 '.$local . "<br/>";;}  else {   echo '图片 Ftp 上传失败' . $local . " - " . $remote . "<br/>";}    ftp_close($conn_id);}?><table width="100%" border="0" align="center" cellpadding="3" cellspacing="1" class="tableborder">        <form action="do.php" method="post" enctype="multipart/form-data" name="etform">                   <tr bgcolor="#FFFFFF">             <td>本地上传</td>            <td><input name="file" type="file" size="32"> </td>          </tr>                    <tr bgcolor="#FFFFFF">             <td>&nbsp;</td>            <td><input type="submit" name="action" value="上传"></td>          </tr>        </form>      </table>

运行结果:

php中ftp

使用ftp命令测试到ftp服务端的连接如下:
php中ftp

由上图可知,连接是正常的。

可是为什么不能正常上传文件呢。

首先,尝试了如下的方法。

1,开启apache中针对当前站点的错误日志记录功能。
php中ftp

2,运行php程序,继续测试ftp上传功能。

3,查看错误日志,发现如下错误信息:
 

php中ftp

原来,在linux系统中,php配置文件中的上传文件的临时文件目录,如果没有配置的话,默认为/tmp/。
默认情况下,该目录没有网站的可写入权限,因此不能存储临时文件$_FILES[file]['tmp_name'],所以上传失败。

找到原因了,解决办法就简单了,用vim打开/etc/php.ini中,作如下修改:
php中ftp

去掉upload_tmp_dir前的注释分号,然后定上临时文件的目录即可。

最后记得加上apache站点用户的可写权限:
 

代码示例:
#chown -R www-data.www-data /var/www/tmp/
#chmod -R 777 /var/www/tmp/

再次上传,成功。

至此,在php中使用ftp_put不能上传文件的问题得以解决。

此问题的关键点:临时上传目录要给予权限。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备
Kubernetes上基于Istio体验云原生应用实践 资料下载