2011-04-30 40 views
0

我試圖修改在PHP 5.1.6上運行的Joomla 1.0安裝程序的一部分,並且我遇到了strftime()函數的問題。在我打電話的代碼中:strftime在php5上崩潰joomla

print strftime("%d-%m-%y", '1304184490') . "\n"; 

它在單獨的.php文件中工作就好了。當它是joomla代碼的一部分時,該腳本完全停止執行該行。我在錯誤日誌中沒有收到任何消息(將error_reporting設置爲E_ALL),沒有生成異常,腳本停止在該行(在前後驗證print "foo\n")。

這可能是什麼原因?我不確定整個主機的配置,因爲它是一些共享主機帳戶。

+0

是該行上的整個代碼?它之前的界限是什麼? – Khez 2011-04-30 18:28:57

+0

@Khez在它之前和之後,只有'print'foo \ n「;'。只有第一個工作。這是班級的全部功能。 – viraptor 2011-04-30 18:41:03

回答

0

strftime依賴於底層的C庫來執行格式化。該手冊警告:

並非所有的轉換說明符都可以被C庫支持,在這種情況下,它們將不會被PHP的strftime()支持。這意味着[各種]不能在Windows,某些Linux發行版和其他一些操作系統上運行。

現在,你的格式字符串是非常基本的,所以沒有真正的理由應該在這裏失敗。

老實說,您最好的選擇可能是使用PHP原生函數date而不是strftime,因爲date不依賴於C庫調用。等價的電話將是:

echo date("d-m-y", '1304184490') . "\n"; 
+0

它的行爲方式相同。它在單獨的文件中工作,但在joomla代碼中運行時,它會停止執行而不會記錄任何錯誤。 – viraptor 2011-04-30 18:48:51

+0

@viraptor,這是非常令人不安的。其他PHP函數是否工作?你可以在崩潰的文件中向我們展示更多的上下文嗎? – Charles 2011-04-30 18:58:49

+0

@Charles:我想我找到了一個理由。如果我用'date_default_timezone_set('Europe/London')'設置區域,一切正常。如果我不這樣做,'date_default_timezone_get()'本身會停止腳本(也沒有錯誤日誌)。 Joomla版本是「1.0.12」。時區數據庫版本「0.system」。默認時區「歐洲/倫敦」。 date.timezone「沒有價值」。 (由phpinfo()報告的值) – viraptor 2011-04-30 19:07:30