【问题标题】:Upload files from one server to another server using php not working?使用php将文件从一台服务器上传到另一台服务器不起作用?
【发布时间】:2015-09-30 02:32:55
【问题描述】:

我尝试了多种方式来使用 PHP 中的 FTP 函数上传文件。但这对我不起作用。我不知道我在这段代码中犯了什么错误。我也给出了本地文件路径或另一个服务器文件路径,但在这两种情况下它都不起作用。我在下面给出了我的代码。谁能帮忙找出我的问题?

/* Source File Name and Path */
$backup_file = '/var/www/html/artbak/assets/uploads/edi/test.txt';
//$backup_file = '/workspace/all-projects/artbak/assets/uploads/edi/test.txt';
$remote_file = $backup_file;

$ftp_host = 'hostname'; /* host */
$ftp_user_name = 'username'; /* username */
$ftp_user_pass = 'password'; /* password */ 

/* New file name and path for this file */
$local_file = '/public_html/example.txt';

/* Connect using basic FTP */
$connect_it = ftp_connect( $ftp_host );

/* Login to FTP */
$login_result = ftp_login( $connect_it, $ftp_user_name, $ftp_user_pass );

/* Download $remote_file and save to $local_file */
if ( ftp_put( $connect_it, $local_file, $remote_file, FTP_BINARY ) ) {
    echo "WOOT! Successfully written to $local_file\n";
}
else {
    echo "Doh! There was a problem\n";
}

/* Close the connection */
ftp_close( $connect_it );

以下代码适用于本地到服务器上传,但不适用于服务器到服务器上传。它显示服务器未连接。请各位大侠给点思路。我在这个概念上更加挣扎。

$ftp_host = 'hostname'; /* host */
$ftp_user_name = 'username'; /* username */
$ftp_user_pass = 'password'; /* password */ 

// set up a connection or die
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server"); 

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);

$file = "dummy.txt";

$remote_file = "receiveDummy.txt";

// upload a file
if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII)) {
    echo "successfully uploaded $file\n";
} else {
    echo "There was a problem while uploading $file\n";
}

// close the connection
ftp_close($conn_id);

【问题讨论】:

  • 给定的 FTP 详细信息是目标服务器,是否正确或我需要源服务器详细信息?
  • 尝试使用error_reporting(E_ALL) 开启错误并在else 分支中输出error_get_last()
  • 好的,我会检查的。错误显示是 ftp_login()、ftp_put() 和 ftp_close() 期望参数 1 是资源,给定的布尔值。
  • 我检查了 FTP 详细信息,一切正常。那我怎么能得到错误。
  • 我给出的源路径是 SFTP ,目标路径是 FTP 。有没有这方面的问题。我觉得这样不行。

标签: php codeigniter ftp


【解决方案1】:

感谢你们的支持。我很高兴在几天的工作中发布这个答案。只是需要避免目标服务器路径/public_html/test.txt 而不是test.txt。如果您有任何子文件夹,请提供 sample/test.txt 之类的。请检查下面的代码,对于像我这样的人来说,它是完整的。

/* Source File Name and Path */
            $remote_file = '/var/www/html/artbak/assets/uploads/edi/test.txt';

            $ftp_host = 'hostname'; /* host */
            $ftp_user_name = 'username'; /* username */
            $ftp_user_pass = 'password'; /* password */ 

            /* New file name and path for this file */
            $local_file = 'test.txt';

            /* Connect using basic FTP */
            $connect_it = ftp_connect( $ftp_host );

            /* Login to FTP */
            $login_result = ftp_login( $connect_it, $ftp_user_name, $ftp_user_pass );

            /* Download $remote_file and save to $local_file */
            if ( ftp_put( $connect_it, $local_file, $remote_file, FTP_BINARY ) ) {
                echo "WOOT! Successfully written to $local_file\n";
            }
            else {
                echo "Doh! There was a problem\n";
            }

            /* Close the connection */
            ftp_close( $connect_it );

有一件事是我的服务器有一些防火墙阻止,因此只有第一个 ftp 没有通过 php 代码连接。现在我也解决了这个问题。因为我在服务器本地工作的代码已经知道。为此,我参考了以下链接来解决服务器中的防火墙块,Can't connect to FTP with PHP ftp_connect from localhost。所以它运作良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2017-01-23
    • 2014-05-17
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    相关资源
    最近更新 更多