я создал приложение 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.
Я надеюсь, что кто-то может дать мне подсказку. 🙂
Phar имеет другую структуру пути, и этот метод Symfony делает dirname($filename);
https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Filesystem/Filesystem.php#L679
Попробуйте определить полный путь.
$path = '.';
if (!empty($pharPath = \Phar::running(false))) {
$path = dirname($pharPath);
}
$this->fileSystem->dumpFile(
$path.'/testfile.txt',
'my test content'
);
Других решений пока нет …