本篇文章给大家谈谈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)
- AngularJS中$ broadcast(),$ emit()和$ on()的用法
- COM:excelApplication.Application.Quit()保留进程
- cURL没有跟随Location:标头
- getApplication()与getApplicationContext()
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();
ordie();
函数?而在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()的用法
我了解$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
集成从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:标头
我正在尝试使用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分钟,却一无所知。
谢谢你的帮助!
解决方法
curl_setopt($ch,CURLOPT_HEADER,1);
如果我已阅读正确的文档,则将返回包含“ Location”指令的所请求页面的消息,并且通过将CURLOPT_FOLLOWLOCATION设置为true,它应遵循该重定向,并且通过位置进行任何其他重定向指示。
getApplication()与getApplicationContext()
我找不到令人满意的答案,所以我们在这里:与Activity/Service.getApplication()
和Context.getApplicationContext()
什么关系?
在我们的应用程序中,都返回相同的对象。 但是,在ActivityTestCase
中,模拟应用程序将使getApplication()
返回模拟,但getApplicationContext
仍将返回不同的上下文实例(由Android注入的实例)。 那是一个错误吗? 这是故意的吗?
我甚至不了解首先的区别。 测试套件外是否存在两个呼叫可能带有不同对象的情况? 何时以及为何? 此外,为什么getApplication
在Activity
和Service
上定义,而不是在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()的相关知识,请在本站寻找。
本文标签: