1

我有一个 Facebook 应用程序,部署在 Heroku 上。当有人填写表格时,此应用程序会将一些用户数据收集到 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 代码有问题吗?

提前致谢 !!

4

2 回答 2

2

虽然您可以写入文件系统,但它会在缩放 dynos、重新启动 dynos、重新部署代码时丢失。Heroku 每天都会循环使用 Dynos,因此这将是您丢失的原因。

于 2013-03-22T21:07:46.327 回答
2

Heroku 通过在其网络中可能有数十或数百台服务器上同步您的代码来进行扩展。您不能依赖存储在单个实例上的临时数据在以后可用,因为处理请求的虚拟机可能每次都不同。你可以在这里阅读更多关于它是如何工作的。

Ideally, you should be using a storage mechanism built for long-term storage for this task. I've used MongoHQ a bit, and it works pretty well (They do have a free tier). A key/value store, such as Amazon SimpleDB might be a good fit as well.

于 2013-03-22T21:12:37.453 回答