Skip to content

Commit a582bb3

Browse files
authored
Merge pull request #180 from asgrim/check-additional-php-ini-dir-writable
Check the additional php.ini dir is writable
2 parents 22f0187 + bf869f4 commit a582bb3

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/Installing/Ini/StandardAdditionalPhpIniDirectory.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Symfony\Component\Console\Output\OutputInterface;
1111

1212
use function file_exists;
13+
use function is_writable;
1314
use function rtrim;
1415
use function sprintf;
1516
use function touch;
@@ -43,6 +44,18 @@ public function setup(
4344
return false;
4445
}
4546

47+
if (! file_exists($additionalIniFilesPath) || ! is_writable($additionalIniFilesPath)) {
48+
$output->writeln(
49+
sprintf(
50+
'PHP is configured to use additional INI file path %s, but it did not exist, or is not writable by PIE.',
51+
$additionalIniFilesPath,
52+
),
53+
OutputInterface::VERBOSITY_VERBOSE,
54+
);
55+
56+
return false;
57+
}
58+
4659
$expectedIniFile = sprintf(
4760
'%s%s%d-%s.ini',
4861
rtrim($additionalIniFilesPath, DIRECTORY_SEPARATOR),

test/unit/Installing/Ini/StandardAdditionalPhpIniDirectoryTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,29 @@ public function testSetupReturnsWhenAdditionalPhpIniDirectoryIsNotSet(): void
134134
));
135135
}
136136

137+
public function testSetupReturnsWhenAdditionalPhpIniDirectoryDoesNotExist(): void
138+
{
139+
$this->mockPhpBinary
140+
->expects(self::once())
141+
->method('additionalIniDirectory')
142+
->willReturn('/path/to/something/does/not/exist');
143+
144+
$this->checkAndAddExtensionToIniIfNeeded
145+
->expects(self::never())
146+
->method('__invoke');
147+
148+
self::assertFalse($this->standardAdditionalPhpIniDirectory->setup(
149+
$this->targetPlatform,
150+
$this->downloadedPackage,
151+
$this->binaryFile,
152+
$this->output,
153+
));
154+
self::assertStringContainsString(
155+
'PHP is configured to use additional INI file path /path/to/something/does/not/exist, but it did not exist, or is not writable by PIE.',
156+
$this->output->fetch(),
157+
);
158+
}
159+
137160
public function testReturnsTrueWhenCheckAndAddExtensionIsInvoked(): void
138161
{
139162
$additionalPhpIniDirectory = tempnam(sys_get_temp_dir(), 'pie_additional_php_ini_path');

0 commit comments

Comments
 (0)