문제

파일 관리 시스템에서 작업하고 있으며 다음과 같은 자동화 된 버전을 포함하고 싶습니다. 베이츠 번호 매기기 이름이 같은 파일이 존재하는 경우 나는 파일 이름과 확장자 사이에 "-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)
 }

나는 재선 패턴을 사용하여 버전이 존재하는지 확인할 것이라고 생각합니다.

내 질문은 다음과 같습니다.

  • 이와 같은 번호 시스템을 사용하는 데있어 잠재적 인 문제는 무엇입니까?
  • 파일 이름 버전을 다루기위한 대안은 무엇입니까?

나는 이것을 대량 가져 오기 시스템으로 생각하므로, 필요하지 않은 경우 고유 한 파일 이름을 제공하도록 사용자에게 버그를 만들고 싶지 않으며 다른 버전 작성 체계를 포함시킬 수있는 옵션이 있습니다. 내 시스템에는 태그가 있으므로 Filename은 중요성이 감소하지만 여전히 중요한 중요성이 있다고 생각합니다.

도움이 되었습니까?

해결책

과거에는 파일 확장자 (해당 파일 이름이 이미 시스템에 존재할 때) 전에 mktime ()의 결과를 항상 해결했습니다. 현재 버전 번호를 구문 분석 할 필요가 없으며 파일 이름에 멋진 타임 스탬프가 추가되어 어느 것이 먼저 왔는지, 언제 생성되었는지 알 수 있습니다. 다른 사람이 서버에서 동일한 초당 파일을 동일한 초에 저장할 수 있다고 걱정하는 경우 저장하기 전에 TimeStamp가 포함 된 파일을 확인할 수 있습니다. 그것이 실제로 우려가 있다면, 당신은 아마도 당신의 시스템과 동일하게 수행해야 할 것입니다. 숫자를 올린 다음 다시 확인하여 해당 이름의 파일이 이미 존재하는지 확인하십시오.

타임 스탬프는 누군가가 BOB_1.JPG와 비교하여 BOB_321235678.JPG (예 : BOB_321235678.jpg)와 같은 버전 번호와 이미 이름이 지정된 파일을 업로드 할 가능성이 훨씬 낮은 이점이 있습니다.

이 모든 것에 대한 하나의 몰락은 당신이 당신은 당신이 당신이 다소 동일하지만 다른 이름을 가진 많은 파일로 끝날 수 있다는 것입니다. 따라서 시스템에 사용되지 않는 파일을 주기적으로 찾고있는 데이터를 구문 분석 할 수 있습니다.

다른 팁

대체 접근법
투명한 백엔드로서 진정한 버전 관리 시스템을 전복으로 탐색하는 것이 좋습니다. SVN 후크를 사용하여 커밋 등을 자동화 할 수 있습니다. 어쩌면 이것은 단순하고 더 강력 할 것입니다.

그만큼 전복에 대한 "자동화"장 DOC는 좋은 출발점 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top