Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 优化MySqli请求_Php_Mysql - Fatal编程技术网

Php 优化MySqli请求

Php 优化MySqli请求,php,mysql,Php,Mysql,我正在建立一个像控制台一样工作的网站。我有一个状态脚本,可以检查页面是否处于脱机状态,或者您是否被列入黑名单/白名单。我通过在数据库中查找IP来实现这一点。然后,我使用一个开关来引导用户。我使用javaScript重定向,因为该站点使用ajax,我无法获取标题“Location:xxx”;下次再处理这个问题 当我运行带有状态页面的站点时,它的加载速度是原来的两倍,而且每次用户使用命令时页面都会加载这个脚本,这对我没有帮助 您对如何优化它以更快地加载有什么建议吗?我对所有的想法都持开放态度。谢谢你

我正在建立一个像控制台一样工作的网站。我有一个状态脚本,可以检查页面是否处于脱机状态,或者您是否被列入黑名单/白名单。我通过在数据库中查找IP来实现这一点。然后,我使用一个开关来引导用户。我使用javaScript重定向,因为该站点使用ajax,我无法获取标题“Location:xxx”;下次再处理这个问题

当我运行带有状态页面的站点时,它的加载速度是原来的两倍,而且每次用户使用命令时页面都会加载这个脚本,这对我没有帮助

您对如何优化它以更快地加载有什么建议吗?我对所有的想法都持开放态度。谢谢你抽出时间

如果空$\u服务器['HTTP\u客户端\u IP']{ $ip=$\服务器['HTTP\客户端\ ip']; }埃尔塞夫!空的$\u服务器['HTTP\u X\u FORWARDED\u']{ $ip=$\服务器['HTTP\u X\u FORWARDED\u']; }否则{ $ip=$\u服务器['REMOTE\u ADDR']; }; $conn=新的MySQLi'localhost'、'xxx'、'xxx'、'xxx'; $statusRank=; $sql=从全局中选择enable,其中enable='1'和setting='frontend'; $query=$conn->query$sql或die$conn->error; ifmysqli\u num\u rows$query{ $statusRank=离线状态; } $sql=从ip='$ip'的黑名单中选择ip; $query=$conn->query$sql或die$conn->error; ifmysqli\u num\u rows$query{ $statusRank=黑名单; } $sql=从白名单中选择ip,其中ip='$ip'; $query=$conn->query$sql或die$conn->error; ifmysqli\u num\u rows$query{ $statusRank=白名单; } 切换$statusRank{ 案件黑名单:
?>window.location.replaceinclude/blacklist.php;window.location.replaceinclude/offline.php;以下是一些从最简单的实现开始的想法:

确保在黑名单和白名单表中的ip列上有索引。 我对PHP中的这一点不太熟悉,但您可能应该使用持久连接。打开数据库连接是一项昂贵的操作。有关更多详细信息,请参阅。 最后,您可以将这三个查询合并在一起,只需检查是否找到ip,而不是计算行数。类似于: 选择 存在时的情况 从全局中选择*,其中enable='1'和setting='frontend',然后选择'T'或'F' 以离线方式结束, 存在时的情况 从ip='$ip'的黑名单中选择*然后选择'T'或'F' 最终被列入黑名单, 存在时的情况 从白名单中选择*,其中ip=“$ip”,然后选择“T”或“F” 以whilelisted结束
为IP读取一次DB,启动一个PHP会话,并将结果保存到其中

我会让您选择:

SELECT 'blacklisted' FROM blacklist WHERE ip = '$ip' JOIN
SELECT 'whitelisted' FROM whitelist WHERE ip = '$ip'

然后,您只需检查每一行的字符串“黑名单”或“白名单”或b/w是否更短。

哪一个是加载速度慢的查询?速度慢两倍是没有价值的。它是一毫秒?分钟?小时?如果没有表结构/索引,就没有机会帮助您。对不起……我已经不再是即时的了因为它可能会达到300-500毫秒左右,当脚本启用时+/-2秒。