【发布时间】:2014-07-25 20:33:34
【问题描述】:
首先我想说我对 PHP 了解不多,所以我购买了一个用户管理脚本来帮助管理我的网站。
我将我所有的用户导入到脚本中,即 5400 多个帐户,在脚本的用户管理部分,当我单击查看用户时,脚本将超时并出现致命错误:用户超过 30 秒的最大执行时间。 php 在第 45 行。我尝试添加 ini_set("max_execution_time", "0");到脚本的开头,但随后它将旋转 3-5 分钟,Apache 将超时。这是在我的网络服务器和本地主机上。
下面是第 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 美元来修理它。
【问题讨论】:
-
“他想给我 20 美元来修理它。”对我来说听起来很划算。
-
我宁愿买一个新的用户管理系统,然后再给他 20 美元来修复我已经购买的脚本的缺陷。
-
是的...如果你用 jQuery 操作 5400 条记录,你会很糟糕的。
-
所以,相反,您希望我们为您修复它...免费?
-
不想看看是否有人有任何想法,关于如何尝试修复它。