Artykuły na każdy temat
<?php
echo 'hello there!';
// Zainicjowanie sesji
session_start();
?>
Aby rozwiązać problem wystarczy przesunąć session_start() na początek w ten sposób:
<?php
// Zainicjowanie sesji
session_start();
echo 'hello there!';
?>
<?php
include './a.php';
include './b.php';
// Zainicjowanie sesji
session_start();
?>
ten to: a.php
<?php
$init = false;
?>
a poniższy to: b.php
<?php
echo '$init = '.($init === true ? 'true' : 'false');
?>
Najlepszym rozwianiem tego problemu jest inicjowanie mechanizmu sesji na początku pliku głównego czyli index.php powinien wyglądać tak:
<?php
// Zainicjowanie sesji
session_start();
// Inne operacje
include './a.php';
include './b.php';
?>
<?php
ob_start(); // Definitywnie na początku
?>
<html>
<head>
</head>
<body>
<?php
echo 'I like bananas';
setcookie('TestCookie', 'The banana');
?>
</body>
</html>
<?php
ob_end_flush();
?>
Jedyne co musimy pamiętać to fakt, że ob_start() umieszczamy na samym początku pliku zaś ob_end_flush() na końcu.
<?php
session_start();
?>
Na pierwszy rzut oka powinno działać lecz jeżeli nowicjusz zapisze ów kod w notatniku to ten kochany program doda na początku pliku zbędne znaki, które są powodem problemów. Odpowiednie kodowanie pliku ma znaczenie dlatego też przestrzegam przed takimi praktykami! Wyjątkiem od reguły może być parametr auto_prepend_file w php.ini. Może się zdarzyć, że serwer będzie dorzucał automatycznie jakiś plik przed wygenerowaniem naszej strony. Sytuacje te są sporadycznie spotykane! Pamiętajmy, że używanie bufora może spowolnić dzianie serwisu szczególnie przy dużej ilości użytkowników dlatego też staramy się dobrze pisać aplikacje webowe i stosować ob_start() w ostatecznosci
Komentarze
Dodaj komentarz