register_shutdown_function

grigori

( ͡° ͜ʖ ͡°)
Команда форума
register_shutdown_function

Здравствуйте,
столкнулся я с тем, что register_shutdown_function у меня работает совсем не так, как сказано в документации. Вывод на браузер производится даже на линуксе (если в браузере не была принудительно нажата Stop), а запись в файл наоборот не работает.

Пример:
PHP:
<?php
register_shutdown_function('foo');
function foo (){
    echo "Test";
    $fp = fopen("file.txt", "w");
    if (!is_resource($fp)) {echo "error";}
    fwrite($fp, "Test");
    fclose($fp);
}
?>
Файл file.txt не создается, на браузер выводится Test.

Пример 2:
PHP:
<?php
function foo (){
    $fp = fopen("file.txt", "w");
    if (!is_resource($fp)) {echo "error";}
    fwrite($fp, "Test");
    fclose($fp);
}
foo ();
?>
Файл file.txt успешно создается, слово Test в него записывается.

В мануале читал разные отзывы - у кого-то работает, у кого-то нет.
Кто-нибудь разбирался?

Смотрел на Win32 Apache 1.3.27/PHP 4.3.0
и Red Hart 7.3 PHP 4.3

P.S. Тема сообщения выглядит как register_shutdown_functio n (с пробелом перед n). Мной написано правильно и редактированию не поддается.
 

art922

Новичок
На некоторых веб-серверах рабочая директория скрипта может измениться внутри завершающей функции, и поэтому,
её надо изменить обратно самому( функция chdir() ).
Вот рабочий пример:
PHP:
<?php
    register_shutdown_function('foo');
    function foo (){
        echo "Test";
        chdir(__DIR__);
        $fp = fopen("file.txt", "w");
        if (!is_resource($fp)) {echo "error";} fwrite($fp, "Test"); fclose($fp);
} ?>
P.S. __DIR__ - это константа, указывающая путь папки, в которой находится скрипт
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
По большому счёту, открывать файлы (тем более логфайлы) в текущем каталоге - это не самое логичное телодвижение. Кто его знает, какой там каталог - текущий.
Я стараюсь всегда указывать полный путь к файлам. Хотя бы и через ($_SERVER['DOCUMENT_ROOT'] . '/file')

А __DIR__ работает только с PHP 5.3.
 

fixxxer

К.О.
Партнер клуба
Ё, дайте им обоим медали и закройте нафиг тред уже =))
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ё! "Вывод на браузер" {facepalm}. Я вспомнил :) я тогда месяца два как php учить начал, наверное, а этот баг исчез при обновлении php
 
Последнее редактирование:

Активист

Активист
Команда форума
Ё! "Вывод на браузер" {facepalm}. Я вспомнил :) я тогда месяца два как php учить начал, наверное, а этот баг исчез при обновлении php
Как было 11 лет назад, так и осталось ))
PHP:
Before: /var/www/avtovokzal.localhost/httpdocs
After: /
PHP Version5.6.0RC3(Linux)
<pre>
<?php print "Before: " . getcwd()."<br/>";
register_shutdown_function('foo');

function foo ()
{
print "After: " . getcwd()."<br/>";
print "PHP Version" . PHP_VERSION . "(" . PHP_OS . ") <br/>";
highlight_file(__FILE__);
}

?>
PS: Вспомнил себя в молодости?)) Вот такой вот новичок )))))
 

fixxxer

К.О.
Партнер клуба
Да хоть 666. Зато phpng и наконец-то AST-based компилятор.
 
Сверху