我有一个PHP文件来处理表单中的帖子数据,但是当我通过require_once
发布使用另一个PHP文件的表单时,我似乎遇到了某种性能/内存问题。第一次处理帖子并且性能很好,但是对于每个后续帖子,它变得越来越慢,直到浏览器窗口挂起,我在IIS服务器上看到一些繁忙的php cgi线程。
我正在使用PHP 5.6(php-5.6.11-Win32-VC11-x86(和jQuery 2.1.4。
基本上,当按下提交按钮时,jQuery发出XHR请求并将表单传递给form_handler.php
,然后决定如何处理数据。
在该文件中处理的所有表单都可以正常工作,但是我有一个需要扩展处理的表单,我正在尝试将其卸载到另一个PHP文件中。管理此问题的代码如下所示:
if($options[0] == "processor"){
//Data can not be handled and must use processor
$sql = "select processor_file from dbo.processor where reference_id = '".$options[1]."'";
$result = query_to_field($sql);
$processor = '../processors/'.$result;
if(file_exists($processor)) require_once $processor;
else echo "Error Processor Not Found<br/>";
}
然后,指定的文件执行一些操作并生成通过回显返回的 HTML。我不确定require_once
是否是问题所在,我应该寻求使用 curl
或exec
从另一个文件获取输出。
收到的帖子是一个字段,处理器文件是此示例的修改副本。
我已经修改了它以使用preg_match
而不是ereg
并构建$html
而不是所有的回显和打印,以便我可以在完成后回显$html
。
任何可以提供的指导将不胜感激。
正如一些评论所怀疑的那样,我确实找错了地方,结果发现问题是添加表单事件处理程序的JS。网站上的其他表格只被调用并提交一次,这就是我以前没有发现这个问题的原因。基本上,由于当内容更改时,事件处理程序只是被重新应用,导致提交使 AJAX 请求成倍增加,直到客户端不再说!
错误代码:
function formhandlers(){
$('form').submit(function(e) {
// get the form data
var id = $(this).attr('id');
// process the form
var dsttarg = document.getElementById(id).getAttribute('target');
var fd = new FormData(document.getElementById(id));
postdata(fd,encodeURI('./include/post_handler.php?function='+id),dsttarg);
e.preventDefault();
});
}
好代码:
function formhandlers(){
$('form').off('submit').on('submit', function(e) {
// get the form data
var id = $(this).attr('id');
// process the form
var dsttarg = document.getElementById(id).getAttribute('target');
var fd = new FormData(document.getElementById(id));
postdata(fd,encodeURI('./include/post_handler.php?function='+id),dsttarg);
e.preventDefault();
});
}
关键区别在于,如果该处理程序已存在,则将其关闭。