В архиве Phar нет прав на чтение и запись с файловой системой Symfony

Я создал приложение cli, которое пытается создать файл с компонентом symfony 3 fileSystem. Все работает нормально, но если я положу приложение в архив phar, symfony не сможет записать файл.

Вот как я создал архив phar:

<?php
$phar = new Phar('app.phar', 0, 'app.phar');
$phar->buildFromDirectory(dirname(__FILE__) );
$phar->setStub($phar->createDefaultStub('app.php'));

App.php вызывает компонент файловой системы symfony:

<?php 

....

$this->fileSystem->dumpFile(
    'testfile.txt',
    'my test content'
);

Это работает нормально, если я выполняю app.php напрямую. Но если я выполню его как.phar, я получу это сообщение.

[Symfony\Component\Filesystem\Exception\IOException]  
Failed to create ".": mkdir(): File exists.

Другие операции, такие как echo работает нормально. Я думаю, что в архиве phar есть проблемы с операциями ввода-вывода. Но я не понимаю, в чем проблема. В моем php.ini настроен phar.readonly=Off.

Я надеюсь, что кто-то может дать мне подсказку.:)

1 ответ

Решение

Phar имеет другую структуру пути, и этот метод Symfony делает dirname($filename); https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Filesystem/Filesystem.php

Попробуйте определить полный путь.

$path = '.';
if (!empty($pharPath = \Phar::running(false))) {
    $path = dirname($pharPath);
} 

$this->fileSystem->dumpFile(
    $path.'/testfile.txt',
    'my test content'
);
Другие вопросы по тегам