php中ftp_put无法上传文件的解决方法(图文)

发布时间:2019-08-21编辑:脚本学堂
本文介绍下,在php中用ftp_put函数不能上传文件的原因分析及解决办法,有需要的朋友参考下。

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

程序代码如下:

<?php
//测试ftp上传文件
//by www.jb200.com
if ($_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>

运行结果:

ftp上传

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

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

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

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

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

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

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

apache错误日志

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

找到原因了,解决办法就简单了,用vim打开/etc/php.ini中,作如下修改:
修改php配置文件临时上传目录

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

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

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

再次上传,成功。

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

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