2017-12-20 3 views
2

나는 redhat 리눅스에 아래의 PHP 스크립트 (test.php)를 가지고 있습니다. 내가 명령 줄 (PHP는 test.php)에서이 스크립트를 실행하면 예상대로쉘 명령어 'touch'가 PHP에서 작동하지 않습니다.

<?php 
shell_exec('touch /var/www/html/test.txt'); 
?> 

, 그것은 일하고있어. 그러나 브라우저에서 test.php를 실행하면 (http://hostname/test.php) 파일 test.txt가 생성되지 않습니다.

나는 ALL = (ALL) NOPASSWD 편집 sudo는 visudo를 www가 데이터를 시도 : ALL

이 날 도와주세요!

답변

0

손님 권한으로 인해 명령 줄에서 실행하면 사용자로 실행되지만 브라우저를 통해 실행하면 웹 서비스 사용자로 실행되므로 /var/www/html/ 디렉토리의 허가를 확인하고 755에 대한 사용 권한 및 웹 서비스에 소유자를 변경 (아파치, 아파치 등이 웹 serivce로 가지고가)

그래서

chown -R apache:apache /var/www/html/ (I'm not sure about your web-service, change it your webserice and it's group) 
chmod -R 755 /var/www/html/ 
+0

감사 Zhilevan이 ... 솔루션 내 문제를 해결. –

0

PHP 그게 잘 실행됩니다. 그러나 시스템은 검색해야 할 pathes에서 touch을 찾지 못합니다.

가장 쉬운 방법은 touch으로 전체 경로를 지정하는 것입니다. 명령 whereis를 사용하여 내 시스템에

$whereis touch 
touch: /usr/bin/touch /bin/touch /usr/share/man/man1/touch.1.gz 

touch 그래서 스크립트가 될 것이다 찾을 수 있습니다 :

<?php 
shell_exec('/usr/bin/touch /var/www/html/test.txt'); 
?> 
+0

답변 해 주셔서 감사합니다. 아파치로 파일의 소유자를 변경하여 해결 된 문제. –

+0

흥미로운 정보를위한 thx – user5542121

관련 문제