如何在open-basedir指令中包含PHAR存档的路径


How to include paths to PHAR archives in the open-basedir directive?

我试图在本地开发机器上使用composer,当试图从PHAR存档中复制某些内容时,它总是失败:

[ErrorException]
copy(): open_basedir restriction in effect. File(phar://E:/xampp/php/composer/composer.phar/src/Composer/Autoload/ClassLoader.php) is not within the allowed path(s)

E:'xampp'php'composer包含在open_basedir指令中,在该位置读取和写入文件工作正常,仅访问PHAR存档中的文件不起作用。我尝试添加以下路径:

E:'xampp'php'composer'composer.phar'src'
phar://E:/xampp/php/composer/
phar://E:/xampp/php/composer/composer.phar/src/
phar://E:/xampp/php/composer/composer.phar/src/Composer/Autoload/

但是这些都没有帮助,它仍然失败,出现同样的错误。

是否有一种特殊的方式来包含PHAR存档的路径?这可能吗?这有必要吗?这可能与这个错误有关:https://bugs.php.net/bug.php?id=64634 ?

我的系统:Windows 7 x64, XAMPP 1.8.1, Apache 2.4.3, PHP 5.4.7

更新:尝试了最新的稳定PHP 5.4.14也,同样的问题

我设法复制了它,并且使用stream_copy_to_stream的解决方案似乎有效,所以我在566313834af3a49cd3f6b41001f7d8549e0b9c96中应用了它,如果你运行作曲家自我更新它现在应该工作。

我不太确定composer的其他部分可能受到此影响,但如果您仍然有类似的问题,请随时在github上打开bug报告。