我无法访问cron作业,因为我在共享服务器上。我仍然希望以设定的间隔在我的数据库上运行更新任务。我怎样才能做到最好。显然,我可以检查执行index.php的时间,如果是,那么我可以包含我的更新脚本。但是那时脚本没有执行的风险(没有用户在那一秒请求页面)或许多执行。
有什么想法吗?
答案 0 :(得分:2)
您确定无法访问cron吗?
crontab -e
你可能......
编辑: 另外,请不要每小时以较差的用户费用将更新脚本附加到index.php ...
答案 1 :(得分:0)
在具有cron的服务器上运行脚本以访问在一小时内运行php脚本的URL。我在我的crontab中使用wget来做那种事情。
答案 2 :(得分:0)
你是那里的一部分。不要检查时间是否“按小时”;检查当前时间与上次更新时间之间的差异。当然,这需要您在运行更新时在某处存储时间戳。
此方法的最大问题是在更新完成之前页面不会加载。根据更新的时间长短,这可能不是一个因素;但如果是,你可能想为更新生成一个新线程(我甚至不确定这是否可以在PHP中使用)。
答案 3 :(得分:0)
你们很亲密。不是将周期性函数放在用户请求的页面的实际PHP中,而是从用户的页面发出javascript请求。这样,您可以确定页面加载不会减慢,并且javascript将触发onLoad()。保持存储的“上次处理”值,如上所述,并且只在给定的时间间隔内运行一次cron函数。
这是用于远程调用某些东西的JS。它只适用于现在使用JS的现代浏览器...
<script>
function DoCron()
{
var xhr;
try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); }
catch (e)
{
try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
catch (e2)
{
try { xhr = new XMLHttpRequest(); }
catch (e3) { xhr = false; }
}
}
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4)
{
if(xhr.status == 200)
{
alert("Cron Worked");
}
else
{
return 'ERROR';
}
}
};
xhr.open("POST", "CRON.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send('');
}
</script>