Komut dizimde çıktı arabelleği ile oynuyorum ve beklenmedik davranışlara rastladım.PHP file_put_contents register_shutdown_function() içinde beklendiği gibi çalışmaz()
Bir dosyaya yazı yazmak, senaryodaki her yerde çalışır, ancak register_shutdown_function() - işlevine girdikten sonra bunu yapmaz.
Dosyaya yazma iznim olmadığını bildiren bir uyarı alıyorum. Bu yüzden hangi yoldan geçtiğimi kontrol ettim. Görünüşe göre mevcut çalışma dizini kapatma fonksiyonuna girdiğiniz andan kayboluyor.
Sorum, özellikle bunun nasıl çözüleceğine değil; Gördüğünüz gibi, doğru yolu ekledim. Sorum şu, beklenen davranış budur ve eğer öyleyse, arkasındaki mantık nedir?
Eğer önemliyse OSX/MAMP-PRO kullanıyorum. Henüz başka bir kutuda denemedim.
<?
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');
}
?>