小编Joc*_*ung的帖子

gzcompress如何工作?

我想知道为什么我需要在使用gzcompress()之后切断最后4个字符.

这是我的代码:

header("Content-Encoding: gzip");
echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
$index = $smarty->fetch("design/templates/main.htm") ."\n<!-- Compressed by gzip -->";
$this->content_size = strlen($index);
$this->content_crc = crc32($index);
$index = gzcompress($index, 9);
$index = substr($index, 0, strlen($index) - 4); // Why cut off ??
echo $index;
echo pack('V', $this->content_crc) . pack('V', $this->content_size);
Run Code Online (Sandbox Code Playgroud)

当我没有删除最后4个字符时,源代码如下:

[...]
<!-- Compressed by gzip -->N
Run Code Online (Sandbox Code Playgroud)

当我把它们剪下来时,它上面写着:

[...]
<!-- Compressed by gzip -->
Run Code Online (Sandbox Code Playgroud)

我只能在Chromes Code检查器中看到额外的N(不是在Firefox中而是在IEs源中).但是在代码的末尾会有四个附加字符.

任何人都可以解释我,为什么我需要切掉4个字符?

php compression gzip

4
推荐指数
1
解决办法
4302
查看次数

包含/要求默默地发挥作用

在我的代码中,我有一个include语句,它从外部URL加载代码,如下所示:

include 'http://123.123.123.123:8080/servlet/statemodel'
Run Code Online (Sandbox Code Playgroud)

问题是,servlet需要大约35秒才能加载.

如果我http://123.123.123.123:8080/servlet/statemodel在浏览器中访问,一切正常(我修改了IP,因为它无法通过互联网访问).

但是,使用iclude语句会PHP尝试大约20秒来包含该文件,然后继续使用include语句之后的代码.

没有错误消息.使用require也不会带来任何错误消息.

包括超时吗?为什么没有错误信息?

也许tomcat实际上发送数据(http-header),但PHP只等待大约20秒才能跟随某些内容?

我可以选择更改此超时吗?

php tomcat http include

3
推荐指数
1
解决办法
961
查看次数

只在一个查询中获取没有ORDER BY RAND()的RAND()行

在MySQL中使用RAND()从一个巨大的表中获取一个随机行非常慢:

SELECT quote FROM quotes ORDER BY RAND() LIMIT 1
Run Code Online (Sandbox Code Playgroud)

这是一篇关于这个问题的文章以及为什么会这样.

他们的解决方案是使用两个查询:

SELECT COUNT(*) AS cnt FROM quotes

- Use result to generate a number between 0 and COUNT(*)

SELECT quote FROM quotes LIMIT $generated_number, 1
Run Code Online (Sandbox Code Playgroud)

我想知道,这是否只能在一个查询中实现.

所以我的方法是:

SELECT * FROM quotes
LIMIT (
  ROUND(
    (SELECT COUNT(*) FROM quotes) * RAND()
  )
), 1
Run Code Online (Sandbox Code Playgroud)

但它接缝MySQL不允许任何逻辑限制.虽然我找不到关于这个主题的任何信息,但这是否属实.

所以我的问题:

  1. 如何在LIMIT中使用RAND()?
  2. 你知道有任何其他方法只用一个查询来解决这个问题吗?

mysql random query-optimization

2
推荐指数
1
解决办法
942
查看次数

IE查询参数中的UTF-8编码问题

我的测试代码有这个URL:http://www.gruppenunterkuenfte.de/encodingtest.php?q =köln

它将查询参数q传递给SQL查询.

奇怪的是,如果查询来自IE,我必须这样utf8_encode()做.如果它来自Chrome或Firefox,我可能不会.

mb_detect_encoding()总是说查询是UTF-8(IE和其他).但是查询itselfe只能在其中一个浏览器中使用.

这是我上面的URL中的测试代码:

<?php
header('Content-Type: text/html; charset=utf-8');

$config = parse_ini_file("inc/base/config.php", 1);
$link = mysqli_connect($config["database"]["server"], $config["database"]["user"], $config["database"]["passwd"]);
mysqli_select_db($link, $config["database"]["database"]);
mysqli_query($link, "SET NAMES utf8;");

echo 'mb_detect_encoding: '. mb_detect_encoding($_GET['q']) .'<br>';

echo 'Without utf8_encode():<br>';

$res = mysqli_query($link, 'SELECT SQL_CALC_FOUND_ROWS ort FROM BRDOrte
  WHERE ort LIKE \''. addslashes($_GET['q']) .'%\'
  GROUP BY BINARY ort
  ORDER BY BINARY ort
  LIMIT 5
  ');
while ($row = mysqli_fetch_array($res)) print_r($row);


echo '<br>With utf8_encode():<br>';

$res = mysqli_query($link, 'SELECT SQL_CALC_FOUND_ROWS ort FROM BRDOrte …
Run Code Online (Sandbox Code Playgroud)

php mysql encoding internet-explorer utf-8

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

如果将数组定义为键值对,如何检查?

我有一个函数,它将一个数组作为参数.

function addSearch($arr) { }
Run Code Online (Sandbox Code Playgroud)

如何检查该函数是否仅使用值定义了数组

array('option1', 'option2', ...);
Run Code Online (Sandbox Code Playgroud)

或作为键值对:

array('option1' => 'First Option', 'option2' => 'Second Option', ...)
Run Code Online (Sandbox Code Playgroud)

我喜欢的是,您既可以将搜索文件与标签一起传递,也可以只传递搜索字段,在这种情况下,字段名称也将成为标签.

所以我需要更改一个只有值的数组$array['option1'] = 'option1';

任何想法如何实现这一点?

php arrays

0
推荐指数
1
解决办法
730
查看次数