从我的本地服务器获取文件并使用php将其上载到远程服务器

时间:2012-02-09 21:33:33

标签: php ftp

我知道有很多关于这个问题的帖子但是我在这里找不到一个单独的答案,它完全描述了我想要做的事情并且我一直在寻找HOURS ...所以希望你们都能帮助我并引导我在正确的方向,我无法弄清楚如何做的主要事情是获取源文件并将其传递给我的更新功能,我将该文件ftp到远程服务器......

基本上我要做的是以下内容:

1)从我的本地主机获取文件(例如/home/user/public_html/file.php) 2)将该文件上传到我的一个客户端的远程服务器(我的所有FTP信息都存储在我的数据库中,可以很好地连接到他们的服务器) 3)如果远程服务器上存在该文件,请将其与该文件一起写入。

现在,我已经尝试了ftp_get来获取文件,但这不是我想要做的,因为我不需要重写或将相同的文件存储到本地服务器......

这是我到目前为止所拥有的......

任何帮助都非常感谢,如果在其他地方得到解答,我会道歉,我只是没有看到它! :)

作为对此的更新,我只是想到了某些事情......

为什么我甚至必须通过ftp获取本地文件?我不应该只是能够以其他方式获取本地文件并将其传递给我的更新功能,它将该文件上传到远程服务器?

update.php

$updater = new updater($accountInfo['ftp_user'],$accountInfo['ftp_pass'],$accountInfo['host']);
$file = "relative/path/to/my/file";
$source = $updater->getFile($file);
$updater->update($source,$file);

我的更新课程

class updater {
var $ftp_user = "";
var $ftp_pass = "";
var $ftp_host = "";

function __construct($user,$pass,$host) {
$this->ftp_user = $user;
$this->ftp_pass = $pass;
$this->ftp_host = $host;    
}



 function getFile($file) {
$curl = curl_init();
$file = fopen($file, 'w');
curl_setopt($curl, CURLOPT_URL, "ftp://domain.com/".$file); #input
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($curl, CURLOPT_FILE, $file); #output
curl_setopt($curl, CURLOPT_USERPWD, "ftpuser:ftppass");
$returnFile = curl_exec($curl);
return $returnFile;
}

function update($source,$file) {
    echo("Source: ".$source."<BR>");
    echo("File: ".$file."<BR>");
$connection = ftp_connect($this->ftp_host);

$login = ftp_login($connection, $this->ftp_user, $this->ftp_pass);

if (!$connection || !$login) { die('Connection attempt failed!'); }

$upload = ftp_put($connection, "/home/".$this->ftp_host."/public_html/".$file, $source, FTP_BINARY);

if (!$upload) { 
echo 'FTP upload failed!'; 
} else {
echo("UPDATED FILE ".$source." SUCCESSFULLY!<BR>"); 
}

ftp_close($connection);     
}

1 个答案:

答案 0 :(得分:2)

试试这个:

    # Declare Files
    $local_file = "/home/user/public_html/file.php";
    $remote_file = "public_html/remote_file.php";

    # FTP
    $server = "ftp://ftp.yourhost.com/".$remote_file;

    # FTP Credentials
    $ftp_user = "ftp_username";
    $ftp_password = "password";

    # Upload File
    $ch = curl_init();
    $ftp_file = fopen($local_file, 'r');
    curl_setopt($ch, CURLOPT_URL, $server);
    curl_setopt($ch, CURLOPT_USERPWD, $ftp_user.":".$ftp_password);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_UPLOAD, 1);
    curl_setopt($ch, CURLOPT_INFILE, $ftp_file);
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($local_file));
    $result = curl_exec($ch);

如果符合您的要求,您可以轻松将其置于一个功能中。