我遇到了PharData
和更长文件名的问题。我得到以下异常:
tar-based phar \" 2014-07-17-09-22-32.tar \"无法创建,文件名\" XXX.99999.YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY.5f4a75e7-ee73-49f1-8a27-9440cfb35196.1405588952.xml \"对于tar文件格式来说太长了
(对不起,不得不加密一点^^)
现在奇怪的是,如果我从CommandLine使用这个命令,它就像一个魅力:
tar cvf foo.tar XXX.99999.YYYYYYYYYYYYYYYY.YYYYYYY.YYYYYYYYYYYYYYYYYYYYYYYYY.5f4a75e7-ee73-49f1-8a27-9440cfb35196.1405588952.xml
我无法找到有关PharData的任何信息,其限制与TAR提供的不同。我可以为PharData使用任何选项吗?非常感谢提前!
答案 0 :(得分:8)
允许文件名超过100个字符是tar标准的GNU扩展。 (USTAR)。 PHP正确处理文件名。
您可以通过将-o
(--old-archive
)选项传递给GNU tar来验证这一点,它会引发错误:
$ 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
我找到了以下documentation:
GNU tar基于POSIX 1003.1 ustar标准的早期草案。 tar的GNU扩展,例如对超过100个字符的文件名的支持,使用在该POSIX草案中指定为未使用的tar头记录的部分。 POSIX的后续更改已为其他目的分配了标头记录的相同部分。因此,GNU tar与当前的POSIX规范以及跟随它的tar程序不兼容。
顺便说一下,这个限制是通过此提交添加到PHP的:https://github.com/php/php-src/commit/667c59abd697d5d80cb0cadf6a5cb7d94dee3a22
提交是因为以下错误报告:https://bugs.php.net/bug.php?id=49020