2012-02-09 123 views
1

我知道有很多關於這個問題的文章,但是我在這裏找不到一個單一的答案,描述了我正在嘗試做什麼,尋找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);  
} 

回答

1

試試這個:

# 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); 

您可以輕鬆地把它放在一個功能,如果這做什麼你要。

+0

嗯,似乎沒有工作,仍然是返回一個空白的源文件...我返回$結果變量,並將其用作我的源文件,但源代碼是空白...我做錯了什麼?感謝您的幫助! – 2012-02-09 22:17:51

+0

當你說它返回一個空白的源文件,使用我發佈的例子,這將是'file.php'? – seanbreeden 2012-02-09 22:23:23

+0

嗯,我有我的更新功能,我傳入的源文件和文件名如下:$ source = $ updater-> getFile($ file); $ updater-> update($ source,$ file);但$ source變量是空的,它告訴我getFile函數沒有返回文件? – 2012-02-09 22:27:22

相關問題