从我的本地服务器获取文件并使用php将其上传到远程服务器
问题描述:
我知道有很多关于这个问题的文章,但是我在这里找不到一个单一的答案,描述了我正在尝试做什么,寻找HOURS ......所以希望你们都可以帮助我并引导我走向正确的方向,我不知道该怎么做的主要事情是获取源文件并将其传递给我的更新函数,在那里我将ftp文件远程服务器...从我的本地服务器获取文件并使用php将其上传到远程服务器
基本上什么,我试图做的是以下几点:
1)从我的本地主机获取文件(例如/home/user/public_html/file.php) 2 )将该文件上传到远程我的一个客户端的服务器(我的所有FTP信息都存储在我的数据库中,并且可以很好地连接到它们的服务器) 3)如果文件存在于远程服务器上,请将其写入远程服务器。
现在,我已经尝试ftp_get拿到文件,但不是我想要做的,因为我并不需要重新编写或存储相同的文件保存到本地服务器...
这里的我到目前为止...
任何帮助非常感谢,我很抱歉,如果这是回答一些其他地方,我只是没有看到它! :)
AS的更新,这一点,我只是想东西...
为什么我连获得通过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);
}
答
试试这个:
# 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);
您可以轻松地把它放在一个功能,如果这做什么你要。
嗯,似乎没有工作,仍然是返回一个空白的源文件...我返回$结果变量,并将其用作我的源文件,但源代码是空白...我做错了什么?感谢您的帮助! – 2012-02-09 22:17:51
当你说它返回一个空白的源文件,使用我发布的例子,这将是'file.php'? – seanbreeden 2012-02-09 22:23:23
嗯,我有我的更新功能,我传入的源文件和文件名如下:$ source = $ updater-> getFile($ file); $ updater-> update($ source,$ file);但$ source变量是空的,它告诉我getFile函数没有返回文件? – 2012-02-09 22:27:22