Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Browscap中已耗尽的允许内存大小_Php_Browscap - Fatal编程技术网

Php Browscap中已耗尽的允许内存大小

Php Browscap中已耗尽的允许内存大小,php,browscap,Php,Browscap,我已经下载了browscap 2.0版库并添加了此代码 $browscap = new Browscap('/tmp'); $browscap->doAutoUpdate = false; $current_browser = $browscap->getBrowser(); 问题是,当我试图获取有关当前浏览器的信息时,我会出错 第677行的…phpbrowscap-2.0/src/phpbrowscap/Browscap.php中允许的内存大小为268435456字节(尝试分配2

我已经下载了browscap 2.0版库并添加了此代码

$browscap = new Browscap('/tmp');
$browscap->doAutoUpdate = false;
$current_browser = $browscap->getBrowser();
问题是,当我试图获取有关当前浏览器的信息时,我会出错

第677行的…phpbrowscap-2.0/src/phpbrowscap/Browscap.php中允许的内存大小为268435456字节(尝试分配281字节)

我不想增加内存,因为我的代码会在每个加载页上执行,因此会丢失性能。 所以我试着调试代码,我注意到他正在检查很多浏览器。$tmp_user_代理中有很多值,他正在循环这个变量


是否有任何方法可以在不花费太多时间的情况下获得此库的功能?或者我在它的工作原理上遗漏了什么呢?Browscap有一个非常非常庞大的数据库,在每一个点击的页面上加载(并对其进行迭代)当然不是非常有效。我在他们网站上下载的“ini”文件有7.5MB!!!PHP内存不足很容易理解。在这种情况下,我不建议使用此库

我只检查了他们的网站和资源文件——而不是代码——但他们似乎只查找用户代理字符串来验证浏览器(顺便说一句,这很容易伪造)

您是否看过此PHP函数:
有足够的输出满足您的需要吗?

我知道这对聚会来说有点晚了,但最有效的使用方法是每天在服务器上运行一次cron作业来更新缓存,然后在代码中使其在调用browscap时不更新缓存

在站点页面中,运行以下代码:

$browscap = new Browscap($cacheDir);
$browscap->doAutoUpdate = false;
$current_browser = $browscap->getBrowser();
在您的服务器上,创建这个脚本(我称之为updateBrowscap.php),我的脚本与browscap.php位于同一文件夹中,缓存文件夹是它的一个子文件夹

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点运行一次。

我只是想知道浏览器是否能够接受cookies,但是这个函数的问题是我需要对php.ini进行修改,而我没有访问权限。您可以尝试
ini\u set()
或类似的方法:“browscap”只能在系统php.ini和/或httpd.conf中更改。我无法在脚本级别设置它。至于您的其他建议,我想避免重新加载页面,但我想我没有其他选择。您可以使用JavaScript验证该功能。这不会导致重新加载,由客户端执行。当然,这不是很安全,因为人们可以禁用JavaScript。但是您可以使用JavaScript进行验证,如果这不起作用,您可以尝试重新加载php。因此,对于大多数用户来说,您的脚本可以正常工作,而那些“超级安全”的非JavaScript怪胎需要配合重新加载。