[英]PHP Script wont load table with large amount of data
首先,我首先要说我对PHP并不了解,所以我购买了一个用户管理脚本来帮助管理我的网站。
我将所有用户导入到5400多个帐户的脚本中,当我单击查看用户时,在脚本的用户管理部分中,该脚本将超时并出现致命错误:在users.php中,超过30秒的最大执行时间45.我尝试添加ini_set(“ max_execution_time”,“ 0”); 到脚本的开头,但随后仅旋转3-5分钟,Apache将超时。 这是在我的Web服务器和本地主机上。
下面是第42至48行
function get_user_meta($account_id, $term) {
global $db;
$query = "SELECT * from user_meta WHERE account_id='".$account_id."'";
$result = $db->query($query) or die($db->error);
$row = $result->fetch_array();
return $row[$term];
}//get user email ends here
列出用户的代码部分是。
function list_users($user_type) {
global $db;
global $language;
if($user_type == 'admin') {
$query = 'SELECT * from users ORDER by account_id ASC';
$result = $db->query($query) or die($db->error);
$content = '';
$count = 0;
while($row = $result->fetch_array()) {
extract($row);
$count++;
if($count%2 == 0) {
$class = 'even';
} else {
$class = 'odd';
}
$content .= '<tr class="'.$class.'">';
$content .= '<td>';
$content .= $first_name.' '.$last_name;
$content .= '</td><td>';
if($city != '') {
$content .= $city.', ';
}
if($state != '') {
$content .= $state.', ';
}
$content .= $country;
$content .= '</td><td>';
$content .= $username;
$content .= '</td><td>';
$content .= $email;
$content .= '</td><td>';
$content .= ucfirst($status);
$content .= '</td><td>';
$content .= ucfirst($user_type);
$content .= '</td><td>';
$content .= $this->get_user_meta($account_id, 'last_login_time');
$content .= '</td><td>';
$content .= $this->get_user_meta($account_id, 'last_login_ip');
$content .= '</td><td>';
$content .= '<button class="btn btn-default btn-sm pull-left" style="margin-right:5px;" data-toggle="modal" data-target="#modal_'.$account_id.'">'.$language["message"].'</button>';
$content .= '<!-- Modal -->
<script type="text/javascript">
$(function(){
$("#message_form_'.$account_id.'").on("submit", function(e){
e.preventDefault();
tinyMCE.triggerSave();
$.post("includes/messageprocess.php",
$("#message_form_'.$account_id.'").serialize(),
function(data, status, xhr){
$("#success_message_'.$account_id.'").html("<div class=\'alert alert-success\'>"+data+"</div>");
});
});
});
</script>
<div class="modal fade" id="modal_'.$account_id.'" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<form id="message_form_'.$account_id.'" method="post" name="send_message">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">'.$language["send_message"].'</h4>
</div>
<div class="modal-body">
<div id="success_message_'.$account_id.'"></div>
<div class="form-group">
<label class="control-label">'.$language["message_to"].'</label>
<input type="text" class="form-control" name="message_to" value="Email:('.$email.') Username: ('.$username.')" readonly="readonly" />
</div>
<div class="form-group">
<label class="control-label">'.$language["subject"].'</label>
<input type="text" class="form-control" name="subject" value="" />
</div>
<div class="form-group">
<label class="control-label">'.$language["message"].'</label>
<textarea class="tinyst form-control" name="message"></textarea>
</div>
</div>
<input type="hidden" name="from" value="'.$_SESSION['account_id'].'" />
<input type="hidden" name="account_id" value="'.$account_id.'" />
<input type="hidden" name="single_form" value="1" />
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">'.$language["close"].'</button>
<input type="submit" value="Send Message" class="btn btn-primary" />
</div>
</div><!-- /.modal-content -->
</form>
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->';
$content .= '<form method="post" name="edit" action="manage_users.php">';
$content .= '<input type="hidden" name="edit_user" value="'.$account_id.'">';
$content .= '<input type="submit" style="margin-right:5px;" class="btn btn-default btn-sm pull-left" value="'.$language["edit"].'">';
$content .= '</form>';
$content .= '<form method="post" name="delete" onsubmit="return confirm_delete();" action="">';
$content .= '<input type="hidden" name="delete_user" value="'.$account_id.'">';
$content .= '<input type="submit" class="btn btn-default btn-sm pull-left" value="'.$language["delete"].'">';
$content .= '</form>';
$content .= '</td>';
$content .= '</tr>';
unset($class);
}//loop ends here.
} else {
$content = $language["cannot_i_user"];
}
echo $content;
}//list_levels ends here.
我联系了创作者,并被告知。 现在,子系统使用Jquery数据表来安排数据应用过滤器和应用页面,因此,在使用jquery数据表时,在您遇到的情况下,我们必须一次从表中获取所有行,所以您有很多记录,这就是您遇到问题的原因。 他想向我收取20美元的修复费用。
是的,尝试以一种或另一种方式在较小的集合中获取结果。 编写一个函数以一次获取10条或更好的单个记录,然后从那里开始获取它,看看它是如何扩展的。 这样,您的用户就可以确保在检索和处理所有其余记录时可以看到某些内容。
另外,如果您不了解php,则购买现成的脚本是处理问题的非常糟糕的方法。 从头开始构建。
并为一些体面的咖啡/啤酒支付20美元,同时在php上寻找一些基本的tutes。 或者获取本书,以获取关于语言的精妙而又温和的介绍-数据库,分页结果集,登录名,您可以将其命名为: http : //www.amazon.com/PHP-Solutions-Dynamic-Design-Made/dp/1430232498
就您的脚本而言,
$query = 'SELECT * from users ORDER by account_id ASC LIMIT 10';
是一个好的开始,然后从那里开始。
或者,您可以将整个查询+处理放入for循环中,在循环的每次迭代中执行十强检索。
另外,由于我们关注的是性能,因此这是变量插值与串联(即处理字符串/ html生成方式)的一个很好的例子。 http://nikic.github.io/2012/01/09/Disproving-the-Single-Quotes-Performance-Myth.html
请记住,在这种情况下,代码的可读性在您掌握该语言时至关重要,因此我将使用插值变量。 这样一来,您就可以查看正在发生的事情,而不必担心从数据库中获取所有这些结果并将它们处理到页面中。 不要害怕,一旦您尝试了php,php是一种很好用的简单语言。
另一种方法是,当用户首先加载页面/单击以获取结果,然后通过AJAX逐步提供其余结果时,提供一个小的结果集,即无需重新加载页面,只需将后续元素插入到您的部门中即可。当他们准备好了。 这是一个很好的AJAX教程,可以帮助您入门:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.