2012-08-14 102 views
3

我一直在試圖複製另一臺服務器上的nfs share音頻文件。當我使用PHP進行復制時,需要5.5秒才能複製8 MB音頻文件。但是,當我在shell中使用cp命令時,需要0.845秒。從遠程NFS複製拷貝功能比複製Linux cp命令慢

有沒有人有任何想法是什麼問題,以及如何解決它?

<?php 
    $result = copy('/remote/dir/remoteFile.wav’,’12345.wav'); 
    var_dump($returnVar); 
?> 
+3

您是否嘗試過在PHP中使用'cp'命令?如果是這樣,該文件很可能在磁盤緩存中,在測試時給出不同的結果。 – HonkyTonk 2012-08-14 14:44:46

+0

@HonkyTonk可能是真的,但5秒鐘內的8MB是〜12.5 Mb/s,而在本地網絡上的開銷會非常慢。該文件是通過局域網或互聯網複製的嗎(不要忘記考慮VPN等)?這是否可能是由於嘈雜的網絡?這種重複性差異在時間上是否重現? – DaveRandom 2012-08-14 14:50:07

+0

如果您嘗試通過從PHP exec(「cp file newLocation」)或其他東西中解脫出來運行'cp',我會很感興趣的。 – andrewsi 2012-08-14 14:51:44

回答

2

此外,你可以肯定的PHP的副本將是比Linux CP慢,因爲一個使用本地操作系統級調用,而另一種是通過調用Web服務器等相同的應用層。太多層穿過去,通知來處理,協議要堅持等等等等。我不認爲這是完全可以解決的..

也許不是一個copy()的你可以嘗試的exec('cp ..')命令,這將直接嘗試從php運行linux cp命令。可能不會給你提供像cp from shell那麼多的速度,但可能會使它比copy() from php更快一些。試試看吧..

+0

謝謝我已經嘗試過'exec('cp'')',但是花了另外20ms來完成複製。 (我知道20ms不是很多) – shaun 2012-08-14 14:57:31

+0

'shell_exec'稍快一點 – 3zzy 2016-09-07 04:00:04