我想知道为什么我需要在使用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个字符?
在我的代码中,我有一个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秒才能跟随某些内容?
我可以选择更改此超时吗?
在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不允许任何逻辑限制.虽然我找不到关于这个主题的任何信息,但这是否属实.
所以我的问题:
我的测试代码有这个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) 我有一个函数,它将一个数组作为参数.
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';
任何想法如何实现这一点?