내 PHP 프로젝트에서 기존 (또는 새) 파일에 매우 자주 추가되는 일종의 카운터를 사용합니다.
$f = fopen($filename, 'ab');
fwrite($f);
fclose($f);
새 파일이 생성되면이 파일의 권한을 편집해야하므로 다른 사용자도 파일에 액세스 할 수 있습니다.
$existed = file_exists($filename);
// Do the append
$f = fopen($filename, 'ab');
fwrite($f);
fclose($f);
// Update permissions
if (!$existed) {
@chmod($filename, 0666);
}
'a'(추가)가 새 파일을 만들 었는지 또는 사용하지 않고 기존 파일에 추가했는지 확인할 방법이 file_exists()
있습니까? 내 이해로 file_exists()
는 파일 통계를 검색하므로 간단한 파일 추가에 비해 불필요한 오버 헤드가 발생합니다. 함수가 자주 사용되므로 ? fopen(..., 'a')
를 사용하지 않고 새 파일을 만들 었는지 알 수있는 옵션이 있는지 궁금합니다 file_exists()
.
참고 : 이것은 진정한 성능 문제가 아니라 대부분 스타일과 관심의 문제입니다. 하지만 내가 잘못해서 fopen()
이미 파일 통계를 검색 했다면 알려주세요!
최신 정보
좋아요, 정말 학술적인 질문입니다. 다음은 Windows 시스템 (Apache, Win8.1-UNIX 파일 권한 없음) 및 Linux 시스템 (Nginx, Ubuntu 14.04, virutal 시스템)에서 실행되는 몇 가지 성능 테스트입니다.
1000 번 반복되는 각 테스트 실행, 첫 번째 반복 전에 파일이 삭제되었습니다.
Win Linux
simply append one byte 1.8ms 9.4ms
append + clearstatcache() 1.8ms 9.3ms
test fileexists() + append 2.2ms 10.5ms
fileexists() + append + clear 2.2ms 11.0ms
append + chmod() 2.7ms 12.3ms
append + fileexists() -> chmod() 3.3ms 10.6ms
참고 : 마지막 것은 테스트 루프 내에서 IF를 사용하는 유일한 것입니다.
PHP fopen
는 libc에 대한 호출 일 뿐이며 fopen
w, w +, a 및 a + 모드에 대한 파일을 자동으로 생성합니다. 내가 볼 수있는 stat
한, 반환 된 파일 포인터에서 권한 비트 를 얻을 수있는 방법이 없습니다 .
PHP는 stat
각 열린 파일에 대한 배열을 저장 fstat($fp)
하고 열린 파일 핸들로 액세스 할 수 있는 것 같습니다 $fp
. 그러나 mode
필드에는 inode permission bits
. "inode 권한 비트" 가 "UNIX 파일 모드" 와 어떤 관련이 있는지 즉시 알 수 없습니다 . stat
시스템 호출은이 용어를 사용하지 않습니다.
"r +"모드를 사용하여 파일을 열고 실패 할 경우 만들 수 있습니다. 그렇지 않다면 비슷한 것을 얻기 위해 끝낼 필요가 있습니다.
그러나 마지막으로 파일을 열기 전에 존재 여부를 확인하는 것이 가장 좋습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다