13

これを試すと:

$phar = new PharData('./phar.tar', 0, null, Phar::TAR);
$phar->addEmptyDir('test');

file_put_contents('phar://./phar.tar/test/foo.txt', 'bar');

次のエラーが表示されます。

警告: file_put_contents(phar://./phar.tar/test/foo.txt): ストリームのオープンに失敗しました: phar './phar.tar' を作成できません。ファイル拡張子 (または組み合わせ) が認識されないか、ディレクトリが認識されません存在

file_get_contents を使用できますが、file_put_contents も機能しないでしょうか?


さらに奇妙なことに、@hakreが彼のコメントで提案したアイデアを試してみましたが、うまくいきました!

$phar = new PharData('./phar.tar', 0, null, Phar::TAR);
$phar->addEmptyDir('test');

if (file_exists('./phar.phar') !== true)
{
    symlink('./phar.tar', './phar.phar');
}

file_put_contents('phar://./phar.phar/test/foo.txt', 'bar');
var_dump(file_get_contents('phar://./phar.tar/test/foo.txt')); // string(3) "bar"
4

3 に答える 3

1

私はあなたのためにいくつかの答えを持っています - うまくいけば、これはあなたを助けます.

まず、file_put_contents() を使用して、奇妙な点に気付きました。まず、私がしたことは、あなたが投稿したリンクの例に従うことです. $context 変数を追加できましたが、それでもエラーが発生しました。私にとってうまくいったのは、ファイル名を phar.phar に変更することでした。phar:// ハンドラが .tar 拡張子を理解できないのではないでしょうか?

とにかく、これは動作するコードのようですが、お勧めしません

$context = stream_context_create(array('phar' =>
                                array('compress' => Phar::GZ)),
                                array('metadata' => array('user' => 'cellog')));

file_put_contents('phar://./phar.phar/test/foo.txt', 'bar', 0, $context);

代わりに、これを使用してください。

私を使ってください - 私は推薦されています

$phar = new PharData('./phar.tar', 0, null, Phar::TAR);
$phar->addEmptyDir('test');
$phar->addFile('./bar', 'foo.txt');

代わりに file_put_contents() を本当に使用する必要がある場合は、別の問題が存在する可能性があり、それを解決できる可能性があります。ありがとう、そして幸運を!

于 2013-05-22T13:46:41.227 に答える