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ó.
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
Xin lỗi vì đã cập nhật muộn – IMB
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. –