가장 먼저 이해해야 할 것은 Windows와 Linux의 기본 권한 메커니즘이 다르다는 것입니다.
Linux는 사용자 (사용자), 그룹 (그룹) 및 기타 (기타)를 기반으로 권한 모델을 사용하고 읽기, 쓰기 및 실행 (RWX)과 같은 정밀한 권한 컨트롤을 제공합니다.
Windows는 GUI 또는 명령 줄을 통해 운영 체제에서 설정하는 ACLS (Access Control Lists)를 사용합니다.
PHP의 chmod () 함수는 Unix 스타일에 따라 설계되었으므로 Windows Systems에서 PHP는이 동작을 시뮬레이션하려고하지만 그 효과는 매우 제한적입니다.
Windows에서 다음 코드를 사용하십시오.
<?php
$file = 'C:\\xampp\\htdocs\\test.txt';
chmod($file, 0755);
?>
이 코드는 Linux에서와 같이 "읽기 가능, 쓰기 실행"에 대한 파일 권한을 수정하지 않습니다. 대부분의 Windows 시스템에서는 전혀 실용적인 영향을 미치지 않거나 매우 구체적인 시나리오 (예 : 읽기 전용 플래그 여부)에만 영향을 미칩니다.
PHP의 chmod () 매개 변수는 0755 및 0644 와 같은 옥탈 번호입니다. Linux에서는 특정한 의미가 있지만 Windows에서는 이러한 값이 일반적으로 ACL 규칙으로 해석되지 않습니다. 그러므로:
파일의 실제 액세스 권한은 수정되지 않습니다.
사용자 그룹 또는 다른 사용자에 대한 액세스 권한은 제어 할 수 없습니다.
일부 Windows 구성에서는 chmod ()를 사용하여 "읽기 전용"속성을 설정하거나 제거 할 수 있습니다. 예를 들어:
<?php
$file = 'C:\\xampp\\htdocs\\demo.txt';
// 파일을 읽기 전용으로 설정하십시오
chmod($file, 0444);
?>
그러나이 동작은 불안정하며 특정 Windows 버전 및 파일 시스템 (NTFS 또는 FAT32)에 따라 다릅니다.
Windows에서 실제로 파일 권한을 수정 해야하는 경우 시스템 명령을 호출하는 것을 고려할 수 있습니다.
<?php
$path = 'C:\\xampp\\htdocs\\secure.txt';
exec("icacls \"$path\" /grant Everyone:F");
?>
Windows ICACLS 명령을 사용하여 모든 사용자에게 전체 권한을 부여합니다. 이 관행은 시스템 명령에 의존하므로 신중한 사용 및 권한 제어가 필요한 특정 보안 위험이 있습니다.
PHP 프로젝트가 Linux와 Windows 사이의 환경을 전환 해야하는 경우 chmod ()를 사용할 때 다음 사항을 고려해야합니다.
비즈니스 로직을 구현하려면 chmod () 에 의존하지 마십시오 . Windows에서는 적용 할 수 없습니다.
시스템 감지 수행 : PHP_OS 또는 PHP_OS_FAMILY를 사용하여 현재 운영 체제를 결정하십시오.
시스템에 따르면 권한 논리는 별도로 처리됩니다 .
<?php
if (PHP_OS_FAMILY === 'Windows') {
// Windows 그것을 다루는 방법
exec("icacls C:\\path\\to\\file.txt /grant Everyone:R");
} else {
// Linux / Unix 그것을 다루는 방법
chmod('/var/www/html/file.txt', 0644);
}
?>