php exec 웹상에서 실행문제. 도와주십시오.

lattente의 이미지

쉘상에서 php test.php 와 같은식으로 해당 exec 함수를 포함하고 있는 php파일을 쉘상에서 실행하면 정상적으로 값이 리턴됩니다.
하지만 웹에선 아무 빈값이 떨어지는군요... 관련 검색을 하루종일 해봤는데 답변은 모두 권한 부분에 대한 언급밖에 없으셔서;;
권한문제는 아닌듯해서 말입니다. 검색해서 찾은 해결법은 모두 해본듯합니다. 결론적으로 실행은 되나, 리턴값이 없다 라고나 할까요;;;
이문제 때문에 노이로제에 걸릴듯합니다. 부디 도움 주시길 Orz

dragonkun의 이미지

원하시는 결과가 실행후 출력값을 가져오는 거죠?

그런 거라면 exec가 아니라 popen 을 알아보셔야 할 것 같네요.
---
Emerging the World!

Emerging the World!

lattente의 이미지

마찬가지로군요 ^^; 쉘에서는 정상적으로 값을 리턴하지만 웹에서는 휑- 하군요 ㅠㅠ
아무래도 함수자체의 문제는 아닌것 같습니다. Orz 댓글 감사합니다.

김정균의 이미지

권한 문제일 확률이 높습니다. 왜냐면, shell에서 실행하는 권한과 웹에서 실행하는 권한이 틀리기 때문입니다. 대충 생각해 보면 다음의 이유일 확률이 높을 듯 싶습니다.

1. shell 권한 (님의 user id) 과 apache web server (보통 nobody나 apache) 의 권한 차이
2. 실행 권한에 따른 환경 변수의 차이 (이 경우, PATH 환경 변수가 문제가 될 수도 있습니다.)

이렇게 확인할 수 있겠죠. web 에서 실행 했을 경우 해당 exec 의 stderr 은 apache error_log 에 남게 될 겁니다. (php.ini setting 이 default 라면) apache error_log 를 살펴 보시는 것도 한 방법입니다.

lattente의 이미지

아닌듯합니다. 제가 무언가 잘못알고 있을지도 모르지만 소유권, 퍼미션 등은 확인해보았습니다.
그리고 말씀하신데로 error 로그를 확인하여 보았는데 관련 오류는 없더군요.
추가적으로 확인한것은 아주 간단한 ls 명령어를 날려봐도 웹에서는 리턴값이 없군요 -_-;
물론 쉘에서는 정상적으로 뜹니다. 어줍잔게 보안관련 문제라는 생각만 들뿐 어디를 어떻게 더 확인해봐야할지 조금 막막하네요 Orz
무튼- 답변 감사합니다. 좋은 하루 보내시길-

김정균의 이미지

파일의 소유권 퍼미션을 의미하는 것이 아닙니다. 웹서버를 구동하는 권한은 제약이 있는 사용자 입니다. 그렇기 때문에 일반 사용자 권한으로 실행하는 것과의 차이가 있을 수 있다는 의미입니다. 예를 든 것이 2번째 경우 같은 것이죠.

그리고, cli sapi 와 apache sapi 의 경우 ./ 이라는 경로의 차이가 있는 경우도 있습니다. cli 의 경우에는 프로세스가 시작된 위치가 ./ 이 되지만, web 의 경우에는 current uri 가 ./ 이 됩니다.

lattente의 이미지

몇번의 테스트 결과 뭔가 가닥이 잡혀가고는 있습니다.
답글 달아주신데로 퍼미션이랑은 관계가 없더군요;;
sudo를 이용하여 테스트 해본 결과 nobody로 실행하였을때도 쉘에서는 값이 잘 나오는데 웹에선 여전히 빈값이 리턴이 되더군요;;
그렇다면 그런부분에 대한 권한 설정은 어디서 확인할 수 있을까요? ^^;
그리고 경로부분은 계속 절대경로로 테스트 중인데, 그런경우에도 경로 문제가 생길 수 있을까요?

monovision의 이미지

<?
    echo exec("ls");
?>

이런 형태의 프로그램을 만드신다는 건죠 ?

safe_mode 는 확인해 보셨나요 ???

실제 소스 코드를 올려주시면 더 많은 분들이 답변을 해 주실 것 같네요.

lattente의 이미지

실제로 예를 들어서 보여주신 바로 저 코드부터가 안되기 때문에 ^^;;
safe_mode는 제일 처음 확인해보았습니다 ㅎ 답글 감사합니다.

송효진의 이미지

일단 error_reporting = E_ALL

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/

lattente의 이미지

아무에러도 안떨어지는군요 Orz

lattente의 이미지

해당 프로세스 실행을 &로 돌리니 값이 떨어지는군요 Orz
근데 더 재미난건 다시 &를 제거하여도 이제는 정상적으로 값이 떨어지는군요 -_-;;;
당췌 왜 그런건지 Orz 결과적으로 해결된거긴한데 이유는 알지도 못한채 뽀록으로 처리된거라 영 찜찜하군요;;;
혹시 저에게 시원하게 알려주실 수 있는 분은 안계신건지;;

김정균의 이미지

브라우저 캐시가 문제일 수도 있지요. 즉, 브라우저가 이 때까지 님을 속이고 있었을 수도 있다는 거죠.

lattente의 이미지

이유없이 갑자기 되던건 백그라운드로 돌아가던 코딩대로였네요... 님 말씀대로 속았죠 -_-;
개발 끝내고 다시 테스트했는데 다시 리턴이 없는 ㅠㅠ 어찌해야할지 난감하네요.

thames의 이미지

<?
system("ls");
?>
이건 안되시련지요..ㅎㅎ


──────────────────────────────────

lattente의 이미지

그외 passthru 나 기탕 등등등 암튼 모든 함수가 동일한 결과를 뱉더군요 ㅎ

thames의 이미지

브라우저로 값이 호출되기 전에 결과가 나오지 않았기에 결과 값이 리턴되지 않는 경우로 보입니다.
이와 관련해서 해결책이 있던 걸로 기억하는데 어디서 보았는...지가;;;; 허허허허;;


──────────────────────────────────

lattente의 이미지

말씀하신대로입니다 Orz
백그라운드로 돌릴경우랑 @에러체크 없이 돌릴때 일시적으로 리턴이 돌아오긴하더군요
근데 잘 돌아오다가도 갑자기 다시 안돌아오고 그럽니다 Orz
어찌해야할지 ㅠㅠ

thames의 이미지

브라우저로 값이 호출되기 전에 결과가 나오지 않았기에 결과 값이 리턴되지 않는 경우로 보입니다.
이와 관련해서 해결책이 있던 걸로 기억하는데 어디서 보았는...지가;;;; 허허허허;;


──────────────────────────────────

송효진의 이미지

phpinfo() 를 비교해보세요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/

lattente의 이미지

넵- 지금 비교할만한 테스트서버가 없는상태긴 하지만- 테스트용 하나 안쓰는 데탑에 설치해서 확인해봐야겠군요- 답글 감사합니다.

lattente의 이미지

L4로 분산 구축한 웹서버 2대중 한곳에서는 정상적으로 처리가 되고 나머지 한쪽에서는 위에 쓴대로 처리가 안되는 증상이 확인되었습니다. 두 서버는 같은 fedora os, php, apache 버젼이고 동일한 php.ini, http.conf 를 사용하고 있습니다. 같은 iptables 규칙을 사용하구요, 더 확인해봐야할 사항이 뭐가 있을지요 ㅠㅠ

lattente의 이미지

해결하고 나니 비슷한 문제로 고민하시는 분이 없을듯하지만 -_-; 자답 올립니다.

문제는 결국 /bin/bash 의 퍼미션 문제였는데... 이번에 제 멍청함과 기초지식 부족에 정말 치를떨었습니다.

예~~전에 보안상의 이유로 여러가지 명령어들 퍼미션을 기본 퍼미션과 다르게 설정할때 저걸 건드리고 몰랐던 겁니다. Orz

퍼미션이 755가 디폴트인걸로 알고있는데 750 으로 되어있더군요 -_-;

php에서 사용하는 exec 함수가 결국엔 쉘에서 사용하는 exec 인가보네요... 쉘의 퍼미션이 그대로라면

당연히 nobody 계정에서는 실행이 안되는것을 여태 모르고 있었네요... 에혀-

암튼 해결했지만, 스스로의 멍첨함에 어이상실 상태입니다.

그럼 이만 정신을 좀 추스리고 진행못하던 작업을 진행해야겠네요;;;

모자란 기초지식 습득도 좀 하구요 ㅠㅠ

답변해주신 모든 분들 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.