簡體   English   中英

是否可以從一台服務器(sftp)下載文件並將其使用php上傳到我的服務器?

[英]Is it possible to download a file from one server (sftp) and upload it to my server using php?

有人告訴我這不能完成,但我想在這里征詢其他意見。 對於這樣的事情,我還是個新手。

我的網站:ExampleSiteA.com

下載文件:ExampleSiteB.com

基本上,我是從ExampleSiteB.com下載一個csv文件來更新我的網站ExampleSiteA.com。 為此,我要通過CoreFTP手動下載csv文件,然后手動將其上傳到ExampleSiteA.com。 該文件每天更改一次,我想跳過此步驟,以便使該過程自動化。

請記住,我需要通過SFTP從ExampleSiteB.com下載csv文件...

如果一台服務器是SFTP,我不確定是否可以將文件從一台服務器直接下載/上傳到另一台服務器。 文件大小也很大,平均約為25,000 KB / 25 MB。

我尚未探索的另一個選項是需要或包括來自另一台服務器的文件...這是一個選項還是可能? 該文件位於我的站點專用的文件夾中,並且需要登錄才能下載SFTP。

任何見識將不勝感激。 提前致謝!

轉到此處下載所需內容: http : //phpseclib.sourceforge.net/

更新

  • 對於SFTP

然后在您的腳本中:

<?php
include('Net/SFTP.php');

$url = 'http://www.downloadsite.com';
$fileToDownload = "yourCSV.csv";
$cmd = "wget -q \"$url\" -O $fileToDownload";
exec($cmd);

$sftp = new Net_SFTP('www.uploadsite.com');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp->pwd() . "\r\n";
$sftp->put('remote.file.csv', 'yourCSV.csv', NET_SFTP_LOCAL_FILE);
print_r($sftp->nlist());
?>

如果需要連接到第二台服務器進行下載:

$sftp2 = new Net_SFTP('www.serverFromWhichToDownload.com');
if (!$sftp2->login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp2->pwd() . "\r\n";
$sftp2->get('localFileName.csv', 'remoteFileName.csv');
print_r($sftp2->nlist());

閱讀文檔以獲取更多幫助和示例: http : //phpseclib.sourceforge.net/documentation/net.html#net_sftp_get

要記錄連接失敗時的操作等,請使用此命令:

include('Net/SSH2.php');
define('NET_SSH2_LOGGING', true);
$ssh = new Net_SSH2('www.domain.tld');
$ssh->login('username','password');
echo $ssh->getLog();
  • FOR FTP上傳 -SO瘋了,不想格式化我的代碼,但是無論如何這里都是這樣:
$file = 'somefile.txt';
$remote_file = 'readme.txt';
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
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";
}
ftp_close($conn_id);

是的,可以使用ssh2_sftp。

http://php.net/manual/zh/function.ssh2-sftp.php

過去,我對cURL感到很幸運。 如果您在Linux機器上,則設置一個CRON作業來為您執行此更新過程將很簡單。 可以在此處找到有關cURL中CLI HTTP腳本的很好的參考,但是您可能需要-T標志(用於文件傳輸)才能完成上傳部分。 說到上傳,如果您可以從要更新的服務器上運行腳本/進程/ crontab,我建議您 Web服務器上下載以免一次旅行和第三方旅行。 或者,如果您需要按需更新,則可以編寫一個使用內置PHP cURL函數的PHP腳本。 如果采用Linux + CLI路由,則也可以使用sftp

更新:在使用sftp測試curl( curl -u uname:pword sftp://domain.tld )時,出現以下錯誤: curl: (1) Protocol sftp not supported or disabled in libcurl Kubuntu 12.04上的curl: (1) Protocol sftp not supported or disabled in libcurl 因此,cURL可能不是一個好主意。 我還測試了CLI sftp( sftp uname@domain.tld:/dir/file.ext ),但是找不到發送身份驗證的方法(缺少使用ssh密鑰)。 因此,除非您確實在服務器之間設置了ssh密鑰,否則這將必然是手動過程。 由於聽起來您不具有對ExampleSiteB.com的訪問權限,所以這可能是不可接受的。

更新2:由於最初的答案被證明沒有多大用處,所以我認為我將擴展以上答案之一。 我試圖找到一種不涉及PECL擴展的解決方案,但是ftp_ssh_connect()並不太幸運。 我建議您嘗試一下,這樣可能會更好,並且可以放棄PECL擴展路線。

ftp_ssh_connect是,在進一步閱讀中,似乎ftp_ssh_connect與sftp協議不兼容。 但是,我找到了一篇不錯的博客文章,內容涉及利用ssh2_connect()ssh2_sftp() (如上一個答案中所述),並認為我會發布該文章以為您提供更多幫助。 它不像調用大多數PHP發行版的函數那樣簡單。 這是博客文章。 這些步驟中的某些步驟可能不是必需的,或者您可能需要執行我在此處遇到的另一篇博客文章中列出的其他事項。

在我的系統上,我所要做的就是運行apt-get install libssh2-1-dev libssh2-php ,我能夠在php -m輸出中找到ssh2。

有一個包含,只要您對網站具有讀/寫權限,您從中獲取文件就可以正常工作,但這只是猜測工作atm,因為我沒有任何檢查方法。 祝你好運!

是的,您應該能夠做到這一點。

誰告訴您您不能執行此操作,可能會與JavaScript和跨站點腳本瀏覽器限制混淆,后者限制了從一個域下載的JavaScript不能訪問另一個域中的內容。

就是說,如果您使用的PHP對我而言意味着您正在談論在Web服務器上運行的PHP,則應該能夠使用PHP或任何其他腳本或編程語言從SiteB.com下載文件,然后進行更新文件,然后最終通過FTP將文件傳輸到其他Web服務器(SiteA.com)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM