2013-01-16 33 views
0

我需要在PHP中創建自定義FTP封裝的幫助。PHP。從FTP下載流或自定義FTP封裝

我用

$h=fopen('ftp://....'); 

但是,這並不適用於所有的FTP服務器(有時主動/被動模式的問題)很好地工作,我不能與包裝物進行控制。

我使用的功能從http://php.net/manual/en/book.ftp.php和所有正常工作。我只有使用PHP FTP包裝下載時遇到問題。

我需要使用包裝,因爲我不想將下載的文件存儲到磁盤。我從流中讀取文件的一部分,然後輸出到用戶瀏覽器。

所以我想在PHP中創建自定義FTP包裝。最重要的是,如果它基於那裏的功能http://php.net/manual/en/book.ftp.php

我看到比如有http://php.net/manual/en/function.ftp-fget.php

function ftp_get_contents ($conn_id, $filename, 
//Create temp handler: 
    $tempHandle = fopen('php://temp', 'r+'); 

//Get file from FTP assuming that it exists: 
    ftp_fget($conn_id, $tempHandle, $filename, FTP_ASCII, 0)); 

    //Getting detailed stats to check filesize: 
    $fstats = fstat($tempHandle); 

    return fread($tempHandle, $fstats['size']); 
} 

但由於其保存完整的文件到硬盤,只有在此之後,我可以從本地文件讀取,這是不好的。

你知道這樣的事情,但允許我從FTP服務器讀取部分文件而無需在本地緩存完整文件?

謝謝。

+0

不要使用php。 PHP已經吃足夠的內存了。使用你通過php調用的一些命令行腳本。 –

+0

你的意思是使用http://php.net/manual/en/function.popen.php並創建一些命令行工具從FTP讀取文件並打印輸出? –

+0

是的。使用正確的工具來完成這項工作!錘子的指甲。螺絲刀螺絲。漂亮的主頁的PHP。 :) –

回答

0

我找到了解決方案。

我做

$h=popen('wget -q -O - ftp://.....','r'); 

它工作正常。但是必須安裝wget。