我已经下载了browscap 2.0版库并添加了此代码
$browscap = new Browscap('/tmp');
$browscap->doAutoUpdate = false;
$current_browser = $browscap->getBrowser();
问题在于,当我尝试获取有关当前浏览器的信息时,我会发生错误
允许内存大小268435456个字节耗尽(试图分配281个字节)....在第677行的phpbrowscap-2.0 / src / phpbrowscap / Browscap.php
我不想增加内存,因为我的代码会在每个加载页面上执行,因此我会失去性能。 所以我尝试调试代码,我注意到他正在检查很多浏览器。 $ tmp_user_agents中有很多值,他循环遍历此变量。
无论如何都可以在不花太多时间的情况下获得此库的功能吗?或者我错过了它的工作原理
答案 0 :(得分:0)
Browscap有一个非常庞大的数据库,并且在每个单页命中加载(并迭代它)当然不是非常有效。 " ini"我在他们网站上下载的文件有7.5MB! PHP的内存耗尽很容易理解。在这种情况下,我不建议使用此库。
我只检查了他们的网站和资源文件 - 而不是代码 - 但似乎他们只是查找用户代理字符串来验证浏览器(顺便说一下这很容易伪造)。
你有没有看过这个PHP函数:http://php.net/manual/de/function.get-browser.php 足够的输出满足您的需求?
答案 1 :(得分:0)
我知道派对有点晚了,但最有效的方法就是每天在服务器上运行一次cron作业来更新缓存,然后在你的代码中使它更好地更新缓存时叫做browscap。
在您的网站页面中,运行以下代码:
$browscap = new Browscap($cacheDir);
$browscap->doAutoUpdate = false;
$current_browser = $browscap->getBrowser();
在你的服务器上,创建这个脚本(我称之为updateBrowscap.php),我的文件夹与browscap.php在同一个文件夹中,而cache文件夹是它的子文件夹。
ini_set('memory_limit','1024M'); // allow 1GB for this script
set_time_limit(300); // change to 5 minutes for this script
// CREATE THIS CRON SCRIPT TO RUN ONCE PER DAY
// /usr/bin/php -q [full-path-to-this-file]/updateBrowscap.php > [full-path-to-this-file]/backup.log 2>&1
// Loads the class
require 'Browscap.php';
// The Browscap class is in the phpbrowscap namespace, so import it
use phpbrowscap\Browscap;
echo 'started: '.date("d-m-Y H:i:s", time()).PHP_EOL;
$path = dirname(__FILE__).'/cache';
$bc = new Browscap($path);
$bc->updateCache();
echo 'finished: '.date("d-m-Y H:i:s", time()).PHP_EOL;
我的脚本不会使用共享主机允许我分配的最大512MB运行,因此我已在此脚本中手动将其设置为1024MB。
一旦我解决了内存问题,我就遇到了超时问题,所以我将这个脚本从30秒增加到5分钟。
我每天凌晨3点左右跑一次。