我将重定向代码放在页面顶部,该页面下面有自举代码。重定向是否会产生一个不同的进程,使重定向页面进程成为后台进程,或者它完全杀死当前进程?
我使用header()进行重定向,但令人惊讶的是,header()下面的剩余代码也需要执行数据库连接。这让我很好奇。
答案 0 :(得分:2)
首先,你不应该像这样呼叫header()
,除非你非常确定Drupal助手是不合适的(在我10多年的Drupal开发中我从未遇到过这种情况)
header()
不会调用Drupal中的关闭和其他关闭函数,从而导致可能会中断会话,错误的统计信息和损坏的模块(这取决于关闭被调用)。在这种情况下套接字和其他低级资源未关闭的事实甚至可能在某些时候使您的Apache服务器(或其他服务器)崩溃。
如果要设置标题,请调用drupal_set_header()。十分之九的你想要一个重定向标题,在最好的情况下你最好打电话给drupal_goto(),所有关闭甚至支持目标参数都要遵循。
在drupal_goto上,所有进程都被终止(请参见底部的exit()
),因此不会保留正在运行的进程。 module_invoke_all('exit')
将确保所有模块在关闭其套接字,连接等方面获得转变。
答案 1 :(得分:0)
据我所知,单个进程既会出现原始请求,也会出现重定向请求。原始请求完成后,将处理重定向请求。
由于有许多URL重定向技术,除非您告诉我们您正在使用的特定URL重定向技术,否则我们无法确定。
答案 2 :(得分:0)
到目前为止,根据我的理解,如果您直接从apache htaccess文件重定向,则不会创建新进程。如果使用header()函数,它会向apache服务器发送响应,并且apache会重定向页面。在这两种情况下,都没有创建新流程;但后者在重定向之前运行php脚本(更昂贵?)。