fopen (..., 'a')가 새 파일을 생성했는지 확인

BurninLeo

내 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를 사용하는 유일한 것입니다.

Ikrabbe

PHP fopen는 libc에 대한 호출 일 뿐이며 fopenw, w +, a 및 a + 모드에 대한 파일을 자동으로 생성합니다. 내가 볼 수있는 stat한, 반환 된 파일 포인터에서 권한 비트 를 얻을 수있는 방법이 없습니다 .

PHP는 stat각 열린 파일에 대한 배열을 저장 fstat($fp)하고 열린 파일 핸들로 액세스 할 수 있는 것 같습니다 $fp. 그러나 mode필드에는 inode permission bits. "inode 권한 비트""UNIX 파일 모드" 와 어떤 관련이 있는지 즉시 알 수 없습니다 . stat시스템 호출은이 용어를 사용하지 않습니다.

"r +"모드를 사용하여 파일을 열고 실패 할 경우 만들 수 있습니다. 그렇지 않다면 비슷한 것을 얻기 위해 끝낼 필요가 있습니다.

그러나 마지막으로 파일을 열기 전에 존재 여부를 확인하는 것이 가장 좋습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ActiveRecord "where"메서드가 새 행을 생성했는지 또는 기존 행을 가져 오는지 확인하는 방법은 무엇입니까?

분류에서Dev

새 파일이 생성되었거나 폴더에 추가되었는지 확인하는 VBA 매크로

분류에서Dev

누가 파일을 생성하고 디렉토리로 이동했는지 확인하는 방법

분류에서Dev

파일을 열려고 할 때 오류가 있는지 확인하는 방법 (C에서 fopen을 사용할 때)

분류에서Dev

파일을 만들 때마다 확장자에 ~가 추가 된 새 파일이 생성되는 이유

분류에서Dev

fopen으로 연 파일이 닫혔는지 확인

분류에서Dev

getLogger가 새 객체를 생성했는지 확인하는 방법은 무엇입니까?

분류에서Dev

Python-사용자가 파일을 변경했는지 확인

분류에서Dev

새 열을 만들고 문자열 값을 확인했지만 TypeError가 발생했습니다.

분류에서Dev

Thunderbird가 새 메일을 확인하지 않습니까?

분류에서Dev

사용자가 앱을 업데이트했는지 또는 새로 구매했는지 확인 (Swift 3)

분류에서Dev

생성 된 키가 이미 파일에 있는지 확인

분류에서Dev

PHP fopen () 함수는 파일을 생성하지 않습니다

분류에서Dev

개발자가 속성 값을 정의했는지 확인

분류에서Dev

Blogdown 새 게시물 추가 기능이 새 파일을 생성하지만로드하지는 않습니다.

분류에서Dev

클래스의 모든 새 인스턴스가 모든 필드 또는 속성을 구현하는지 확인

분류에서Dev

새 파일을 생성하지만 파일 이름이 이미있는 경우 번호를 추가합니다.

분류에서Dev

헤더 슬롯에 의해 생성되는 새 헤더에 toggleSelectAll 기능 확인란을 추가하는 방법

분류에서Dev

PHP가 최신 파일을 찾았지만 새 달로 인해 파일을 찾을 수 없음

분류에서Dev

bash는 난수를 생성하지만 번호가 이미 선택된 경우 파일을 확인합니다.

분류에서Dev

로그 파일에 새 줄이 추가되었는지 확인하는 방법-Java

분류에서Dev

파일을 사용하는 대신 malloc-ed 메모리로 fopen 가상화

분류에서Dev

생성자가 컴파일 타임에 존재하는지 확인

분류에서Dev

파일이 있지만 fopen은 "해당 파일이나 디렉토리가없는 스트림을 열지 못했습니다."

분류에서Dev

파이썬의 재귀 함수-목록의 요소가 이미 있는지 확인하고 새 요소를 생성하십시오.

분류에서Dev

다음 코드를 사용하여 새 주가 이미 생성 된 주와 일치하는지 확인한 다음 경고를 표시합니다.

분류에서Dev

인터페이스에서 확장하여 새 속성을 추가하면 "유형 X가 일반적이지 않음"이 발생합니다.

분류에서Dev

ritchtextbox에서 확장자가 "* .rtf"인 파일을로드하는 동안 예외가 발생했습니다.

분류에서Dev

AWS Amplify는 새로 추가 된 파일을 인식 할 수 없습니다.

Related 관련 기사

  1. 1

    ActiveRecord "where"메서드가 새 행을 생성했는지 또는 기존 행을 가져 오는지 확인하는 방법은 무엇입니까?

  2. 2

    새 파일이 생성되었거나 폴더에 추가되었는지 확인하는 VBA 매크로

  3. 3

    누가 파일을 생성하고 디렉토리로 이동했는지 확인하는 방법

  4. 4

    파일을 열려고 할 때 오류가 있는지 확인하는 방법 (C에서 fopen을 사용할 때)

  5. 5

    파일을 만들 때마다 확장자에 ~가 추가 된 새 파일이 생성되는 이유

  6. 6

    fopen으로 연 파일이 닫혔는지 확인

  7. 7

    getLogger가 새 객체를 생성했는지 확인하는 방법은 무엇입니까?

  8. 8

    Python-사용자가 파일을 변경했는지 확인

  9. 9

    새 열을 만들고 문자열 값을 확인했지만 TypeError가 발생했습니다.

  10. 10

    Thunderbird가 새 메일을 확인하지 않습니까?

  11. 11

    사용자가 앱을 업데이트했는지 또는 새로 구매했는지 확인 (Swift 3)

  12. 12

    생성 된 키가 이미 파일에 있는지 확인

  13. 13

    PHP fopen () 함수는 파일을 생성하지 않습니다

  14. 14

    개발자가 속성 값을 정의했는지 확인

  15. 15

    Blogdown 새 게시물 추가 기능이 새 파일을 생성하지만로드하지는 않습니다.

  16. 16

    클래스의 모든 새 인스턴스가 모든 필드 또는 속성을 구현하는지 확인

  17. 17

    새 파일을 생성하지만 파일 이름이 이미있는 경우 번호를 추가합니다.

  18. 18

    헤더 슬롯에 의해 생성되는 새 헤더에 toggleSelectAll 기능 확인란을 추가하는 방법

  19. 19

    PHP가 최신 파일을 찾았지만 새 달로 인해 파일을 찾을 수 없음

  20. 20

    bash는 난수를 생성하지만 번호가 이미 선택된 경우 파일을 확인합니다.

  21. 21

    로그 파일에 새 줄이 추가되었는지 확인하는 방법-Java

  22. 22

    파일을 사용하는 대신 malloc-ed 메모리로 fopen 가상화

  23. 23

    생성자가 컴파일 타임에 존재하는지 확인

  24. 24

    파일이 있지만 fopen은 "해당 파일이나 디렉토리가없는 스트림을 열지 못했습니다."

  25. 25

    파이썬의 재귀 함수-목록의 요소가 이미 있는지 확인하고 새 요소를 생성하십시오.

  26. 26

    다음 코드를 사용하여 새 주가 이미 생성 된 주와 일치하는지 확인한 다음 경고를 표시합니다.

  27. 27

    인터페이스에서 확장하여 새 속성을 추가하면 "유형 X가 일반적이지 않음"이 발생합니다.

  28. 28

    ritchtextbox에서 확장자가 "* .rtf"인 파일을로드하는 동안 예외가 발생했습니다.

  29. 29

    AWS Amplify는 새로 추가 된 파일을 인식 할 수 없습니다.

뜨겁다태그

보관