简体   繁体   English

如何使用PHP Simple HTML DOM Parser启用gzip压缩

[英]How to enable gzip compression using PHP Simple HTML DOM Parser

I have tried a few things to enable gzip compression using PHP Simple HTML DOM Parser but nothing has seemed to work thus far. 我已经尝试了一些使用PHP Simple HTML DOM Parser来启用gzip压缩的东西,但到目前为止似乎没有任何工作。 Using ini_set I've manged to change the user agent, so I figured it might be possible to also enable gzip compression? 使用ini_set我已经修改了用户代理,所以我认为也可以启用gzip压缩?

include("simpdom/simple_html_dom.php");
ini_set('zlib.output_compression', 'On');   
$url = 'http://www.whatsmyip.org/http_compression/';
$html = file_get_html($url);
print $html;

The website above tests it. 上面的网站测试它。 Please let me know if I am going about this the wrong way completely. 如果我完全以错误的方式解决这个问题,请告诉我。

==== ====

UPDATE UPDATE

For anyone else trying to achieve the same thing, it's best to just use cURL, then use the dom parser like so: 对于其他试图实现相同功能的人来说,最好只使用cURL,然后像这样使用dom解析器:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // Define target site
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return page in string
curl_setopt($cr, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2');
curl_setopt($ch, CURLOPT_ENCODING , "gzip");     
curl_setopt($ch, CURLOPT_TIMEOUT,5); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects

$return = curl_exec($ch); 
$info = curl_getinfo($ch); 
curl_close($ch); 

$html = str_get_html("$return");

CURLOPT_ENCODING is so that the response comes back (accepted as) gzipped data - the server settings (ob_start("ob_gzhandler") or php_ini..) tell the server to OUTPUT gzipped data. CURLOPT_ENCODING是响应返回 (接受为)gzip压缩数据 - 服务器设置(ob_start(“ob_gzhandler”)或php_ini ..)告诉服务器输出gzip压缩数据。

Just like if you went to that page with a browser that didn't support gzip. 就像你使用不支持gzip的浏览器访问该页面一样。 To accept gzip data, you have to use curl so you can make that distinction. 接受 gzip数据,您必须使用curl,以便进行区分。

Just add the following line at the very top of the PHP script that outputs the data: 只需在输出数据的PHP脚本的最顶部添加以下行:

  ob_start("ob_gzhandler");

Reference 参考

-------Update-------- ------- --------更新

You can also try to enable gzip Compresion sitewide via a .htaccess file. 您还可以尝试通过.htaccess文件在全站点启用gzip Compresion。 Something like This should gzip your sites content but images: 像这样的东西应该gzip你的网站内容,但图像:

# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Don't compress images
#SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM