GVKun编程网logo

PHP:利用exit(); 或者死(); 在标头之后(“ Location:”);(使用php)

3

本篇文章给大家谈谈PHP:利用exit,以及;或者死的知识点,同时本文还将给你拓展AngularJS中$broadcast(),$emit()和$on()的用法、COM:excelApplicatio

本篇文章给大家谈谈PHP:利用exit,以及; 或者死的知识点,同时本文还将给你拓展AngularJS中$ broadcast(),$ emit()和$ on()的用法、COM:excelApplication.Application.Quit()保留进程、cURL没有跟随Location:标头、getApplication()与getApplicationContext()等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

PHP:利用exit(); 或者死(); 在标头之后(“ Location:”);(使用php)

PHP:利用exit(); 或者死(); 在标头之后(“ Location:”);(使用php)

我有一个简单的用户登录/注册系统

// execute queries, set cookies, etc. hereheader("Location: " . getenv("HTTP_REFERER"));

我最近看了一个关于交exit();die();,不知道,我本来应该使用这些。据我了解,它们使PHP终止了吗?那是对的吗?我可以解决此问题的最好方法是,直接在everHeader()之后直接添加这些函数之一;我有死刑吗?

我有AJAX,jQuery通过我的login.php / register.php阅读,这会以任何方式受到影响吗?

编辑:除了header()之后,我还应该在哪里使用exit();or
die();函数?而在exit();更多的使用PHP左右,而die();周围的Perl更多的使用呢?

答案1

小编典典

我也一直在寻找答案。我发现:

为什么死()或退出():

如果您未header(''Location:http://something'')在脚本后放置die()或exit(),则脚本可能会继续导致意外行为。例如,这可能会导致泄露您实际上想要通过重定向(HTTP
301)阻止的内容。最终用户可能无法直接看到上述内容,因为浏览器可能无法呈现(由于301)。结论,exit()和die()函数可阻止脚本继续运行。

区别:

我还想知道函数之间的区别,因为 似乎
没有区别。但是,在PHP中,Header输出有明显的不同。在下面的示例中,我选择使用其他标头,但为了显示出exit()和die()之间的区别并不重要。

Exit()的作用

<?php    header(''HTTP/1.1 304 Not Modified'');    exit();?>

结果是:

HTTP/1.1 304 Not Modified Connection: Keep-Alive Keep-Alive: timeout=5, max=100

Die()在行动

<?php    header(''HTTP/1.1 304 Not Modified'');    die();?>

结果是:

HTTP/1.1 304 Not Modified Connection: close

区别

因此, die() 关闭连接,而 exit() 没有关闭。是否要保持打开或关闭连接取决于性能。两者都有优点和缺点,并取决于您的特定要求。

AngularJS中$ broadcast(),$ emit()和$ on()的用法

AngularJS中$ broadcast(),$ emit()和$ on()的用法

我了解$Broadcast()$Emit()并且$On()
用于在一个控制器中引发事件并在另一个控制器中进行处理。如果可能的话,有人可以直接给我一些有关上述三种用法的实时示例angular JS吗?

我通过以下链接了解了基本用法。

http://www.binaryintellect.net/articles/5d8be0b6-e294-457e-82b0-ba7cc10cae0e.aspx

答案1

小编典典

$ emit

它通过作用域层次结构向上调度事件名称,并通知已注册的$rootScope.Scope侦听器。事件生命周期从$emit被调用的范围开始。该事件向上移动到根作用域,并在此过程中调用所有已注册的侦听器。如果其中一个侦听器取消了该事件,则该事件将停止传播。

$广播

它将事件名称向下调度到所有子作用域(及其子作用域),并通知已注册的$rootScope.Scope侦听器。事件生命周期从$broadcast被调用的范围开始。该范围内事件的所有侦听器都会收到通知。之后,事件向下遍历子作用域,并沿途调用所有注册的侦听器。该事件无法取消。

$ on

它侦听给定类型的事件。它可以捕捉事件调度的$broadcast$emit


视觉演示:

演示工作代码,以可视方式显示范围树(父/子关系):http :
//plnkr.co/edit/am6IDw?p=preview

演示方法调用:

  $scope.$on(''eventEmitedName'', function(event, data) ...  $scope.broadcastEvent  $scope.emitEvent

COM:excelApplication.Application.Quit()保留进程

COM:excelApplication.Application.Quit()保留进程

我正在使用COM集成从Python 2.7驱动MS Excel。我注意到一个奇怪的事情:当我运行以下代码时:

import win32com.clientexcelApp = win32com.client.dynamic.Dispatch(''Excel.Application'')

EXCEL.EXE过程中出现的过程列表(视图中使用Windows任务管理器或上subprocess.Popen(''tasklist''))按预期方式。然后,我会做所有我不需要做的事情。但是,当我关闭Excel时:

excelApp.Application.Quit()

即使我关闭了启动它的Python解释器,该过程仍然会持续(这种情况很有意义,因为Excel在不同的过程中运行,但可以肯定)。我发现终止此过程的唯一方法是手动使用任务管理器,或通过调用:

subprocess.Popen("taskkill /F /im EXCEL.EXE",shell=True)

强制/F标记是必需的,否则该过程不会终止。

这不是一个真正的问题(我希望),但是我想问一下,当我首先“正常”编辑文档,然后从python调用Excel,然后再次“正常”调用文档时,是否会引起问题?可能连续很多(几打)次?我担心的是创建有冲突的文档等版本。还是EXCEL.EXE为了安全起见,我应该每次都终止该过程吗?

我也注意到,subprocess.Popen("taskkill")它不会返回任何我可以catch并且可能会返回的异常(或者我在这里做些什么吗?)。我对区分“不存在的进程”杀死尝试和终止进程的失败尝试特别感兴趣。

答案1

小编典典

尝试关闭所有打开的书,告诉应用退出并删除对应用的任何引用。我通常将com对象包装在一个类中。这就是我的退出方法的样子。

      def quit(self):        self.xlBook.Close(SaveChanges=0)        self.xlApp.Quit()        del self.xlApp

您是从主线程调用Dispatch吗?如果不确定,请致电

pythoncom.CoInitialize()

派遣前,以及

pythoncom.CoUninitialize()

退出后

cURL没有跟随Location:标头

cURL没有跟随Location:标头

如何解决cURL没有跟随Location:标头

我正在尝试使用Rapidshare的API下载文件。为此,我需要两次请求其“ 0”子例程。一次获得适当的下载服务器以使用,其次在第一个请求给我的服务器上再次请求下载。第二个调用是发送文件的文件。 在第一次调用时,它返回带有a1ѭ字段的标头,我需要遵循此位置。所以我这样做:
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,\\"http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=download&fileid=$file_id&filename=$file_name&try=1&login={$account[\\''username\\'']}&password={$account[\\''password\\'']}\\");
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
$resp = curl_exec($ch);
curl_close($ch);
不幸的是,它似乎没有跟随位置标头,因为在
$resp
中没有返回任何内容。如果将URL放在浏览器中,则该URL将成功跟随location标头并为我提供API调用的输出,因此PHP或cURL一定有问题。 谁能冒险猜出它可能是什么?我已经摆弄了30分钟,却一无所知。 谢谢你的帮助!     

解决方法

将CURLOPT_HEADER更改为true。
curl_setopt($ch,CURLOPT_HEADER,1);
如果我已阅读正确的文档,则将返回包含“ Location”指令的所请求页面的消息,并且通过将CURLOPT_FOLLOWLOCATION设置为true,它应遵循该重定向,并且通过位置进行任何其他重定向指示。     

getApplication()与getApplicationContext()

getApplication()与getApplicationContext()

我找不到令人满意的答案,所以我们在这里:与Activity/Service.getApplication()Context.getApplicationContext()什么关系?

在我们的应用程序中,都返回相同的对象。 但是,在ActivityTestCase中,模拟应用程序将使getApplication()返回模拟,但getApplicationContext仍将返回不同的上下文实例(由Android注入的实例)。 那是一个错误吗? 这是故意的吗?

我甚至不了解首先的区别。 测试套件外是否存在两个呼叫可能带有不同对象的情况? 何时以及为何? 此外,为什么getApplicationActivityService上定义,而不是在Context ? 不应该随处可用的有效应用程序实例吗?


#1楼

它似乎与上下文包装有关。 从Context派生的大多数类实际上是一个ContextWrapper ,它基本上委托给另一个上下文,可能由包装器进行更改。

上下文是支持模拟和代理的一般抽象。 由于许多上下文都绑定到有限生命周期的对象(如Activity ,因此需要有一种方法来获取更长寿的上下文,以便注册将来的通知。 这是通过Context.getApplicationContext()实现的。 逻辑实现是返回全局Application对象,但没有什么能阻止上下文实现返回具有合适生存期的包装器或代理。

活动和服务更具体地与Application对象相关联。 我相信,这样做的用处是你可以在清单中创建和注册从Application派生的自定义类,并确保Activity.getApplication()Service.getApplication()将返回该特定类型的特定对象,您可以强制转换为派生的Application类,并用于任何自定义目的。

换句话说, getApplication()保证返回Application对象,而getApplicationContext()可以自由返回代理。


#2楼

比较getApplication()getApplicationContext()

getApplication返回一个Application对象,它允许您管理全局应用程序状态并响应某些设备情况,例如onLowMemory()onConfigurationChanged()

getApplicationContext返回全局应用程序上下文 - 与其他上下文的区别在于,例如,当您的活动结束时,Android可能会销毁(或以其他方式使其不可用)活动上下文。 应用程序上下文在您的Application对象存在时仍然可用(它不依赖于特定的Activity ),因此您可以将此用于需要上下文可用较长时间且独立于瞬态UI对象的Notifications 。

我想这取决于你的代码在做什么,无论这些可能是也可能不一样 - 尽管在正常使用中,我希望它们是不同的。


#3楼

要回答这个问题,getApplication()返回一个Application对象,getApplicationContext()返回一个Context对象。 基于您自己的观察,我假设两者的上下文是相同的(即幕后,Application类调用后一个函数来填充基类的Context部分或发生一些等效的操作)。 如果你只需要一个Context,那么你调用哪个函数真的不重要。


#4楼

非常有趣的问题。 我认为它主要是语义,也可能是由于历史原因。

虽然在当前的Android Activity和Service实现中, getApplication()getApplicationContext()返回相同的对象,但无法保证始终如此(例如,在特定的供应商实现中)。

所以,如果你想你的清单注册的应用程序类,你永远不应该叫getApplicationContext()并将其投放到您的应用程序,因为它可能不是应用程序实例(你显然与测试框架的经历)。

为什么getApplicationContext()首先存在?

getApplication()仅在Activity类和Service类中可用,而getApplicationContext()在Context类中声明。

这实际上意味着一件事:当在广播接收器中编写代码时,它不是上下文但在其onReceive方法中给出了上下文,您只能调用getApplicationContext() 。 这也意味着您无法保证能够在BroadcastReceiver中访问您的应用程序。

在查看Android代码时,您会看到在附加时,活动会收到基本上下文和应用程序,这些是不同的参数。 getApplicationContext()委托它调用baseContext.getApplicationContext()

还有一件事:文档说大多数情况下,你不应该需要子类Application:

通常不需要子类Application 。 在大多数情况下,静态单例可以以更模块化的方式提供相同的功能。 如果你的单例需要一个全局上下文(例如注册广播接收器),那么检索它的函数可以给一个Context ,它在第一次构造单例时在内部使用Context.getApplicationContext()

我知道这不是一个确切而准确的答案,但是,这仍然可以回答你的问题吗?

关于PHP:利用exit; 或者死的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于AngularJS中$ broadcast(),$ emit()和$ on()的用法、COM:excelApplication.Application.Quit()保留进程、cURL没有跟随Location:标头、getApplication()与getApplicationContext()的相关知识,请在本站寻找。

本文标签: