我有一个 powershell 脚本,我使用 php 使用 shell_exec 执行该脚本,并在有 Ajax 调用时执行此文件。(我使用的是 codeigniter 2 环境)
我用 Ajax 调用它,因为执行 ps 文件大约需要 45 秒,所以我想我会通过 Ajax 来做,这样我就可以给用户一条消息,说它正在加载。
我的 Ajax 函数如下所示:
<script>
$(document).ready(function () {
$.fn.colorbox({href:"#inline_content", inline:true, width:"650px", height:"235px", overlayClose: false, showClose: false});
$('#cboxClose').remove();
var csrf = $('[name="csrf_test_name"]').val();
$.ajax({
type: "POST",
url: "/index.php/ajax/addAccount",
data: {
csrf_test_name: csrf
},
cache:false,
success:
function(data){
if(data == "True"){
window.location = "/index.php/private";
}else{
$(window).colorbox.close();
alert("There was a problem creating your account.");
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
$('#Loading').hide();
}
});
});
</script>
CI Ajax 控制器只是抓取数据以提供给模型。
shell exec 函数如下所示:
function createCompany($companyID, $companyName, $domain){
$psCompanyName = "t_".$companyID. "_".str_replace(" ", "", $companyName);
$psScriptPath = "c:\\inetpub\\powershellscripts\\createCompany.ps1";
$ps = shell_exec("powershell -command $psScriptPath -companyName '".$psCompanyName."' -domain '".$domain."'");
return $ps;
}
PS1 文件执行良好。$ps 应该包含值“True”或“False”(ps1 最后有写输出“True”或写输出“False”,我已经检查并且所有任务都已成功执行。
当我用 return "True" 或 return "False" 替换 return $ps 时, sucess: 部分工作正常(我也没有从错误中得到任何东西:要么),而且当我在 Ajax 之外运行该函数时,我得到一个结果。
这是因为 Ajax 超时了吗?