phpBB 가져오기 문제

업로드된 파일 중 중복된 파일명이 존재하는 것은 드문 일이 아닙니다. 모든 게시판은 이를 반드시 고려해야 합니다. 그러나 phpBB에서는 동일한 게시물 내에 동일한 이름을 가진 서로 다른 두 장의 이미지 첨부파일을 업로드할 수 있습니다. phpBB는 첨부파일 테이블에서 실제 파일명을 "real_filename"으로 저장하고, 생성된 해시된 이름을 "physical_filename"으로 저장하여 이를 관리합니다.

저의 phpBB 게시판에서 변환된 46개의 게시물에는 파일명이 동일하기 때문에 중복된 이미지가 포함되어 있습니다. 일부 경우에서는 사용자가 실수로 동일한 파일을 두 번 게시한 것이 원인입니다. 그러나 많은 경우 그렇지 않습니다. 사용자가 어떻게 그렇게 했는지는 정확히 모르지만, phpBB에서 11개의 서로 다른 이미지를 각각 "image.jpg"라는 이름으로 업로드한 사례가 있습니다(이메일에서 이미지를 데스크톱으로 드래그할 때 사용되는 기본 파일명). Discourse에서는 동일한 이미지가 11번 나타납니다. 변환기가 업로드할 phpBB 첨부파인을 physical_filename이 아닌 중복이 가능한 real_filename으로 식별하는 것으로 보입니다.

다행히도 postgres에서 동일한 Discourse 파일명이 두 번 포함된 게시물을 식별하는 ruby 스크립트를 가지고 있습니다. 이 작업은 고통스러울 것입니다(특히 11개의 중복이 있는 게시물의 경우!), 하지만 제 phpBB 게시판이 여전히 존재하므로 수동으로 수정할 수 있습니다. 많은 phpBB 웹마스터들이 저처럼 플랫폼을 전환할 것으로 예상되므로, 이는 중요한 수정 사항으로 기록해 둘 가치가 있습니다.

감사합니다
Dan

참고로, Claude에 따르면 문제는
/var/www/discourse/script/import_scripts/phpbb3/importers/attachment_importer.rb 파일의 24번째 줄에 있습니다.

버그 내용: 여러 phpBB 첨부 파일이 동일한 real_filename(예: “IMG_1234.jpg”)을 가지고 있는 경우, 업로더는 파일명이 이미 존재한다고 판단하여 새 업로드를 생성하지 않고 기존 업로드를 반환합니다. 이는 physical_filename(실제 파일)이 서로 다른 경우에도 마찬가지입니다.

수정 방법: physical_filename을 파일명으로 사용하거나, 고유성을 확보하기 위해 attach_id를 접미사로 추가해야 합니다.

기존 코드:
filename = CGI.unescapeHTML(row[:real_filename])

수정된 코드:
filename = “#{row[:attach_id]}_#{CGI.unescapeHTML(row[:real_filename])}”

나쁜 아이디어는 아닌 것 같습니다.