2016-10-16 5 views
1

최근 Apache, PHP-FPM 및 MariaDB를 사용하여 웹 서버 구성을 배포했습니다. 동료가 이미지 업로드 기능으로 laravel 4 앱을 배포 할 때까지 원활하게 실행되고있었습니다. laravel이 생성 또는 업로드 된 후 파일 또는 폴더를 chmod()해야하는 이유는 무엇입니까?

문제

는 업로드 이미지에 대한 스크립트가 chmod()umask()이 (내 동료가이 기본 동작했다)를 사용하는 동안은, system() 등의 기능과 함께 사용할 수 PHP의 chmod() 기능을 가지고 있었다.

나는 서버가 내가 이해하지 못하는 것은 777

결코 것을 알려주는 무해 알려줍니다 this site 같은 PHP WIH chmod의 위험 논란, 그리고 this post이 있다는 것을 알고, 왜 chmod() 없이도 PHP 프로세스가 제대로 업로드 된 파일을 읽을 수있을 때 chmod()해야합니까? chmod()없이 폴더를 만들고 폴더를 삭제할 수도 있습니다. 이러한 파일과 폴더는 PHP 프로세스에 대한 올바른 권한으로 만들어집니다.

TL; DR
그래서 그게 laravel 4 필요 chmod()에서 파일 업로드가 제대로 작동하는 것이 사실이다, 내 질문에 가져다? 그리고 왜?

편집 코드를 알고 싶은 사람들을위한
(이 코드 vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/UploadedFile.php에서 발견된다) :

$target = $this->getTargetFile($directory, $name); 

if ([email protected]_uploaded_file($this->getPathname(), $target)) { 
    $error = error_get_last(); 
    throw new FileException(sprintf('Could not move file "%s" to "%s" (%S)', $this->getPathname(), $target, strip_tags($error['message']))); 
} 

@chmod($target, 0666 & ~umask()); 
+0

Laravel에서 어떤 기능을하는지 구체적으로 알 수 있도록 몇 가지 코드를 보여줄 수 있습니까? – Devon

+0

@Devon 예, 지금 바로 수정하겠습니다. – am05mhz

+0

링크 된 게시물을 읽는다면, 편집은 chmod 자체가 시스템과 같은 것을 통해 업로드 된 스크립트를 실행할 수있는 능력을 가지지 않는 한 위험하지 않다는 것을 분명히합니다()'또는'exec()'를 호출합니다. – Devon

답변

0

나는이 뒤에 Laravel의 추론에 대해 말할 수 없다. 그것은 그것의 기능에 내장되어있는 것처럼 보이지만 이것에 대한 빠른 검색은 http://php.net/manual/en/function.move-uploaded-file.php 아래의 주석을 가져 왔습니다.

move_uploaded_file을 사용하여 업로드 된 파일을 이동 한 후에 권한이 0600으로 설정됩니다. 웹 서버와 PHP 프로세스가 원하는 동일한 사용자로 실행 중이지만 그룹이나 apache 또는 nobody과 같이 일반 사용자로 실행되는 웹 서버 그래서 내 가정은 Laravel이 후자 시스템과의 호환성을 위해 이것을했을 것입니다. 왜냐하면 0600은 사용자를위한 rw를 의미하고 그룹이나 다른 사용자는 액세스 할 수 없기 때문입니다.

+0

흠, 문서에서 언급되지 않았으므로 실제로 이상하게 들리지만 사용자가보고 한 바에 따르면 버그 일 수 있습니다. 나는 그것에 놀고, 무엇을 해야할지 결정할 것입니다, 고마워요. – am05mhz