2009-09-29 21 views
0

我開發了一個PHP5下載的遞歸FTP腳本,允許您使用AJAX請求選擇要下載的文件和/或目錄。服務器接收到的POST變量只是一個簡短的管道分隔字符串,根本不佔用任何內存。在遠程虛擬服務器上FTP下載失敗,但在本地設置上完美工作

腳本本身在我的本地Apache安裝程序中完美工作,並進入每個目錄並下載每個文件和文件夾。

在我設置在Media Temple下的遠程虛擬服務器上,腳本在大型結構上失敗,這由我的本地Apache處理得很好。

症狀是有些目錄被認爲是文件,因此腳本不會進入並進一步下載。

該腳本通過嘗試遠程打開它來檢查路徑是否爲目錄。如果它可以打開目錄,它會遞歸地下載它中的所有內容,直到它完成。

在Media Temple上託管的php.ini比我的本地設置(更長的最大執行時間,更高的內存限制等)有更高的閾值,所以這不是問題...我甚至嘗試過在遠程服務器上使用我的本地php.ini。

拖尾錯誤日誌用於獲取我的「腳本標頭,PHP的提前結束」,直到我從常規託管切換到專用虛擬服務器。現在它根本沒有反應。

我試圖解決的問題是在php.ini中試驗不同的值,最近我爲每個新創建的文件和目錄做了flush()和ob_flush()...嘗試阻止任何「腳本標題,PHP過早結束」的發生。

你有什麼想法嗎?

+0

只是一個建議......有禮貌的問題不是以'嘿!'開頭的 - 除此之外,通過嘗試打開它來檢查對象是文件還是文件夾是否明智? – pavium 2009-09-29 07:43:46

+0

對不起,「嘿!」不,它感覺不太好。但是,沒有其他方法(據我所知)來檢查它是否是dir ...沒有用於FTP的is_dir()函數。我之前做的是檢查文件名最後一段中的點。但是一個目錄可以包含點,所以這是一個壞主意。這是緩慢的,但給出了正確的結果。 – Christoffer 2009-09-29 08:50:01

回答

0

嗯,基本上我不知道你的代碼是怎麼樣的,但那部分here(來自php.net maillinglist)在我的服務器上工作正常。 也許你可以給我們一個你的代碼的例子嗎?

+0

謝謝,這會加快一點...現在運行一個測試,看看是否足以使腳本按預期工作... – Christoffer 2009-09-29 16:03:01

+0

嗯...你提供的新代碼給出了完全相反的結果。一開始一切工作正常,然後一切開始被下載爲文件夾。 (Epiphany!Doh!FTP連接可能在沒有腳本注意到的情況下關閉:S當我找到時會回覆給你) – Christoffer 2009-09-30 06:24:12

+0

是的,現在它可以工作...但它仍然比我的本地設置要慢20倍左右。 – Christoffer 2009-09-30 07:13:32

0

也許這是一個訪問問題:你在Linux上運行? 虛擬機是否與您的開箱一樣? 運行apache的用戶是否有足夠的權限來讀取目錄?

+0

服務器運行Linux CentOS 5,我的開發包運行的是Ubuntu 9.04。權利似乎不是問題......我在描述中不清楚。它完美的工作了一段時間。一些文件和目錄下載得很好。但過了一段時間,一些目錄被認爲是文件,腳本以很多完成,但遠沒有完成。 – Christoffer 2009-09-29 16:05:46

相關問題