小编Nin*_*Nin的帖子

回放内容有时需要很长时间

我有一个脚本,用一个字符串($ content)构建我的网页,然后将其回显给用户.

我的脚本看起来像这样:

$time1= microtime(true);
$content = create_content();
$content_time=(microtime(true)-$time1)

$time = microtime(true);
echo $content;
$echo_time = (microtime(true)-$time);
Run Code Online (Sandbox Code Playgroud)

现在$ content_time总是低于0.5s,所以没问题.然而,每天几次$ echo_time远远超过一秒,甚至可以达到15秒.内容不是很大,大约10-20kb,发生这种情况的时间是完全随机的,所以它不是在忙碌的时候,甚至发生在半夜.

有人知道那可能是什么吗?

编辑该站点托管在(远程)专用服务器上,仅托管此站点.有一个数据库涉及,但就像我说$ content_time远低于1秒,所以这个功能的作用不能是延迟.

当我的网站时间超过一定值(比如5s)时,我会记录下来.甚至Googlebots似乎有时会遇到这些问题,所以我认为他们不会使用拨号连接:)

php performance

12
推荐指数
2
解决办法
1478
查看次数

具有PHP QuickHash的大型阵列经验

有没有人有PHP QuickHash的经验(http://php.net/manual/en/book.quickhash.php)?

一些早期测试显示大型阵列的内存使用量有很大改进.一个包含1M项目的数组需要226mb一个普通数组,而只有41mb使用QuickHash,速度大致相同.

但是我几乎找不到人们在生产环境中实际使用它的故事,所以我很想知道是否有任何理由不在生产中使用它.

php memory arrays performance

9
推荐指数
1
解决办法
398
查看次数

从mysql中获取许多分组值

我有这样的表结构:

CREATE TABLE `test` (
  `a` tinyint(3) unsigned DEFAULT 0,
  `b` tinyint(3) unsigned DEFAULT 0,
   `c` tinyint(3) unsigned DEFAULT 0,
  `d` tinyint(3) unsigned DEFAULT 0,
  `e` tinyint(3) unsigned DEFAULT 0
  );
Run Code Online (Sandbox Code Playgroud)

这有大约30列,其中一些列的值为0-200(a,b),有些列只有5个值(0,1,2,3,4)(列cd).有aprox.表中有120k行.

要显示每行的项目数,我对每列使用查询:

select a, count(*) FROM test group by a;
select b, count(*) FROM test group by b;
select c, count(*) FROM test group by c;
select d, count(*) FROM test group by d;
select e, count(*) FROM test group by e;
Run Code Online (Sandbox Code Playgroud)

这样做的问题是它将触发30个查询(每列一个)并且每次基本上都会遍历同一组数据.

有一个更好的方法吗?

我已尝试使用GROUP BY WITH ROLLUP但这导致了一个庞大的结果集,它比每个单独的查询处理得慢.

您可以在SQLfiddle上查看选择的数据: …

mysql performance group-by

8
推荐指数
1
解决办法
256
查看次数

MySQL默认顺序取决于WHERE

可能重复:
MySQL中的默认排序 - 排序(ALTER TABLE ... ORDER BY ...;)

我有这样一张桌子:

CREATE TABLE IF NOT EXISTS `table_test` (
  `id` mediumint(8) unsigned NOT NULL,
  `country` enum('AF','AX','AL') DEFAULT NULL,
  `number` tinyint(3) unsigned DEFAULT NULL,
  `sort_order` double unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `country` (`country`),
  KEY `id` (`id`,`country`)
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)

我有一个表,我更改了默认顺序,如:

ALTER TABLE test_table ORDER BY sort_order ASC;
Run Code Online (Sandbox Code Playgroud)

此表永远不会更新,并且在其生命周期中不会删除或添加任何记录.如果我使用以下查询,这一切似乎都有效:

SELECT * FROM test_table LIMIT 10
Run Code Online (Sandbox Code Playgroud)

它以正确的顺序返回10条记录.

即使我使用:

SELECT * FROM test_table WHERE num=3
Run Code Online (Sandbox Code Playgroud)

它以正确的顺序返回结果.

但如果我这样做

SELECT * FROM test_table …
Run Code Online (Sandbox Code Playgroud)

mysql

6
推荐指数
1
解决办法
4266
查看次数

在 Symfony4 中注册自定义 Doctrine 类型

所以我有这个自定义的 Dotrine 类型

命名空间 App\Doctrine\Types;

使用 Doctrine\DBAL\Platforms\AbstractPlatform;使用 Doctrine\DBAL\Types\TextType;

class MyType extends TextType
{
   private $prefix='';

   public function getName()
   {
      return 'my_type';
   }
   public function setPrefix(string $prefix)
   {
      $this->prefix=$prefix;
   }
}
Run Code Online (Sandbox Code Playgroud)

我在 config/packages/doctrine.yml 中注册:

doctrine:
    dbal:
        types:
            my_type: App\Doctrine\Types\MyType
Run Code Online (Sandbox Code Playgroud)

然后在 Kernel boot() 中我尝试向此类型添加一些参数:

public function boot() {
   parent::boot();

   $myType=Type::getType('my_type');
   $myType->setPrefix('abc');
}
Run Code Online (Sandbox Code Playgroud)

我第一次运行该应用程序时,效果非常好。前缀是为类型设置的,可以在整个应用程序中使用。但是,第二次我遇到异常:

请求未知的列类型“加密文本”。您使用的任何 Doctrine 类型都必须使用 \Doctrine\DBAL\Types\Type::addType() 注册。您可以使用 \Doctrine\DBAL\Types\Type::getTypesMap() 获取所有已知类型的列表。如果在数据库自省期间发生此错误,那么您可能忘记了为 Doctrine 类型注册所有数据库类型。使用 AbstractPlatform#registerDoctrineTypeMapping() 或让您的自定义类型实现 Type#getMappedDatabaseTypes()。如果类型名称为空,则可能是缓存有问题或忘记了一些映射信息。

然后我将 boot() 更改为:

    public function boot() {
       parent::boot();
       if (!Type::hasType('my_type')) {
           Type::addType('my_type', 'App\Doctrine\Types\MyType');
       }
       $myType=Type::getType('my_type');
       $myType->setPrefix('abc');
   } …
Run Code Online (Sandbox Code Playgroud)

php doctrine symfony doctrine-orm symfony4

6
推荐指数
1
解决办法
9632
查看次数

替换字符串中的重复字符串

我正在尝试在字符串中查找(并替换)重复的字符串.

我的字符串可能如下所示:

Lorem ipsum dolor sit amet sit amet sit amet sit nostrud exercitation amit sit ullamco laboris nisi ut aliquip ex ea commodo consequat.

这应该成为:

Lorem ipsum dolor sit amet sit nostrud exercitation amit sit ullamco laboris nisi ut aliquip ex ea commodo consequat.

请注意,由于没有重复,因此不会删除amit sit.

或者字符串可以是这样的:

Lorem ipsum dolor sit amet()sit amet()sit amet()sit nostrud exercitation ullamco laboris nisi ut aliquip aliquip ex ea commodo consequat.

应成为:

Lorem ipsum dolor sit amet()sit nostrud exercitation ullamco laboris nisi …

php regex perl string-search

5
推荐指数
1
解决办法
2199
查看次数

robots.txt 中用户代理的顺序

我的 robots.txt 看起来像这样:

User-agent: *
Disallow: /admin
Disallow: /test

User-Agent: Googlebot
Disallow: /maps
Run Code Online (Sandbox Code Playgroud)

现在 Google 会忽略用户代理 * 部分,只遵守特定的 Googlebot 指令 (/maps)。这是正常行为吗?不应该遵守 useragent * 指令(/admin、/test)吗?

必须为每个用户代理添加每一行似乎很奇怪?

seo robots.txt

5
推荐指数
1
解决办法
1421
查看次数

用regexp模拟php数组语言构造或解析?

从外部来源我得到的字符串就像

array(1,2,3)
Run Code Online (Sandbox Code Playgroud)

但也有更大的阵列

array("a", "b", "c", array("1", "2", array("A", "B")), array("3", "4"), "d")
Run Code Online (Sandbox Code Playgroud)

我需要它们是php中的实际数组.我知道我可以使用eval,但由于它是不受信任的来源,我宁愿不这样做.我也无法控制外部资源.

我应该为此使用一些正则表达式(如果是这样,是什么)还是有其他方法?

php regex parsing

4
推荐指数
2
解决办法
1151
查看次数