2012-03-28 5 views
3

프로덕션 서버에서 직면하고있는이 문제로 도와주세요. 이미 존재하지 않는지 확인한 후에 만 ​​디렉토리에 이미지를 저장하는 응용 프로그램을 시작했습니다. 셸 명령을 실행하는 PHP는 무거운 사용 모드에서만 무작위로 출력합니다.

은 이미 내가 5의 경우 다음 명령 find $filePath -name $fileInitial*

내가 모든 50가지 경우에서, 개발 및 QA에 있지만, 실제 환경에서 잘 갔다 것을보고 매우 놀랐을 사용 존재하는지 확인하려면 그 파일이 존재하더라도 비어있게됩니다.

exec, shell_exec, passthrusystem으로 역행 교환을 시도해 보았습니다. 나는 심지어 find 명령을 ls으로 바꾸려고 시도했지만 여전히 이득이 없었다.

할 수있는 것을 제안하십시오.

+3

glob() 또는 file_exists() 함수가 필요한 것을 수행하지 않기 때문에 쉘 명령을 사용한다고 가정합니다. – ChrisK

+0

끝에'*'가 주어지면, exec() 호출은 쉘이'whatever * '을 찾게하고 find가 실행되기 직전에 "no match"를 리턴합니다. –

+0

@Charanjeet Kaur : 질문에 답변 한 답변 중 하나를 선택하십시오. – hakre

답변

2

코드에 따라 가능한 한 많이 exec/shell_exec를 피하는 것이 좋습니다.

보안을 염두에두고 코딩하지 않으면 전체 시스템에 매우 큰 보안 위험이 발생합니다.

처리하려는 실제 명령에 문제가있는 이유를 모르겠지만 제안 사항은 수동으로 파일 시스템으로 이동하는 대신 PHP에서 file_exists() 또는 glob() 함수를 사용하는 것입니다.

+0

이 방법을 권장하고 셸 명령을 실행하지 않도록 권장합니다. file_exists() 및 glob()도 일반적으로 Windows 및 Linux 서버에서 작동합니다. 여기서 exec 명령은 일반적으로 작동하지 않습니다. – danieltalsky

0

당신은 다음과 같이 설정했습니다 : ignore_user_abort(true);set_time_limit() 무엇인가? popen()도 사용 해보세요. 나는 항상 올바르게 인터페이스하는 것이 더 쉽다고 생각한다.

1

감사합니다. 귀하의 제안은 실제로 효과가있었습니다. 그것은 모두 glob()에서 잘 작동했습니다.

이유는 php를 통해 쉘 명령을 실행하는 것이 결과에 대한 충분한 시간을 기다리지 않을 수 있습니다. 또는 PHP가 실행되는 CGI 모드와 관련이 있습니다.

의견을 말하십시오.

+0

파일 시스템과 관련이있을 수 있습니다. 실제로 파일을 찾기 위해 업로드 한 이후로 업데이트하지 않았거나 어떤 이유로 든 실행에 실패 할 수 있습니다. exec & shell_exec을 피하십시오. 일반적으로 사용) - 오, 위의 대답을 수락하십시오 :) – ChrisK

관련 문제