2011-12-02 5 views
0

난 내 서버에 PHP 코드의 조각을 실행하려고 :PHP는 간부 (과 리눅스 명령을 실행)와 쉘 스크립트를 실행

나의 이해에서
<?php 
$cmd = 'echo "this is a test" > /home/ubuntu/scripts/test_file'; 
echo exec($cmd); 
?> 

는 텍스트의 조각을 추가해야합니다 파일 test_file. 파일이 적절한 위치에 존재하고 PHP 파일에서 chmod 755 및 chmod 777을 시도했습니다. 그러나 나는 텍스트가 text_file에 추가되는 것을 보지 않는다. 내가 서버에서 직접 리눅스 명령을 실행 해봤는데 그것은 작동합니다. 어떤 사람이 내가 뭘 잘못하고 있다고 말할 수 있습니까?

또한, PHP 스크립트를 통해 서버에 가상 호스트 파일을 만들려고합니다. php exec()을 통해 명령을 실행하는 대신 쉘 스크립트를 실행하여 텍스트 파일에서 필수 매개 변수를 읽고 가상 호스트 파일에서 디렉토리 경로를 설정하는 것이 더 좋을 것이라고 생각했습니다. 나는 리눅스에 익숙하지 않다. 좋은 접근인가? 아니면 이것에 대해 더 좋은 방법이 있을까? 이 모든 것은 magento 기반 사이트를 프로그램 적으로 설정하기 위해 수행됩니다. 감사.

+0

'exec'를 호출하면 오류/경고가 발생합니까? –

+0

가상 호스트 파일은 접근이 제한적이어야하며, 아파치 사용자를 통해 수정해서는 안됩니다. – ajreal

+0

@ JanHančič 아니요, 오류가 없습니다. – Nithin

답변

0

코멘트가 이미 말했듯이, 웹을 통한 사용자 입력을 기반으로하는 Apache 구성을 작성하면 여러 가지 문제가 발생할 수 있으므로 실제로 수행하려는 작업을 수행하는 것은 바람직하지 않습니다.

PHP 측에서 파일이나 데이터베이스에 필요한 정보를 기록한 다음 PHP가 실제 구성을 수행하는 다른 프로세스에 의해 cron 스크립트 등을 통해 지금마다 폴링되도록하는 것이 좋습니다. 변경. 이것은 PHP (항상 나쁜)에서 exec() 할 필요가 없습니다. 이를 통해 PHP를 실행하는 프로세스가 중요한 시스템 파일에 대한 쓰기 권한을 가질 필요가 없습니다.

+0

어떻게 PHP로 파일을 작성한 다음 cron을 실행하면 Apache 구성에 쓰는 셸 스크립트가 실행됩니까? – Nithin

+0

예, 적합한 옵션입니다. – TuomasR

1

코드는 정상입니다. 문제는 아마도 PHP가 safe mode (더 이상 사용되지 않지만 링크가 표시됨)이나 파일/디렉토리 사용 권한에 있습니다.

파일 실행 파일을 0777로 줄 필요가 없으므로 파일 실행 파일을 만들 수 있으므로 0666이면 충분합니다. 그러나 파일에 올바른 권한이있는 것으로 충분하지는 않습니다. 경로의 각 디렉토리는 통과 할 수 있어야합니다. PHP 코드가 실행되는 권한을 가진 사용자가 액세스 할 수있는 다른 디렉토리를 시도하십시오. /tmp은 좋은 시작입니다.

이와 같은 문제를 디버깅하는 일반적인 방법은 echo이 실행 된 컨텍스트에 대한 추가 정보를 제공하는 다른 명령을 실행하는 것입니다 (예 :

<?php 
echo exec("id"); 
echo "<br/>"; 
echo exec("ls -l /home/ubuntu/scripts/test_file"); 
?> 

(이러한 표시를, exec()는 명령의 출력의 마지막 행을 반환하지만 하나의 라인을 기억). 이 명령은 코드를 실행하는 사용자와 파일을 전혀 볼 수 있는지 여부를 알려줍니다.

+0

이것은 내가 제공 한 코드 스 니펫을 실행했을 때 얻은 것입니다. 'uid = 33 (www-data) gid = 33 (www- 데이터) groups = 33 (www- 데이터) -rw-r-r-- 1 우분투 우분투 10.12 09:02/home/우분투/scripts/test_file' php 파일은'/ var/www/websites/jivity/testing.php'입니다. 내가 여기서 뭘 잘못하고 있는지 말해 줄 수 있니? 감사. 추신 : 사용자는/home/우분투 디렉토리에 대한 전체 권한을 가지고 있지만 PHP 스크립트가 실행되는 디렉토리에는 없습니다. – Nithin

+0

글쎄,이 출력에 따르면'ubuntu' 사용자 만이'test_file'에 쓸 수 있지만 php 코드는'www-data' 사용자로 실행됩니다. 파일 및 경로의 모든 디렉토리에 적절한 권한을 부여하십시오. "적절하다"에 대한 노트 : 전세계에 허가를주는 대신에'www-data' 그룹을 사용할 수 있습니다. 코드가 실행되는 디렉토리는 부적합합니다. 또한'/ tmp'에 파일을 써서 파일을 실제로 쓸 수 있는지 확인하십시오. –

관련 문제