【发布时间】:2010-12-23 09:53:15
【问题描述】:
使用 PHP 和 CURL(除非在这种情况下有比 CURL 更好的替代方案),是否可以在下载文件之前让 php 函数处理标头响应?
例如:
我有一个脚本,可以下载和处理用户提供的 url。我想添加一个检查,以便如果文件对我的进程无效(不是文本文件、太大等),CURL 请求将在服务器浪费时间下载文件之前被取消。
更新:解决方案 PEAR 类 HTTP_Request2:http://pear.php.net/package/HTTP_Request2/ 使您能够为连接设置观察者并随时抛出异常以取消。完美满足我的需求!
【问题讨论】:
-
我确实在 cURL "CURLOPT_HEADERFUNCTION" 中找到了一个选项,可让您为标头设置回调函数,但是您无法从回调内部取消请求。您收到错误消息:“尝试从回调中关闭 cURL 句柄”
-
在良好的编程设计中,永远不应该为“正常”操作抛出异常,因为通常异常在算法上是昂贵的。它们应该只用于很少发生的操作,例如错误或不正确的行为。
-
要在为
CURLOPT_HEADERFUNCTION或其他CURLOPT_*FUNCTION选项定义的回调函数中中止下载响应流,只需让您的回调返回-1。