2016-04-03 30 views
1

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'); 
} 
?> 

cevap

0

davranış manual page for register_shutdown_function() göre beklenir: Bazı web sunucuları altında kapatma işlevi içinde değiştirebilir script

Çalışma dizine, örneğin Apaçi.

Bunun arkasındaki mantığı bilmiyorum.

İlgili konular