我有一个部署在Heroku上的Facebook应用程序。当某人完成表单时,此应用程序会将一些用户数据收集到CSV中。但是,我有这个CSV的问题。它每天都被完全擦除(只剩下标题)。
我将提供我正在操作CSV的PHP代码:
以下是我实际操作CSV并将数据写入其中的代码:
<?php
date_default_timezone_set('Europe/Bucharest');
$error = 0;
if($_GET["name"] == ""){
$error = 2;
}
else if($_GET["email"] == ""){
$error = 3;
}
else if(!filter_var($_GET["email"], FILTER_VALIDATE_EMAIL)){
$error = 4;
}
if($error == 0){
$list = array($_GET["name"], $_GET["email"],date("d-m-Y H:i:s",time()));
$fp = fopen('users.csv', 'a');
fputcsv($fp, $list);
fclose($fp);
}
header( 'Location: index.php?signedrequest='.$_GET["signedrequest"].'&errors='.$error );
?>
以下是下载CSV的管理页面的代码:
<div id="admintab">
<p>
<iframe name="myframe_targ" style="display:none;"></iframe>
Download : <a href="users.csv" target="myframe_targ">users.csv</a>
</p>
</div>
我提到这个应用程序是在Heroku上托管的,我从周一开始就没有向它推送任何数据。我的上一次日志显示最后一次推文是星期一13:21。但是我只能从今天开始以CSV格式查看数据。我也在其他日子检查,还有其他投入。
你有什么想法,为什么会这样? Heroku或我的PHP代码有问题吗?
提前致谢!!
答案 0 :(得分:1)
虽然您可以写入文件系统,但在缩放dynos,重新启动dynos,重新部署代码时会丢失。 Heroku每天都会使用Dynos循环,因此这将是您失败的原因。
答案 1 :(得分:1)
Heroku通过在网络中可能数十或数百台服务器上同步您的代码来扩展。您不能依赖存储在单个实例上的瞬态数据以后可用,因为处理请求的虚拟机每次都可能不同。您可以阅读更多有关其工作原理here。
理想情况下,您应该使用为此任务长期存储而构建的存储机制。我有点使用MongoHQ,它运行得很好(它们有一个免费的层)。键/值存储(例如Amazon SimpleDB)也可能是合适的。