私は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、Geckoなど)Chrome / 5.0.307.11 Safari / 532.9"; curl_setopt($ ch、CURLOPT_HTTPHEADER、array( "承認: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秒以上かかるファイルは、許可されたメモリを使い果たすと想定していますが、これでは十分とは言えません。