PHP 관련해서 질문드립니다.

ruoghks의 이미지

지금 하나의 프로그램을 만들고 있는데

중간부분에서 총 3가지 문제점이 있습니다.

1번째

우선 서버에 php 파일을 올려놓고 소스에서 foprn("1.txt","w");

하면 파일이 생성돼는 걸로 아는데 생성이 안됩니다.

2번째

지금 소스의 위치는 /www 에 있습니다.

그리고 리눅스 명령어를 날려서 파일을 하나 생성 시켜야 합니다. find 명령어를 사용해서..

그 외의 ls -la 같은 명령어는 잘 실행 되고

$line=file("/game/cnm/result/log2.dat");

이런 명령도 잘 실행이 됩니다. 하지만

exec("find /game/cnm/log -name "cmportd*20110331*.txt" -print -exec grep "last_play_date = NOW() WHERE user_key = 638970" {} \; >/game/cnm/result/log.dat");

이런 명령은 실행이 전형 안됩니다.

제 생각에는 1번과 2번의 문제는 PHP나 아파치의 권한 부여 문제나 nobody 권한의 문제라고 생각하면서 작업하는데 뭐가 문제인지 못찾고 있습니다.

3번째..

보통 mysql을 접속할려면 mysql_connect로 접속을 합니다.

그러면 2번처럼 exec로 리눅스 서버에 접속해서 저런 명령문을 넘길려고 하면

어떤 방식의 함수를 사용해서 접속하는지 궁금합니다.... 음... 빠른 시간안에 알려주시면 감사하겠습니다.

지금 계속 서치중인데.. PHP 공부한지 1주 좀 넘은 저한테는 힘든 문제네요 ㅡㅜ

익명 사용자의 이미지

1번
foprn이 아니고 fopen이겠지요?ㅎㅎ;; 오타라고 생각합니다.php에서 fopen, fwrite함수를 찾아보시면 될듯합니다.

2번
exec문법표현에 exec("")안에 더블쿼터가 존재 합니다. 싱글쿼터나 특수문자로 처리하셔야 됩니다.("")사이에는 다른 더블쿼터가 있으면 안됩니다.
(스크립트 파일을 하나 만드시는게 더 낳을듯 합니다.)

3번
ssh2_exec나 혹은 socket를 사용하셔서 처리하실수 있습니다.
http://kr.php.net/manual/en/function.ssh2-exec.php

뱀글: 아...스팸을 막기위해서 문제를 풀어야되군요. 이젠 계산기를 옆에두고...-_-;;

익명 사용자의 이미지

1번은 저두 C언어를 전공으로 삼아서 공부했기 떄문에 왠만한거 다 암니다..

그레서 PHP도 비슷한 부분이 많아서 제작중인데

fopen 다 아는 구문이고 사용도 많이 해봤습니다. 옵션으로 a, w, x 가 있고 추가적으로 +가 붙을 수가 있는데 W 랑 A 랑 X 다 실험 해봤지만 안됨니다.. 그게 문제인것 같아서.. 권한 문제 인데.. 그것때문에 문의 드리는 겁니다.

2번은 사용법은 알죠.. 다만 find 입력해서 파일 생성만 안되는게 문제죠

3번 ssh2_커넥트문은 저두 알고 있는데 다른 문장도 있는지 뭐 그런겁니다.

익명 사용자의 이미지

네, C언어를 공부하셨군요.

1번이 퍼미션 문제라면 chmod나 chown혹은 ACL를 설정하셨으면 get/setfacl로 수정하시면 됩니다.
2번은 위에 적어두었지만, 더블쿼터문제라고 말씀드렸습니다.

exec("find /game/cnm/log -name "cmportd*20110331*.txt" -print -exec grep "last_play_date = NOW() WHERE user_key = 638970" {} \; >/game/cnm/result/log.dat");

php에서는 "이것과 '이것의 차이가 매우 큽니다. C언어 공부하셨으면 더더욱 잘 아실거라고 생각합니다.

3번 경우에는 pecl에서 ssh2함수를 사용하시지 않으면, php의 socket()으로 직접 작성하시면 될듯합니다.

그리고 다른 문장(?)을 궁금해 하셨는데, php.net에서 검색해보시지 않으셨는지요? php.net에서 조그만 찾으시면 답안이 나옵니다.

kaeri17의 이미지

php 가 실행되는 계정의 권한을 확인하세요. 주어진 디렉토리나 파일에 쓰기/읽기 권한이 있는지요.

silveracy의 이미지

1번은 확실히 권한 문제이겠네요..
www를 놓고 쓰신다면, 개발 서버를 두고 사용하는 것일테니
일단 폴더를 하나 만들어서 그 폴더만 766으로 두시고 한번더 테스트 해보시길 권장해 드립니다.
Apache를 통해 파일을 쓰게 되면 nobody라는 user를 통해서 파일을 작성하기 때문에 파일 작성이 안될 수 도 있습니다.

2번

몇가지 짐작이 되는데요
보통 exec로 실행을 시킬때 path경로가 설정이 안되어 있는 경우가 있기 때문에
/usr/bin/find 이런식으로 실행을 시켜보시구요
그래도 안되면 find의 실행권한을 한번 더 살펴 보시구요
그래도 안되면 php 설정에서 exec등의 함수를 막아 놓았는지 살펴보세요.

3번째..

이거 찾아보면 쉽게 알 수 있는 문제인데요...
저도 정확하게 기억은 나지 않습니다만 보통
mysql -u test -ptest test.test << test.SQL

이런식으로 SQL파일을 통째로 넣을 수 있습니다.

그런데... 이답변을 원하신건 아닌것 같은 느낌...