2009-08-24 6 views
0

나는 파일 관리 시스템을 연구 중이며 동일한 이름의 파일이있는 경우 bates numbering과 같은 자동 버전 관리를 포함하고자합니다. 그들이에서 와서 나는 파일 이름과 확장자 사이에 "-v0001"를 삽입 버전의 수를 계산 생각했다.자동 파일 버전 관리의 문제점?

$basename = pathinfo($filename, PATHINFO_BASENAME); 
$fname = pathinfo($filename, PATHINFO_FILENAME); 

while (filenameExists($basename)) { 
    //look for existing -vnnnn (at end of file name) 
    if (versioningExists($fname)) {  
     //roll number ahead, set bates number 
    } else { 
     //start bates numbering at 1  
    } 
    //insert bates version number (str_pad) 
} 

나는이 버전이 존재하는지 확인하기 위해 정규식 패턴을 사용 생각하고 있어요.

내 질문은이 같은 번호 체계를 사용하여 잠재적 인 문제는 무엇

  • 입니까?
  • 파일 이름 버전을 처리하기위한 대안은 무엇입니까?

나는 대량 가져 오기 시스템으로이를하려는거야, 그래서 버그 I가없는 경우 나에게 고유 한 파일 이름을 제공하기 위해 사용자에게 싶지 않아, 내가 포함하는 옵션이 할 다른 버전 관리 체계의 선택. 내 시스템에는 태그가 있기 때문에 파일 이름의 중요도는 낮아졌지만 여전히 중요하다고 생각합니다.

+0

필자는 파일 시스템에서 완전히 고유 한 파일 이름을 가리키는 데이터베이스 포인터로만 파일 이름을 처리한다는 것을 잊어 버렸다. 원한다면 동일한 파일 이름을 사용할 수 있습니다. 프런트 엔드 사용자가 혼란 스러울 것이라고 생각합니다. – jjclarkson

답변

1

필자는 이전에 파일 확장자 (시스템에 파일 이름이 이미 존재할 때) 이전에 mktime()의 결과를 항상 압도했습니다. 현재 버전 번호를 파싱 할 필요가 없으며 파일 이름에 추가 된 멋진 타임 스탬프를 얻을 수 있으므로 어느 것이 먼저 왔는지, 그리고 언제 만들어 졌는지 알 수 있습니다. 다른 사람이 같은 이름의 파일을 서버에 똑같은 시간에 저장할 수 있다고 걱정되는 경우 저장하기 전에 포함 된 타임 스탬프가 포함 된 파일을 확인할 수 있습니다. 이것이 정말로 문제가된다면, 시스템과 마찬가지로 번호를 올린 다음, 다시 그 이름을 가진 파일이 있는지 확인하십시오.

타임 스탬프에는 bob_1.jpg에 비해 bob_321235678.jpg와 같이 사용자가 이미 버전 번호와 비슷한 이름의 파일을 업로드 할 가능성이 훨씬 적습니다.

이 모든 단점은 다소 다르지만 이름이 다른 수많은 파일로 끝날 수 있으므로 시스템에서 사용되지 않는 파일을 주기적으로 찾고자 할 수 있습니다 .

+0

좋은 해결책.하지만 ISO 8610 날짜 형식을 사용하여 기능을 향상시킬 수 있습니다. 주문 기능과 같은 여러 가지 이점이 있습니다. 참조 및 다른 표준 형식과 비교되는 장점에 대한 간략한 설명은 http://en.wikipedia.org/wiki/ISO_8601을 참조하십시오. – drAlberT

0


나는 투명한 백엔드로 전복과 같은 진정한 버전 관리 시스템을 탐험 말씀 드리겠습니다 대체 방법? svn 후크를 사용하여 커밋을 자동화하는 등의 작업을 할 수 있습니다. 아마도 이것은 간단하고 견고 할 것입니다.

"Autoversioning" chapter on the subversion doc이 좋은 출발점이 될 수 있습니다.

+0

나는 단지 파일 이름 만 버전을 지정하고있다. 이 방법은 문서의 버전 제어에 유용 할 수 있지만 파일의 모든 버전을 고유 한 파일로 제공해야합니다. 내가 말하고자하는 것은 버전 관리의 이유는 동일한 파일 이름 충돌을 눈에 띄지 않게 허용하고 동일한 문서의 버전을 엄격하게 관리하지 않아야한다는 것입니다. – jjclarkson

+0

아, 네 진짜 목표를 놓쳤다. 죄송합니다 – drAlberT

+0

's/robuster/robust /; –