В архиве 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'
);