From 599d8d6674300331160b1ece6d3d807bdace50ea Mon Sep 17 00:00:00 2001 From: Florian Engelhardt Date: Mon, 11 Nov 2024 11:49:22 +0100 Subject: [PATCH] support multiple `PHP_INI_SCAN_DIR`'s --- datadog-setup.php | 7 +++++ tests/Integration/PHPInstallerTest.php | 39 +++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/datadog-setup.php b/datadog-setup.php index d5b661bff6d..7fc2c689a89 100644 --- a/datadog-setup.php +++ b/datadog-setup.php @@ -827,6 +827,13 @@ function find_all_ini_files(array $phpProperties) function find_main_ini_files(array $phpProperties) { if (isset($phpProperties[INI_SCANDIR])) { + + $pos = strpos($phpProperties[INI_SCANDIR], ':'); + if ($pos !== false) { + // https://www.php.net/manual/en/configuration.file.php#configuration.file.scandir + $phpProperties[INI_SCANDIR] = current(array_filter(explode(':', $phpProperties[INI_SCANDIR]))); + } + $iniFileName = '98-ddtrace.ini'; // Search for pre-existing files with extension = ddtrace.so to avoid conflicts // See issue https://github.com/DataDog/dd-trace-php/issues/1833 diff --git a/tests/Integration/PHPInstallerTest.php b/tests/Integration/PHPInstallerTest.php index 1e3e868f0bc..be45060ae71 100644 --- a/tests/Integration/PHPInstallerTest.php +++ b/tests/Integration/PHPInstallerTest.php @@ -284,7 +284,7 @@ public function testUpdateIniSetting(string $before, string $after, bool $promot $tempFile = tempnam(sys_get_temp_dir(), 'test'); file_put_contents($tempFile, $before); - $count = update_ini_setting(['foo.bar', 'Off'], $tempFile, $promoteComment); + $count = \update_ini_setting(['foo.bar', 'Off'], $tempFile, $promoteComment); $output = file_get_contents($tempFile); $this->assertSame($after, $output); @@ -293,6 +293,43 @@ public function testUpdateIniSetting(string $before, string $after, bool $promot unlink($tempFile); } + public function iniFilePathsProvider() + { + return [ + [ + [ + \INI_SCANDIR => '/opt/php/8.4/etc/conf.d', + \INI_MAIN => '', + ], [ + '/opt/php/8.4/etc/conf.d/98-ddtrace.ini', + ] + ], [ + [ + \INI_SCANDIR => '/opt/php/8.4/etc/conf.d:/opt/php/8.4/etc/override-conf.d', + \INI_MAIN => '', + ], [ + '/opt/php/8.4/etc/conf.d/98-ddtrace.ini', + ] + ], [ + [ + \INI_SCANDIR => ':/opt/php/8.4/etc/override-conf.d', + \INI_MAIN => '', + ], [ + '/opt/php/8.4/etc/override-conf.d/98-ddtrace.ini', + ] + ] + ]; + } + + /** + * @dataProvider iniFilePathsProvider + */ + public function testFindIniFilePath($props, $expected) + { + $dirs = \find_main_ini_files($props); + $this->assertSame($expected, $dirs); + } + private static function getTmpRootPath() { return sys_get_temp_dir() . '/dd-php-setup-tests';