2011-04-30 46 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