Ich spiele mit Ausgabepufferung in meinem Skript und stolperte über unerwartetes Verhalten.PHP file_put_contents funktioniert nicht wie erwartet innerhalb von register_shutdown_function()
Das Schreiben in eine Datei funktioniert überall sonst in meinem Skript, aber nach der Eingabe der register_shutdown_function() - Funktion geschieht dies nicht.
Ich bekomme eine Warnung, dass ich keine Berechtigung habe, in die Datei zu schreiben. Also überprüfte ich, in welchem Pfad ich mich befand. Anscheinend verschwindet das aktuelle Arbeitsverzeichnis von dem Moment an, an dem Sie die Shutdown-Funktion aufrufen.
Meine Frage ist nicht besonders auf, wie man das löst; Wie Sie sehen können, habe ich nur den richtigen Pfad angegeben. Meine Frage ist, ist das erwartete Verhalten und wenn ja, was ist die Logik dahinter?
Ich bin auf OSX/MAMP-PRO, wenn das zählt. Habe es noch nicht auf einer anderen Box probiert.
<?
register_shutdown_function('_lib_bootstrap_end');
ob_start();
_lib_bootstrap_start();
file_put_contents('test1.log','this_one_writes_fine');
function _lib_bootstrap_start()
{
echo getcwd()."\n"; // prints '/Users/macbook/Documents/WWW';
file_put_contents('test2.log','this_one_writes_fine');
}
function _lib_bootstrap_end()
{
global $html;
file_put_contents('test3.log', 'this_one_triggers_warning');
$html[] = ob_get_contents();
$return = implode("\n",$html);
ob_end_clean();
echo $return;
echo getcwd()."\n"; // prints '/';
file_put_contents('test4.log', 'this_one_triggers_warning');
// prints 'Warning: file_put_contents(test4.log): failed to open stream: Permission denied in ob_problem.php on line 24'
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.'test5.log','this_one_writes_fine');
}
?>