2012-11-13 47 views
14

如果我使用Ctrl鍵 + Ç退出PHP腳本在CLI運行,既沒有關閉功能,也沒有實例化的對象的析構函數,也沒有任何輸出緩衝區被處理。相反,程序就會死亡。現在,這可能是一件好事,因爲這是什麼Ctrl + C應該這樣做。但是有什麼方法可以改變它嗎?是否有可能強制使用Ctrl + C要經過關機功能?析構函數和停機功能按Ctrl + C在PHP-CLI退出時

更具體地說,這是關於序列化和保存腳本退出的數據,所以它可以在下次腳本運行時重新加載和恢復。定期保存數據可能會奏效,但仍然會失去最後一次保存的所有內容。還有什麼其他選擇?

+0

你有沒有考慮過嘗試Ctrl + Z?我不知道這是否適用於PHP或不... – Brad

+0

我不知道Ctrl + Z應該做什麼。我只是試了一下,它似乎沒有做任何事情,除了在出現的下一個提示符(出現在fgets(STDIN)或在Ctrl + C之後的新提示符)出現^ Z字符以外) –

+0

我有一段時間沒有完成PHP CLI,但是有沒有辦法定期查看抓取CLI輸入並偵聽特定的「kill」命令,然後啓動解構器?你也可以在你的腳本的配置文件中設置一個「kill」標誌並定期檢查該標誌。 –

回答

10

顯然PCNTL是* nix的唯一,但......你可以爲所有的各個信號一個更強大的解決方案登記處理,而是專門做一些事情時,CTL +遇到C中斷:

<?php 
declare(ticks = 1); 

pcntl_signal(SIGINT, function() { 
    echo "Caught SIGINT\n"; 
    die; 
}); 

while (true) { 
    // waiting for your CTRL+C 
} 
+0

啊,我應該提到我在Windows上... –

+1

Doh!比爾蓋茨恨你!我不知道有什麼方法可以在Windows中完成此操作... – rdlowrey