2012-06-02 52 views
12

Có thể thực hiện các thao tác sau không?Ghi vào tập tin với register_shutdown_function

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

Dường như không hoạt động. BTW Tôi đang sử dụng PHP 5.3.5.

Trả lời

19

Nó phụ thuộc mà SAPI bạn đang sử dụng. Các documentation page for register_shutdown_function() tiểu bang rằng theo các máy chủ nhất định, như Apache, thư mục làm việc của kịch bản thay đổi.

Các tập tin được ghi, nhưng không phải là nơi tập .php của bạn là (DocumentRoot), nhưng trong thư mục của máy chủ Apache (ServerRoot).

Để ngăn chặn điều này, bạn cần một số loại hotwire mà thư mục làm việc thay đổi. Chỉ khi tập lệnh của bạn bắt đầu thực hiện (trong một vài dòng đầu tiên), bạn cần phải bằng cách nào đó lưu trữ thư mục làm việc thực. Tạo một hằng số với define() là hoàn hảo cho việc này.

define('WORKING_DIRECTORY', getcwd()); 

Và bạn cần phải sửa đổi các chức năng shutdown phần như thế này:

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

Bằng cách này, các thư mục làm việc sẽ ngay lập tức được thay đổi trở lại thực sự một khi hàm được gọi, và test.txt tệp sẽ xuất hiện trong thư mục DocumentRoot.

Một số sửa đổi: Nó là tốt hơn để gọi register_shutdown_function()sau chức năng đã được công bố. Đó là lý do tại sao tôi đã viết nó bên dưới mã chức năng, không phải ở trên nó.

+0

Vì vậy, câu trả lời này có hiệu quả không? Tôi hy vọng tôi sẽ nghe về kết quả của bạn. – Whisperity

+0

Xin lỗi vì đã cập nhật muộn – IMB

+0

Phiên bản Apache có quan trọng không? Theo một số ý kiến ​​về các tài liệu chức năng nó có vẻ như vậy. Tôi có hai máy chủ web và một máy chủ và một máy chủ khác thì không. Một trong số đó là Apache/2.2.24 (Unix) trên máy Mac. Cái kia không phải là Apache/2.4.9 (Ubuntu) trong Ubuntu 14.04. –

1

việc kiểm tra này: (từ here)

Note: 

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

kiểm tra xem nó với getcwd();

Các vấn đề liên quan