개발! 딱 깔끔하고 센스있게!

PHP 에서 X-Accell-Redirect (Nginx) / X-Sendfile (Apachee) 를 지원합니까? 본문

개발 스크랩 메모/PHP

PHP 에서 X-Accell-Redirect (Nginx) / X-Sendfile (Apachee) 를 지원합니까?

렉사이 2020. 12. 19. 22:40

나는 PHP 로 전자 비즈니스 프로그램을 개발하고 있다.

URL 의 안전을 보장하기 위해서 제품은 PHP 뒤에 연결을 다운로드합니다.

Download.php 같은 파일이 있습니다.

GET 를 통해 많은 인자를 받아들이고 데이터베이스에 따라 검증됩니다.

모든 것이 순조롭다면, PHP 속의 readfile () 함수를 파일로 서비스를 제공할 것입니다.

문제

현재 readfile() 파일이 php.ini 안에 설치된 메모리 제한 중 문제가 생길 수 있습니다이 프로그램이 호스트에 있는 많은 사용자를 공유하기 때문에 php.ini 설정에 의존할 수 없습니다.

우리가 해결하는 방법을 찾기 위해 노력하는 과정에서, 우선 우리는 Whille 순환에서 fread () 를 사용할 수 있다고 생각하지만, 이것은 약간의 문제를 가져올 것 같지만, 여기에서 PHP 를 믿을 수 있는 대형문서를 어떻게 다운로드할 수 있는지를 중점적으로 설명한다.

그래서 가장 좋은 선택은 검색 / 서버 검색 / X-Accell-Redirect (Nginx) / X-Sendfile (Apache)

만약 서버가 X-Acccell-Redirect/X-Sendfile, 나는 그것들을 사용할 수 있습니다.

else 블록에서 시스템 관리자에게 php.in I 강제 메모리 제한을 알 수 있습니다.

이상적인 상황에서 나는 가능한 한 서버의 지원을 사용하기 바랍니다.

예를 들면 X-Accell-Redirect/X-Sendfile, 만약 도움이 되지 않는다면, Redfile (readfile) 의 파일을 읽기를 희망합니다.

While 순환의 readfile () 와 fread () 는 어떻게 다른지 확실치 않지만, Whille 순환은 문제가 될 것 같습니다.

PHP 중 대파일에서 건의한 것처럼

도움, 건의, 수칙, 지도해 주시기 바랍니다.

읽어주셔서 감사합니다.

대답

mod xsendfile apache 모듈이 설치되었는지 확인하려면 다음 코드를 시도할 수 있습니다:

if function_exists('apache_get_modules') && in_array('mod_xsendfile', apache_get_modules()) { header("X-Sendfile"); } 

그러나 이 코드 는 모듈만 설치되었는지 확인하기 때문에 모듈 설치 오류가 발생할 수 있습니다

또 다른 가능한 방법은 Apache.htaccess 설정 서버 범위의 변수:

  XSendFile On XSendFileAllowAbove On SetEnv MOD_X_SENDFILE_ENABLED 1   

php 코드에서 검사:

if ($_SERVER['MOD_X_SENDFILE_ENABLED']) { Header(...) } 

nginx 의 공통 사상은 같은 것이다.

HTTP 머리나 CGI/FastCGI 변수를 통해 상태 변수를 백엔드에 전달하면 된다.

Comments