2014-02-13 122 views
0

我有一個非常大的文件,5GB csv文件,我想用PHP執行方法向用戶顯示。PHP執行vs在linux終端執行相同的命令

我曾嘗試使用Linux命令來讀取特定的行號(行21到30),而不是所有行:

mycprogram largefile.csv | sed -n "21,30p;30q" 

該終端的命令之後將返回線的確切數目被輸入。但是,當我在php exec中使用類似命令時,在進入sed以獲取我想要的行號之前,它將等待第一部分(mycprogram largefile.csv)完全加載到內存中(這需要很長時間)。 PHP代碼是一樣的東西:

$cmd = "mycprogram largefile.csv | sed -n '21,30p;30q'"; 
exec($cmd, $output); 

任何想法,我可以不用等待mycprogram到滿載得到什麼,我從終端獲得與它的輸出使用PHP的方法?

感謝 如何

+0

將其導入db,問題解決了 – 2014-02-13 01:43:40

回答

0

是否通過largefile.csv行命令mycprogram轉換東西線?如果是的話,就sed將當作河流流量,默認情況下sed的負載的所有文件逐行迫使整個先前輸入滿載/處理改爲

$cmd = "sed -n '21,30p;30q' largefile.csv > temp; mycprogram temp" ; 
+0

thx您的建議。但是它的效果與處理器仍然處理整個'largefile.csv'的效果相同(可以通過'top'命令查看)。儘管如此,我已經將標誌添加到'mycprogram'來獲取我想要的行數,而不是使用'sed'。從這裏得到的教訓是,與在終端中鍵入命令相比,使用PHP「exec」時並非所有進程或命令的行爲都相同。 – CheeHow