2014-09-04 2 views
0
나는 그것이 권한으로 할 인 느낌이있다

, 나는 g ++PHP 간부 기능은

MAIN.CPP

#include <iostream> 

int main(int argc, char* argv[]) 
{ 
    std::cout << "It works!" << std::endl; 
    return 0; 
} 

다음과 같은 프로그램을 컴파일하고 나는 PHP가 관련 내 컴파일 된 프로그램 권한을 실행하지 명령 줄에서 프로그램을 실행

test.php

<?php 
// DEBUG ///////////////////////////////// 
error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 
////////////////////////////////////////// 

$in = "/home/alex/Dropbox/code_snippets/output/a.out"; 
$out = exec($in); 

echo "In : " . $in . "<br>"; 
echo "Out: " . $out . "<br>"; 
?> 

파일 I "It works!"라는 출력을 얻으십시오. 그러나 내가 PHP를 실행했을 때 나는 결과물을 얻지 못한다. (나는 여전히 [In : ... \ nOut :]를 얻는다.

관련 질문 : php exec() is not executing the command

나를 마지막에 "2> & 1"을 넣어 만든 지금은의 출력을 얻을 :

아웃 : SH : 1 :/홈/알렉스/Dropbox/code_snippets/output/a.out : 사용 권한이 거부되었습니다.

a.out에 빠른 sudo chmod 0777을 수행 한 후에도 여전히 동일한 결과를 얻습니다. 또한 PHP에 소유권을 부여하기 위해 sudo chown www-data a.out을 시도했지만 그 중 하나도 작동하지 않았습니다. 매우 간단하지만 솔루션을 얻는 데 어려움을 겪고 있습니다. 미리 감사드립니다.

편집 : 나는 그것이 PHP를 통해 실행되는 사용자 www가 데이터 것을 찾아 ("WHOAMI을") 간부 인 사용했기 때문에

  1. 간부() 함수는 확실히 작동합니다.

  2. 시도했던 opendir() 디렉토리에 기능이 동일한 권한

    을 거부 반환

경고 :했던 opendir (/ 홈/알렉스/보관/code_snippts/출력) : 디렉토리를 열지 못했습니다 : /var/www/html/test.php에서 거부 권한

나는 PHP는 인터넷에 모습을 조금 더 가지고 한 다음에/var/www가에서 물건을 실행으로 제한되어 있기 때문에 그것이 같은데요 도움이 될 것으로 판단되었습니다.

https://help.ubuntu.com/community/ApacheMySQLPHP 그리고/var/www가 아닌 ​​다른 디렉토리에서 물건을 실행할 수있는 능력을 설정하는 방법 인 suPHP 설치 부분까지 스크롤하여 다른 사람에게 더 좋은 아이디어가 있습니까?

/var/www에 a.out을 복사했으며 PHP가 "It works!"를 출력하고 있습니다.

+0

php.ini에서 exec() 함수를 사용할 수 있는지 확인 했습니까? 특히'disable_functions'에리스트되어 있는지 확인하십시오 – mz3

+0

PHP 파일은 어디에 있습니까?/home/alex/Dropbox/code_snippets/output/디렉토리를 열 수 있습니까? (했던 opendir() 예를 들어, 함수로) 나는 노력으로 – Petr

답변

0

코드가 제대로 작동하므로 환경 구성 문제가 발생합니다. 간부()가 disable_functions에 허용되면

1) 간부()는 safe_mode가 켜져 있는지 확인 php.ini를

php.ini 파일 블랙리스트되거나.

2) 파일을 포함하는 디렉토리는 웹 서버 구성에 허용되지 않습니다.

당신이 웹 서버를 사용하지만, 그런 경우는 (아파치 예를 들어)의 경우 서버 설정에서 다음과 같은 디렉토리 블록 거기에 있는지 확인하고 있다면 당신은 말했다하지 않은

:

<Directory /var/www/> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    Require all granted 
</Directory> 
+0

간부는 확실히하고있다 :'("WHOAMI") 을 '간부를하고 2 올바른 – user3102241

+0

대답 번호를 반환 어디 알고 위와 같이 변경해야하는 정보가 포함 된 Apache 구성 파일이 있습니까? – user3102241

+0

Emzy입니다 www가 데이터를 – user3102241

0

당신은 수도가 umask 값을 사용해야합니다 : www가 데이터 읽기/쓰기/(기본적으로) 외부의/var/www 디렉토리 아무것도 실행할 수 없습니다 :

$umask = umask(0); 
$in = "/home/alex/Dropbox/code_snippets/output/a.out"; 
$out = exec($in); 
umask($oldumask); 
+0

아뇨, 죄송합니다. 작동하지 않으면 같은 공백이 생깁니다. – user3102241

0

그것은 권한에 문제 사용자입니다. emzy와 Petr이이 문제를 해결하는 데 도움을 주신 덕분입니다.

+0

위의 2 번 항목입니다. 다행히 문제를 해결했습니다. – mz3

+0

사실, 죄송합니다 그 비트를 읽어 주셔서 깜빡 감사합니다. – user3102241