2013-03-08 1 views
2

저는 스크립팅에서 멍청한 놈입니다. 제 코드에서 어디에 문제가 있는지 알아 봅니다. 나는 고객 세부 사항이있는 텍스트 파일을 가지고 있는데, 파일의 첫 번째 줄은 사용자 이름이고 두 번째는 실명입니다. 이 세부 사항은 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

+1

'var_dump ($ username)'이이를 확인합니다. 'xxx'는 줄 바꿈없이'string (3)'이 될 것이고, xxx는 4 또는 5입니다. cr/lf –

+0

빠른 응답, jeroen을 가져 주셔서 감사합니다. 'var_dump ($ username);''string (17) "xxx"'이 줄에는 성과 이름 사이에 공백이 포함됩니다. 줄 바꿈 기호 (ctrl-m)는 이전에'sed '///$//'로 바뀌 었습니다. – user2149880

답변

0

아마도 마지막 또는 처음에는 줄 바꿈 또는 공백이있을 것입니다.

var_dump($username);을 통해 확인할 수 있습니다. 이렇게하면 문자열의 실제 길이가 주어져야한다고 생각하는 길이와 비교할 수 있습니다. 그 시작이나 끝에 공백 인 경우

, 당신은 사용할 수 있습니다

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

좋습니다. 알아 냈습니다. 나는 줄이 16 자 밖에 없기 때문에 string (17)을 가졌다. '트림'은 그 일을합니다. 도와 주셔서 감사합니다! – user2149880