我正在使用 curl 和 php 来查找有关给定 url 的信息(例如 http 状态代码、mimetype、http 重定向位置、页面标题等)。
$ch = curl_init($url); $useragent="Mozilla/5.0 (X11; U; Linux x86_64; ga-GB) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.307.11 Safari/532.9"; curl_setopt($ch,CURLOPT_HTTPHEADER,数组 ( "接受: application/rdf+xml;q=0.9, application/json;q=0.6, application/xml;q=0.5, application/xhtml+xml;q=0.3, text/html;q=0.2, */* ;q=0.1" )); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_USERAGENT, $useragent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $content=curl_exec($ch); $chinfo = curl_getinfo($ch); curl_close($ch);
这通常运作良好。但是,如果 url 指向一个更大的文件,那么我会收到一个致命错误:
致命错误:允许的内存大小为 16777216 字节已用尽(尝试分配 14421576 字节)
有没有办法阻止这种情况?例如,如果文件太大,告诉 curl 放弃,或者捕获错误?
作为一种解决方法,我添加了
curl_setopt($ch, CURLOPT_TIMEOUT, 3); 它假定任何加载时间超过 3 秒的文件都会耗尽允许的内存,但这远不能令人满意。