2011-10-21 2 views
0

저는 리눅스에서 몇 가지 명령을 실행하기 위해 PHP 시스템 (exec) 함수로 작업하려하지만 작동하지 않습니다!

root 사용자로 시스템에 로그인했습니다. "/1.txt"파일을 만든 다음 apache 서버를 통해이 PHP 스크립트를 실행했습니다 : system("sudo cp /1.txt /2.txt", $out);하지만 파일을 복사하지 않습니다.

왜 작동하지 않는지 설명 할 수 있습니까? (리눅스 OS에 익숙하지 않습니다. 설명해주세요.)

+1

'sudo'에 대한 암호를 알려주지 않았습니까? – Ryan

+0

sudo에 비밀번호를 어떻게 제공해야합니까? – EBAG

답변

2

sudo을 삭제하고 /1.txt와 /2.txt의 아파치 사용자에게 권한을 부여하면 작동합니다.

/2.txt가 없으면 디렉토리를 만들고 해당 디렉토리에 1.txt를 입력하고 디렉토리와 파일 모두에 대해 apache 사용자에게 권한을 부여하십시오.

0

/1.txt 및 /2.txt는 파일 시스템의 최상위 수준에 있습니다. 어느 쪽이든 그것은 좋은 생각이 아닙니다.

define('WEBAPP_FILES_LOCATION', '/var/webapp-files'); 
system("cp ".WEBAPP_FILES_LOCATION."/1.txt ".WEBAPP_FILES_LOCATION."/2.txt", $out); 

참고 : 나는 대한 일정한 정의한

나는 당신의 파일에있는 지역, 예를 들면은/var/웹 애플리케이션 - 파일/뭔가를 할 수있는 방법을을 가진 권 해드립니다 위치는 여러 곳에서 필요하기 때문에 언제든지 변경할 수 있기 때문에 반복해서 시작하고 싶지는 않습니다. 시스템 명령을 실행 이것이 할 것

:

cp /var/webapp-files/1.txt /var/webapp-files/2.txt 

당신은/var/웹 애플리케이션-파일 디렉토리가 아파치 사용자의 쓰기 권한이 경우 성공한다.

그러나 ... PHP에는 복사를위한 내장 기능이있어보다 일반적이며 위험한 시스템() 대신 사용하는 것이 좋습니다. 도움이

define('WEBAPP_FILES_LOCATION', '/var/webapp-files'); 
$copySucceeded = copy(WEBAPP_FILES_LOCATION."/1.txt", WEBAPP_FILES_LOCATION."/2.txt"); 
echo "The copy attempt ". ($copySucceeded ? "succeeded" : "failed"); 

희망 : 당신은 CP 그래서 당신이 내 앞의 예를 리팩토링 할 수 않는 한 전체 경로가 필요합니다 http://uk3.php.net/manual/en/function.copy.php이 복사본()에 대해 읽을 수 있습니다.

관련 문제