我每30分钟通过cron运行一个PHP脚本,它会在同一台服务器上解析并保存我网站的某些页面。我需要将脚本作为Firefox或chrome useragent运行,因为解析后的页面对CSS3样式有一些接口依赖。
我在我的剧本中试过这个:
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13");
但Firefox或Chrome相关的样式表不会加载它。我尝试了双引号和单引号。
我的问题是:是否可以通过服务器而不是浏览器来欺骗脚本以及如何使用。
注意:我知道界面的浏览器依赖性很差。但我想知道这是否可能。
我的脚本在服务器上运行站点地图,并在站点地图中创建页面的html缓存。它不需要执行任何js或css文件。唯一的事情是欺骗useragent,以便生成的缓存包含标题中包含的该浏览器的额外js和css文件。
你可以认为我正在为所有浏览器类型生成缓存文件 - IE,webkits和firefox。因此,我可以根据用户的浏览器向用户提供缓存文件。此时我向所有用户提供相同的文件,即没有额外的css文件。
我想我需要将css文件硬编码到我的页面中,以便它始终包含在缓存中(不兼容的浏览器不会显示任何更改,但它只会增加文件的头文件)。不管怎样,谢谢
答案 0 :(得分:0)
当你通过Cron运行php脚本时,我们的想法是它是一个脚本,而不是一个被请求的网页。即使你可以欺骗使用者,css和javascript也不会像在真正的网络浏览器中运行一样。 cron的意思是运行脚本,原始脚本,例如文件操作。
答案 1 :(得分:0)
嗯,首先我会查看您的用户代理标识。我认为这是不必要的复杂,只需尝试Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
。
如果这不起作用,那么您可以尝试使用exec()
作为shell命令执行curl调用。在这种情况下,您可能会遇到页面未真正呈现的问题。您可以使用X virtual framebuffer解决此问题。这将使您的页面在内存中呈现,而不显示任何屏幕输出 - ergo的行为类似于浏览器。
你可以这样做:
exec("xvfb-run curl [...]");
答案 2 :(得分:0)
您还可以使用ini_set('user_agent','your-user-agent')设置用户代理; 也许这会对你有帮助。