2014-07-17 7 views
4

PharData 이상의 FileNames와 관련된 문제가 있습니다. 나는 다음과 같은 예외가 :PharData의 파일 이름 길이 제한

tar-based phar \"2014-07-17-09-22-32.tar\" cannot be created, filename \"XXX.99999.YYYYYYYYYYYYYYYY.YYYYYYY.YYYYYYYYYYYYYYYYYYYYYYYYY.5f4a75e7-ee73-49f1-8a27-9440cfb35196.1405588952.xml\" is too long for tar file format

(죄송합니다, 조금 암호화했습니다 ^^) 내가 명령 줄에서이 명령을 사용하는 경우

지금 이상한 것은, 그것이 마치 마법처럼 작동합니다 :

tar cvf foo.tar XXX.99999.YYYYYYYYYYYYYYYY.YYYYYYY.YYYYYYYYYYYYYYYYYYYYYYYYY.5f4a75e7-ee73-49f1-8a27-9440cfb35196.1405588952.xml 

PharData가 TAR에서 제공하는 것과 다른 제한 사항이있는 PharData에 관한 정보를 찾을 수 없습니다. PharData에 사용할 수있는 옵션이 있습니까? 미리 많은 감사드립니다!

답변

7

100자를 초과하는 파일 이름 허용은 tar 표준에 대한 GNU 확장입니다. (ustar). PHP는 파일 이름을 올바르게 처리합니다. 나는 documentation 다음 발견했습니다

$ tar ocvf foo.tar XXX.99999.YYYYYYYYYYYYYYYY.YYYYYYY.YYYYYYYYYYYYYYYYYYYYYYYYY.5f4a75e7-ee73-49f1-8a27-9440cfb35196.1405588952.xml 
tar: XXX.99999.YYYY...588952.xml: file name is too long (max 99); not dumped 
tar: Exiting with failure status due to previous errors 

:

GNU tar was based on an early draft of the POSIX 1003.1 ustar standard. GNU extensions to tar, such as the support for file names longer than 100 characters, use portions of the tar header record which were specified in that POSIX draft as unused. Subsequent changes in POSIX have allocated the same parts of the header record for other purposes. As a result, GNU tar is incompatible with the current POSIX spec, and with tar programs that follow it.


당신은 GNU 타르에 -o (--old-archive) 옵션을 전달하여이를 확인할 수 있습니다, 그것은 오류를 생각하다 할 것이다

Btw,이 제한은이 커밋에 의해 PHP에 추가되었습니다 : https://github.com/php/php-src/commit/667c59abd697d5d80cb0cadf6a5cb7d94dee3a22

다음 버그 보고서로 인해 커밋되었습니다 : https://bugs.php.net/bug.php?id=49020

+0

정말 좋은 정보 수집! 이것은 실제로 아주 우스운 것처럼 보입니다 (웃을 수 있다면 ...). 그렇지만 긴 파일 이름을 사용하지 않고 다른 방식으로 메타 데이터를 전달해야한다는 것을 의미합니다. 설명 주셔서 감사합니다! – Sam

+0

예, 지금까지 긴 파일 이름을 사용할 수 없습니다. 'ö.txt'와 같은 유니 코드 파일 이름은 전혀 지원되지 않는다고 추가해야합니다. 그 이유가 있다고 확신합니다. * 너무 쉬웠다면 PHP 개발자는 그렇게하지 않았을 것입니다. 이 이유를 알아야합니다 .. – hek2mgl

+0

@Sam이 주제를 조사했습니다. 이것이 PHP의 버그라고 생각하지 못했습니다. 100 문자보다 긴 지원 파일 이름은 GNU tar 확장이며 표준이 아닙니다. PHP 버전은 괜찮습니다. 파일 이름은 100 자 길이, 전체 경로 + 파일 이름 255 자, 경로 155 자일 수 있습니다. – hek2mgl