Деструкторы (PHP 5) и текущая директория -- баг?

lucas

Guest
Деструкторы (PHP 5) и текущая директория -- баг?

Судя по всему, в деструкторе происходит смена текущей директории скрипта.
Похоже на баг. Поиск на bugs.php.net успехом не увенчался.

Конфигурация: Windows 98 SE, Apache 1.3.29, PHP 5.0.0.

Тестовый пример:
PHP:
<?php

class foo
{	function __construct() { echo(getcwd() . "\n") ; }
	function __destruct() { echo(getcwd() . "\n") ; }
}

echo(getcwd() . "\n") ;
$foo = new foo ;

/**
 * Output:

c:\fw						// script's directory
c:\fw
d:\Program Files\Apache5	// Apache's directory
 
 */

?>
Ваши мнения? (Заранее спасибо.)
Буду рад тестам на других платформах/версиях.
 

tony2001

TeaM PHPClub
1) CWD для чайлда апача == /
2) при выполнении скрипта - меняется на dirname($script)
3) после выполнения меняется на /
4) <вот тут и выполняется деструктор>
 

lucas

Guest
Обнаружил в changelog'е PHP 5.0.1 следующее:
Changed destructor mechanism so that destructors are called prior to request shutdown. (Marcus)
Значит ли это, что пункты 3 и 4 поменялись местами?
Баг ли это? Есть ли workaround?
 

tony2001

TeaM PHPClub
>Changed destructor mechanism so that destructors are called prior to request shutdown. (Marcus)
это не то - дифф.

>Значит ли это, что пункты 3 и 4 поменялись местами?
нет

>Баг ли это? Есть ли workaround?
нет
нет
 

lucas

Guest
Макс, tony2001

Большое спасибо за участие и разъяснения.

По теме: укажем где нужно абсолютный путь и запомним на будущее эту особенность. Однако, ИМХО, было бы удобно, если бы деструктор выполнялся в контексте стандартного окружения скрипта. Но, видимо, на то, что это не так, есть свои причины. :)
 

lucas

Guest
Макс

Примерно так и будет. Спасибо за пояснение.

Если это представляет интерес, то решалась задача прозрачного сдампивания изменившихся свойств объекта на диск в файл.
 
Сверху