2017-05-18 19 views
0

저는 내 서버용 컨트롤 패널을 코딩 중이며 인증서를 만들기 위해 letsencrypt API를 사용하는 명령을 실행하기 위해 shell_exec을 사용하고 있습니다.PHP shell_exec는 명령의 절반 만 실행하는 것 같습니다.

https://zerossl.com/usage.html에서 쉘 명령을 받았습니다. (나는 그들에 의해 지시에 따라 모든 것을 설정하고 손으로 쉘에서 직접 실행할 때 제대로 실행 않습니다. NB는 전혀 사용자 입력이 필요하지 않습니다) 여기

는 shell_exec 라인

shell_exec("le.pl --key '$uname'.key --csr '$domain'.csr --csr-key '$domain'.key --crt '$domain'.crt --domains \"www.'$domain','$domain'\" --path /home/'$uname'/web/'$domain'/public_html/.well-known/acme-challenge --generate-missing --unlink --live"); 
입니다

$ uname 및 $ domain 변수는 데이터베이스에서 가져와 성공적으로 에코 될 수 있습니다. 이 경우에는 각각 admin 및 plenixdev.tk입니다.

현재 작업 디렉토리 (chdir()에 의해 설정 됨)는/tmp/$ uname이고 스크립트가 실행되지 않도록 /webroot/.well-known/acme-challenge/ 폴더가 실제로 만들어 졌는지 확인했습니다. 그곳에.

처음 실행하여 스크립트에 필요한 키를 만들

:

shell_exec("openssl genrsa -out '$uname'.key 4096"); 

shell_exec("openssl genrsa -out '$domain'.key 4096"); 

가 그 키와 변수를 취하고에 의미 시작에 내가 언급 한 shell_exec를 $ domain.csr 파일 (인증서)과 인증서 파일을 만듭니다.

그러나 필요한 모든 파일이 같은 폴더에 있더라도 .csr 파일 만 생성하고 인증서를 만들려면 어떻게 든 실행을 멈추거나 보이지 않는 오류가 발생합니다. 그런 다음 .csr 등이있는 동일한 폴더에서 직접 명령을 실행하면 모두 제대로 실행됩니다.

그리고 나는 무엇이 잘못되고 있는지 알 수 없거나 페이지에 출력을 덤프하여 오류를 볼 수 없습니다.

+1

왜 PHP 변수를 따옴표로 묶어 놓았습니까? 그것은 원래 명령에 없습니다. 명령을 화면에 표시하고 올바르게 표시되는지 확인하십시오. 명령이'... --key 'test.com'.key ... '처럼 보일 것입니다. –

+0

@JonathanKuhn 감사합니다. 정말로 이런 일이 발생하지 않을만큼 작은 것은 아닙니다. – WolfSkin

답변

0

@ JonathanKuhn의 조언에 따라, 나는 변수 주위의 shell_exec 내부의 따옴표를 제거했다. 이 답변을 올리면 여기에있는 다른 사람들이 볼 수 있습니다.