我libevent-dev在Debian 7 64bit桌面上安装了这个库:
$ sudo aptitude install -y libevent-dev
Run Code Online (Sandbox Code Playgroud)
然后我安装了PECL库
$ pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version State
libevent 0.1.0 beta
Run Code Online (Sandbox Code Playgroud)
我已经重新启动了PHP和操作系统,但PHP没有将libevent列为已安装的ext,phpinfo()并且"PHP Fatal error: Call to undefined function event_base_new()"当我尝试使用它时我得到了.
你如何安装Libevent?
我正在将字符串插入数据库,但由于无效的字符串字节序列而出现MySQL 1366错误。
2016/11/04 13:33:40 Error 1366: Incorrect string value: '\x89PNG\x0D\x0A...' for column 'text' at row 1
2016/11/04 13:33:56 Error 1366: Incorrect string value: '\xB6\xEB\xE4\x0B\x92\xEE...' for column 'text' at row 1
2016/11/04 13:33:56 Error 1366: Incorrect string value: '\xFF\xD8\xFF\xE0\x00\x10...' for column 'text' at row 1
2016/11/04 13:34:35 Error 1366: Incorrect string value: '\x9C]\x91\xD1k\xC2...' for column 'text' at row 1
Run Code Online (Sandbox Code Playgroud)
我的MySQL配置设置为utf8mb4,如下所示:
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 …Run Code Online (Sandbox Code Playgroud) 在 MySQL 中,您可以创建要在查询中使用的索引,以防止全表扫描。只能使用一个索引。
此外,为了使用索引,索引的字段不能通过函数(即DATE(), MONTH(), YEAR())运行,因为这样查询优化器将不知道结果是什么,因此不能使用索引并将回退到而是进行完整(或部分)表扫描。
假设您想要运行一个按日/月/季度/年 ( GROUP BY date(created_at)) 对条目进行分组的报告,您如何设计一个查询来在仍然使用索引的情况下执行此操作?
示例表:
CREATE TABLE `datesort` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`value` int(11) NOT NULL,
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `c_v` (`created_at`,`value`)
) ENGINE=InnoDB;
-- Problem Query
EXPLAIN SELECT COUNT(*), `value`, created_at
FROM datesort
WHERE created_at > NOW() - INTERVAL 1 DAY
GROUP BY date(created_at), value;
-- Using where; Using index; Using temporary; Using filesort
vs
EXPLAIN SELECT COUNT(*), `value`, created_at
FROM …Run Code Online (Sandbox Code Playgroud) 我相信在正确编码的系统中 - 错误(作为错误或异常)是不可能的(除了DB/memcached服务器关闭导致查询失败).我们的代码不应该依赖任何假设才能正常工作,并且应该尽可能地作为防弹.
但是,为了确保我们的系统以最友好的方式处理问题,我们必须构建并实施某种"捕获系统",以确保如果出现任何问题,我们的服务器人员和最终用户都会照顾好.
为此,PHP提供了两种解决方案 - 错误和异常.错误由5个值组成,而异常由包含在对象中的5个值组成.两者都允许在构建应用程序时非常有用的回溯.
5个值是$ error_code,$ error_message,$ file,$ line,$ context
通常,在我们努力进行适当的OOP编程时,默认选择始终是追求对象 - 但在这种情况下,我不确定它们实际上是多么有益.通过使用异常,浪费了额外的内存以满足在对象中包装值的需要(这通常还需要包含异常类的额外文件).此外,您必须在TRY/CATCH {}块中包装您认为可能失败的任何代码.这使得错误处理方法对人为错误开放,因为开发人员可能无法解决故障点.为了安全防范这种情况,您可以使用set_exception_handler,它将传递任何未捕获的异常.关于异常处理程序的坏处是执行将在调用exception_handler之后停止 - 因此如果不在try/catch块中捕获,则不存在可恢复/忽略的异常.
另一方面,错误总是全局的,可以由set_error_handler设置的任何函数/类处理.这消除了对额外异常类,对象内存或try/catch代码行的需要.与异常一样,错误也伴随着构建错误代码(与异常不同),您可以使用它来继续脚本执行,以解决轻微或不重要的脚本问题.此外,大多数PHP函数都会触发错误,因此您不会违反语言流程.
因此,无论如何您必须支持错误处理(对PHP语言做),浪费额外代码和内存以及实现异常的目的是什么?我们只是盲目地这样做是因为它是对象形式的错误,还是应用程序设计中存在真正的好处,而正常错误无法承受我们?
我想要使我的网站的字符串处理符合 UTF-8 支持其他语言。似乎最好的方法是放弃所有标准字符串函数。
所以我有两个选择,我可以mbstring.func_overload在 php.ini 中设置选项,或者我可以返回我的代码并将所有函数替换为mb_*. 我认为第二个选项对于使用我的代码的人来说会更容易,因为他们不必更改他们的服务器配置。(如果他们能的话!)
PHP 6 何时发布呢?这对我的选择有什么影响吗,因为它将支持正确的多字节处理。
PHP对多字节字符串(非ASCII字符)有很多麻烦.假设每个字符都是一个字节,构建整个语言.为了解决这个问题,他们发明了mb_strings函数,您可以使用这些函数代替标准函数(可以正常工作).
strlen($str);
mb_strlen($str); // correct
Run Code Online (Sandbox Code Playgroud)
但是,这真的很痛苦,因为您必须验证您在线下载/查找的代码是使用这些函数还是启用mb_string_overload那些可能会破坏实际需要char = byte计算的代码.
Ruby会分享这个问题吗?
我不是iPhone开发人员,但我开始的项目是基于向iPhone用户提供数据的PHP后端服务器,我想知道从哪里开始使用会话/安全性.
使用浏览器,我只需在登录时传递一个cookie(包含会话ID).
但是,我想知道iPhone是否与众不同.iPhone应用程序是否可以访问存储空间以获取cookie /令牌等内容?他们需要注意的任何事情是否使iPhone应用程序用户代理特别?
假设你有一个带有嵌套标签的DOM树,我想通过删除重复来清理DOM对象.但是,这仅适用于标记仅具有相同类型的单个子标记的情况.例如,
修复<div><div>1</div></div>而不是<div><div>1</div><div>2</div></div>.
我试图弄清楚如何使用PHP的DOM扩展来做到这一点.下面是起始代码,我正在寻找帮助,找出所需的逻辑.
<?php
libxml_use_internal_errors(TRUE);
$html = '<div><div><div><p>Some text here</p></div></div></div>';
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadHTML($html);
function dom_remove_duplicate_nodes($node)
{
var_dump($node);
if($node->hasChildNodes())
{
for($i = 0; $i < $node->childNodes->length; $i++)
{
$child = $node->childNodes->item($i);
dom_remove_duplicate_nodes($child);
}
}
else
{
// Process here?
}
}
dom_remove_duplicate_nodes($dom);
Run Code Online (Sandbox Code Playgroud)
我收集了一些辅助函数,这些函数可以更容易地处理像JavaScript这样的DOM节点.
function DOM_delete_node($node)
{
DOM_delete_children($node);
return $node->parentNode->removeChild($node);
}
function DOM_delete_children($node)
{
while (isset($node->firstChild))
{
DOM_delete_children($node->firstChild);
$node->removeChild($node->firstChild);
}
}
function DOM_dump_child_nodes($node)
{
$output = …Run Code Online (Sandbox Code Playgroud) 我想在textarea中允许使用literal TAB(\t)字符.但是,TAB关键循环到下一个表单元素.由于这是预期的,我不想打破这个标准.同样,CTRL + TAB循环浏览器选项卡.是否有一个推荐的键组合,允许人们进入TABtextarea 实际内部?
例如,CTRL + SPACE似乎没有做任何事情,可以使用吗?
另外,我该如何正确地听这些组合?
我试图用另一个标签替换一组标签,但由于某种原因,我似乎无法循环getElementsByTagName()返回的所有标签.
在这个例子中,第二td,第一行中跳过了,即使它在展示了一些原因console.log(tds).
我的代码出了什么问题?