From 4ab0132232d0d2ee57bcbc1b90ddcddd29d4426f 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 | 46 +++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/datadog-setup.php b/datadog-setup.php index d5b661bff6d..9ffde6537e7 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], \PATH_SEPARATOR); + 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..408dcc228b8 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,50 @@ 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'.\PATH_SEPARATOR.'/opt/php/8.4/etc/override-conf.d', + \INI_MAIN => '', + ], [ + '/opt/php/8.4/etc/conf.d/98-ddtrace.ini', + ] + ], [ + [ + \INI_SCANDIR => \PATH_SEPARATOR.'/opt/php/8.4/etc/override-conf.d', + \INI_MAIN => '', + ], [ + '/opt/php/8.4/etc/override-conf.d/98-ddtrace.ini', + ] + ], [ + [ + \INI_SCANDIR => '/opt/php/8.4/etc/override-conf.d'.\PATH_SEPARATOR, + \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';