2012-06-02 14 views
12

Aşağıdakileri yapmak mümkün mü?register_shutdown_function dosyasına yazınız

register_shutdown_function('my_shutdown'); 
function my_shutdown() 
{ 
    file_put_contents('test.txt', 'hello', FILE_APPEND); 
    error_log('hello', 3, 'test.txt'); 
} 

Çalışmıyor gibi gözüküyor. BTW PHP 5.3.5 üzerinde çalışıyorum.

cevap

19

ile kontrol edin. documentation page for register_shutdown_function(), Apache gibi bazı sunucularda betiğin çalışma dizininin değiştiğini belirtir.

dosya yazılı ancak .php dosyası (DocumentRoot) olduğu değil, fakat Apache sunucusuna (ServerRoot) ait klasörde alır.

Bunu önlemek için, çalışma klasörü değişiklikleri bir çeşit hotwire gerekir. Sadece betiğiniz'u (ilk birkaç satırda) çalıştırmaya başladığında, gerçek çalışma klasörünü bir yere kaydetmeniz gerekir. define() ile bir sabit oluşturmak, bunun için mükemmeldir.

define('WORKING_DIRECTORY', getcwd()); 

Ve böyle kapanma fonksiyonu kısmını değiştirmeniz gerekir:

function my_shutdown() 
{ 
    chdir(WORKING_DIRECTORY); 

    file_put_contents('test.txt', 'hello', FILE_APPEND); 
    error_log('hello', 3, 'test.txt'); 
} 

register_shutdown_function('my_shutdown'); 

Bu şekilde, çalışma klasörü anında işlev çağrıldığında gerçek birine geri değişecek ve test.txt Dosya, DocumentRoot klasöründe görünecektir.

Bazı modifikasyon

: fonksiyon ilan edilmiştir register_shutdown_function() sonra aramak daha iyidir. İşte bu yüzden,'un altında 'u fonksiyon kodunun üstünde yazmamıştım.

+0

Bu cevap işe yaradı mı? Umarım sonuçlarınızı duyacağım. – Whisperity

+0

Evet Geç güncelleme için üzgünüm – IMB

+0

Apache sürümü önemli midir? İşlev belgelerine ilişkin bazı yorumlara göre öyle görünüyor. İki web sunucum var ve bir eseri var, diğeri yok. Yaptığı bir Mac üzerinde Apache/2.2.24 (Unix) 'dir. Ubuntu 14.04'te Apache/2.4.9 (Ubuntu) olmayan diğer. –

1

onay bu: (here itibaren)

Note: 

Working directory of the script can change inside the shutdown function 
under some web servers, e.g. Apache. 

O kullandığınız SAPI hangi bağlıdır getcwd();

İlgili konular