// VERY BEGIN OF SCRIPT
$_SERVER['HX_startTime'] = microtime(true);
...
// MY SHUTDOWN FUNCTION
register_shutdown_function('HX_shutdownFn');
function HX_shutdownFn()
{
// formatTimeSpan is simple time to string conversion function
var_dump(formatTimeSpan(microtime(true) - $_SERVER['HX_startTime']));
}
...
// VERY END OF SCRIPT
var_dump(formatTimeSpan(microtime(true) - $_SERVER['HX_startTime']));
我有 0.0005s 。在脚本末尾和 1.1s 。在关机功能。这是正常的吗?丢失1秒?
脚本是纯php,不使用数据库连接等。在WAMP服务器上测试(php v 5.3.9,apache 2.2.21)
答案 0 :(得分:1)
在关闭某些连接并完成清理后,关闭功能将耗尽正常堆栈。延迟将始终作为此函数的性质发生,取决于您之前所做的或尝试在此函数中执行的操作。
手册没有说明,但它是一个调试功能,也应该这样对待。
正常操作时,切勿使用它。没有优势。您可以手动调用脚本末尾的关闭函数,并为意外关闭留下处理程序。
答案 1 :(得分:1)
正如其他人所提到的,可能还有其他关机功能。此外,还有对象的析构函数,当它们超出范围时调用(如果在全局范围内)。
您可以使用XDebug模块(http://xdebug.org/)查看所有这些内容,尤其是在使用跟踪文件时。一旦安装并配置了XDebug,就可以将?XDEBUG_TRACE = 1附加到您的URL并查看整个页面执行的完整调用堆栈,包括每行的计时信息。
使用适当的选项,您还可以查看参数的分配,名称和值,返回值和分配。它是一个非常强大和有用的工具。
这些是我用于XDebug的设置:
xdebug.default_enable=1
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_append=On
xdebug.auto_trace=Off
xdebug.show_mem_delta=On
xdebug.collect_return=On
xdebug.collect_params=4
xdebug.profiler_output_dir = /tmp
xdebug.profiler_output_name = profile.%H.%t.%p
xdebug.var_display_max_children = 999
xdebug.var_display_max_data = 99999
xdebug.var_display_max_depth = 100
xdebug.remote_enable=1
xdebug.cli_color=1
xdebug.show_local_vars=1
xdebug.show_mem_delta=1
xdebug.collect_return=1
xdebug.collect_assignments=1
xdebug.collect_params=4
xdebug.collect_includes=1
xdebug.trace_enable_trigger=1
xdebug.trace_output_dir=/tmp
xdebug.trace_output_name=trace.%t.%R.%p
答案 2 :(得分:0)
我假设有比你发布的更多代码 - 在这种情况下,如果你将任何输出传输到客户端,脚本将不会关闭,直到发送。
可能还会注册其他关闭功能,您可能不会注意到这些功能。
如果所有其他方法都失败了,请尝试隔离此脚本(因此,只有您发布的行,即使没有替代...
),并比较从命令行和您的Web服务器运行它。可能涉及一些特定于服务器的开销。