首页 » PHP笔记 » 如何使用php中ftp函数上传文件以及解决上传文件失败的方法

如何使用php中ftp函数上传文件以及解决上传文件失败的方法

高蒙 2017/02/15 10:36 3.0k浏览 0评论 PHP


在php中如何使用ftp函数实现此项功能呢?以及怎么排查php使用ftp函数上传文件失败的原因?

因为系统重构实现均衡负载,网站程序与文件服务器不在一台机子上。于是,程序在上传文件的同时就要将文件上传到文件服务器上。

这里涉及到windows主机上传到linux主机,linux主机上传到linux主机。这两个之间呢,只是稍微的有点区别,因为windows的路径可以兼容linux路径,但是linux的路径不兼容windows主机'\\'的写法。所以,在写路径的时候稍加注意即可。

下面,就列举上面两种情况php中使用ftp函数上传文件的具体实现代码。

一、 ftp上传图片参数说明。

$source:本机图片完整的路径。(/a/b/c.jpg)
$des   :上传目标linux主机完整的路径。
$ftp_server:ftp地址
$ftp_user_name:ftp用户名
$ftp_user_pass: ftp密码
$port:端口

二、如何使用php中ftp函数上传文件的方法

例如:

  •     本地地址为:/a/b/c.jpg

  •     目标地址为:/d/a/b/c.jpg

2.1、linux主机上传linux主机。

function ftpSendFile($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port) 
    {
        // 此步骤是在于上传目录与本机的目录不一致转换使用
        $des = "/d" . $des;
        $conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
        $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
        ftp_pasv($conn_id, TRUE);
        $ftp_folder = dirname($des);
        $dir = explode("/", $ftp_folder);
        $path = "";
        for ($i = 0; $i < count($dir); $i++) {
            $path .= "/" . $dir[$i];
            if (!ftp_chdir($conn_id, $path)) {
                $result = ftp_mkdir($conn_id, $path);
            }
        }
        if (ftp_put($conn_id, $des, $source, FTP_BINARY)) {
            return 1;
        } else {
            return 0;
        }
        ftp_close($conn_id);
    }

2.2、windows主机上传linux主机。

function sendPic($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port) 
    {
        $des = "/d" . $des;
        $conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
        $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
        ftp_pasv($conn_id, TRUE);
        $ftp_folder = dirname(str_ireplace('\\', '/', $des));
        $dir = explode("/", $ftp_folder);
        $path = "";
        for ($i = 0; $i < count($dir); $i++) {
            $path .= "/" . $dir[$i];
            if (!ftp_chdir($conn_id, $path)) {
                $result = ftp_mkdir($conn_id, $path);
            }
        }
        if (ftp_put($conn_id, str_ireplace('\\', '/', $des), $source, FTP_BINARY)) {
            return 1;
        } else {
            return 0;
        }
        ftp_close($conn_id);
    }

上面的两种使用php中ftp函数上传文件的方法基本可以满足正常的使用。


可是,在实际的过程中可能还会遇到上传失败的问题,那么,我们该怎么解决呢?

三、如何排查php使用ftp函数上传失败的原因?

1、帐号密码端口不对,引发的上传失败?

答:这种问题属于常识,不清楚的咨询运维或者空间商等。


2、上传目录无权限,引发的上传失败?

答:将上传目录最好设置为777。


3、ftp用户上传无权限,引发的上传失败?

答:查看ftp用户是否有权限上传到指定的目录,可咨询运维或者空间商等。


4、上传路径错误,引发的上传失败?

答:仔细比对本地上传文件地址与目标上传文件地址,是否真的存在。


通过上面的四个步骤就可以基本的排查出php使用ftp函数上传失败的原因。





相关文章

我有话说

站长昵称:(*)

输入内容:

选个头像:

评论列表

    ...

    高蒙

    男, PHP程序猿

    文章

    484

    标签

    41

    热度

    10w+

    南京, 江苏, 中国

    人生要是没有理想, 那跟咸鱼有什么分别。