2013-03-08 103 views
2

我在腳本編程中總是noob,並試圖找出我的代碼中的問題在哪裏。我有一個帶有客戶詳細信息的文本文件,文件的第一行是用戶名,第二行是真實姓名。這個細節我需要傳遞給PHP。首先,我需要在目錄中找到最舊的文件。我創建bash腳本返回的客戶用戶名:shell_exec裏面的變量

oldest=`ls -tr1 temp/data/*.details|head -1` 
head -n1 $oldest 

此發現odest文件(溫度/數據/ xxx.details),並返回用戶名,讓我們說XXX。

現在,到PHP:

$username = shell_exec('./oldest_order.sh'); 
$name = shell_exec('head -2 temp/data/'.$username.'.details | sed -n 2p'); 

我可以在我的PHP獲取用戶名,於第一線:這是XXX,但第二行是不行的,但是,如果我改變」 $的用戶名。 「到xxx,它的工作原理,所以問題在這個變量周圍的某處。

請指教。

+0

也許一個新的行或空間在年底或年初? var_dump($ username);'給你正確的字符串長度。如果是空格,你可以使用''.trim($ username)''' – jeroen 2013-03-08 21:07:49

+1

'var_dump($ username)'會證實這一點。它會是'string(3)'爲'xxx'而沒有換行符,而4或5代表xxx WITH cr/lf – 2013-03-08 21:13:02

+0

感謝您的快速回答,jeroen。 'var_dump($ username);'給我'字符串(17)「xxx」'這行在第一個和最後一個名字之間包含空格。換行符號(ctrl-m)先前已被'sed's /.$//''替代 – user2149880 2013-03-08 21:25:16

回答

0

也許在最後或開始處有一個新行或空格。

您可以通過執行var_dump($username);來檢查。這會給你字符串的實際長度,以便你可以將它與你認爲它應該有的長度進行比較。

如果是在開始或結束空格,你可以使用:

$name = shell_exec('head -2 temp/data/'.trim($username).'.details | sed -n 2p'); 
+0

好的,想通了。我有字符串(17),因爲這行只包含16個字符。 'trim'完成這項工作。感謝幫助! – user2149880 2013-03-08 21:48:41