2013-04-18 3 views
6

이것은 매우 간단하며 아이디어가 없습니다. 빠른 해결 방법이있을 것입니다.PHP exec 호출의 리디렉션은 빈 파일을 만듭니다.

exec('echo 123 &> /var/log/123.log'); 

123.log 파일이 생성되었으므로 사용 권한과 관련이 없습니다.하지만 비어 있습니다. 또한 shell_exec 시도했지만 파일을 전혀 만들지 않습니다. 리디렉션의 변형도 모두 시도했습니다 (예 : 1> 2> >).

PHP를 사용하여 출력을 캡처하는 것은 옵션이 아닙니다. 프로덕션의 출력이 크기 때문에 메모리 문제가 발생하지 않기를 바랍니다.

감사합니다.

Btw, 우분투 12.04 램프를 사용하고 있습니다. &없이

+0

터미널에서'echo 123 & gt;/var/log/123.log'를 사용해 보셨습니까? –

+0

당신은 그 사용 권한이 아닌 100 % 긍정적입니까? 터미널에서 수동으로 echo 문을 실행하고 작동하는지 확인하십시오. – 1337holiday

+0

확인 됨. PHP 5.3.10-1ubuntu3.4를 Suhosin-Patch와 함께 사용하기. –

답변

0

해보십시오 shell_exec : 도움을했다

echo shell_exec("echo 123 > /var/log/123.log"); 
0

만 것은 간부 권한, 예를 들어,와 쉘 스크립트를 만드는 것이 었습니다 test.sh :

#!/bin/bash 
echo 123 &>> /var/log/123.log 

이처럼 실행합니다

shell_exec('[full path to]/test.sh'); 

그래서, 리디렉션 연산자는 중요하지 않지만 다른 모든 (# 지시어, shell_exec!)입니다.

+0

이유는 cli 리디렉션이 셸에서 처리되기 때문에 bash가 실행 된 것만 알면됩니다. 나는 exec가 어떻게 다른 방법으로 명령을 해석하는지 모르겠습니다. – tishma

+0

완전성을 위해서 : bash가 사용되는지 확인하는 또 다른 방법은'shell_exec ('/ bin/bash -c \'echo 123 &> /var/log/123.log \ '')'입니다. 그러나 나는 그것이 매우 추악하다는 것을 인정한다. –

0

데비안과 데비안 기반의 리눅스 배포판은 우분투와 같이 dash를 사용하고 있으며, 지금은/bin/sh로 bash를 사용하지 않습니다.

&>은 bash 확장자이며 대시는 알 수 없습니다. 그래서 당신은 당신을 변경해야 대시, 배쉬, KSH, zsh을, 재 ...

:

cmd &> file를 작성하는 올바른 POSIX 호환 방법은 모든 POSIX 호환 쉘에서 cmd > file 2>&1

cmd > file 2>&1 작품입니다 코드에 :

exec('echo 123 > /var/log/123.log 2>&1'); 
+0

주문에 관한 것입니다. 그냥'exec ('echo 123> ./123.log &');'도 괜찮습니다. –

+0

@AlexandrKapustin : 아니오, 그냥'echo 123> ./123을 실행합니다.로그'백그라운드에서. –

관련 문제