PHP有两个与超时相关的选项:CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT.
PHP站点上的描述有点模糊.有什么不同?
要使用真实世界的示例:假设您通过cURL将GET变量发送到URL并且您希望接收XML,则CURLOPT_CONNECTTIMEOUT与连接到服务器CURLOPT_TIMEOUT所花费的最长时间和最长时间有关可以将XML发回去吗?
我总是觉得差异,简单来说,PHP/MySQL缓冲和无缓冲查询之间的区别是缓冲(默认)将所有数据加载到结果集变量中然后你可以开始使用它们而无缓冲加载一行一时间
假设你跑了SELECT * FROM sometable然后做了$result = $db->query($query);,$result将包含所有行和补充信息,如行数.因此,如果你在一个100MB的数据库上做到这一点,$result那么如果那里没有索引,你可能会占用大约100MB.
但是,我遇到了这个SO溢出问题部分,其中提到了缓冲查询:
[]结果将包含一些依赖于实现的行缓冲区.它可能是100行或更多或更少.每行返回所有列; 当您最终获取更多行时,客户端将向服务器请求更多行.这可能是在客户端耗尽或可能是先发制人的情况下.
这是对的,还有一些缓冲正在进行吗?如果是这种情况,在处理大型结果集时,我们通常不需要担心PHP内存不足吗?这很奇怪,因为我在40MB测试表上运行了一些测试缓冲查询,PHP总是报告大约5MB的峰值内存使用量.
最后,根据经验,你什么时候选择无缓冲的缓冲?你能举个例子吗?
谢谢.
(顺便说一句,我使用的是MySQLi.我认为校长是一样的).
编辑:我现在读了更多,更加困惑.在http://php.net/manual/en/mysqli.quickstart.statements.php上说
在After语句上,可以立即检索执行结果,以便客户端缓冲或逐行读取.客户端结果集缓冲允许服务器尽可能早地释放与语句结果相关联的资源.一般来说,客户端是慢速消耗结果集.因此,建议使用缓冲结果集.mysqli_query()结合了语句执行和结果集缓冲.
PHP应用程序可以通过缓冲结果自由导航.导航很快,因为结果集保存在客户端内存中.请记住,客户端扩展通常比扩展服务器更容易.
And on http://php.net/manual/en/mysqli-result.fetch-all.php it says:
As mysqli_fetch_all() returns all the rows as an array in a single step, it may consume more memory than some similar functions such as mysqli_fetch_array(), which only returns one row at a time from the result set. Further, if you need to iterate over …
首先,我得到了人们想要使用存储过程,以便他们重用查询并进行转义处理.但是,我看过许多开发人员说mysqli_real_escape_string不能100%阻止SQL注入.有人可以提供一个例子吗?
从我关于这个问题的知识有限,我会说,mysqli_real_escape_string会永远被罚款字符串而是数值你可能会被抓出来,除非你核对一下电话号码是一个整数,浮点,双等.
编辑:我忘了添加一些关键的东西:假设字符集是UTF8并且相应地调用了mysqli_set_charset.我见过的唯一一次注射依赖于一些charsets(其中没有一个是UTF8).
根据PHP网站,它执行此操作:
encoding是用于HTTP输入字符编码转换的字符编码名称,HTTP输出字符编码转换,以及由mbstring模块定义的字符串函数的默认字符编码.您应该注意到内部编码与多字节正则表达式完全不同.
有人可以用更简单的术语解释一下吗?
我的猜测是
如果第2点是正确的,您需要做:
ini_set('default_charset', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,那就意味着:
mb_internal_encoding('UTF-8')
Run Code Online (Sandbox Code Playgroud)
你不需要这样做:
mb_strtolower($str, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
只是:
mb_strtolower($str);
Run Code Online (Sandbox Code Playgroud)
我确实读过另一个SO帖子,mb_strtolower($ str)不应该被信任,你需要为每个多字节字符串函数设置编码.这是真的?
在 CKEditor 中,配置中有allowedContent和选项。extraAllowedContent我知道如何allowedContent让您说出 ACF 将留下哪些标签和属性,但为什么会出现allowedContent和extraAllowedContent?他们不做同样的事情吗?
我发现的一件事是,当想要允许 iframe 时,它似乎只有在输入 ; 时才iframe[*]有效extraAllowedContent。如果你把它放进去,它就不起作用allowedContent。
为什么?有什么不同?
我想在数据库表中使用PHP生成的唯一ID,该表可能永远不会超过10,000条记录.我不希望创建时间可见或使用纯数值,所以我使用:
sha1(uniqid(mt_rand(), true))
Run Code Online (Sandbox Code Playgroud)
使用哈希作为唯一ID是错误的吗?不是所有的哈希都会导致碰撞,或者是否有机会如此遥远以至于在这种情况下不应该考虑它们?
还有一点:如果要散列的字符数小于sha1散列中的字符数,它是否总是唯一的?
我看到很多人说你应该总是使用预准备语句进行数据库查询.但是,PHP文档说:
每个准备好的语句占用服务器资源.声明应在使用后立即明确关闭.如果没有显式完成,则在PHP释放语句句柄时将关闭该语句.
使用预准备语句并不总是执行语句的最有效方式.仅执行一次的预准备语句会导致客户端 - 服务器往返次数超过未准备好的语句.
来自http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
鉴于上述情况,如果您只打算使用一次查询,那么最好不要使用预准备语句吗?
我搜索了SO,我知道有很多"记住我"的问题,但我找不到一个专门用于生成安全令牌的Blowfish.
我正在实现一个登录系统,使用基于cookie的"记住我"功能,我读过的所有教程看起来都不安全(例如,根据时间只是一个未加盐的md5哈希)或者看起来过于复杂.
我不是为银行或类似的东西建立网站,而只是想要一个合理的安全级别.
我建议的系统是简单地为用户名创建一个128 char随机字符串,为登录令牌创建第二个128 char字符串.原始字符串将存储在cookie中,未加保证的sha1'd版本将存入数据库中其用户帐户的行中.
我想我甚至可以在每个页面加载时重新生成字符串.
对我来说这提供了不错的安全性(我认为!)因为:
我的问题是:
非常感谢.
如果您拿着一张桌子,简单地将存储引擎引擎从MyISAM更改为InnoDb,是否都将WHERE MATCH (col1,col2,col3...) AGAINST (expr)返回与MyISAM下完全相同的结果?如果没有,有什么区别?
我的意思是在全文搜索方面仅存在差异,仅此而已。这两个存储引擎显然还有其他巨大差异。