2014-05-08 72 views
2

我认为使用fwrite创建一个基于时期的文件将是一个很好的方式来获得一些仍然有用的独特文件名。不幸。每次我的脚本运行时,最终都会生成2个文件,一个空白文件和一个数据文件。每次提交表单时,我怎样才能让php每次只写一个文件?fwrite创建多个文件

$t=time(); 
$dir = "tmp/"; 
$LogName = $t . ".txt"; 
$dicz = $dir.$LogName; 
$bunny = fopen($dicz, 'w') or die('Cannot open file: '.$dicz); 
if($bunny == false) 
{ 
    echo ("Error in opening new file"); 
    exit(); 
} 
fwrite ($bunny, "FN:" .$FN .",TL:" . $TL .",EMAIL:". $EM ."\n"); 
+0

我在脚本中没有看到任何可以解释所描述行为的内容。我只能认为脚本每次提交都会运行两次。另外不要忘记完成后fclose()文件。 – GordonM

+1

其实在进一步的思考之后,如果两个用户在一秒钟内使用表单,可能会有冲突。时间()只有第二个分辨率。您应该使用适当的锁定来确保脚本不会互相干扰。 – GordonM

+1

'我每次运行脚本时都会生成2个文件'猜测是因为html页面源代码中的bssed css/js/image/asset url会再次加载相同的页面。 – AD7six

回答

0

我以前曾经遇到过这个问题,今天又有过这个问题。我发现大部分时间都是这个问题,当时网站缺少favicon.ico。我知道这听起来很奇怪,但浏览器会在你不知道的情况下发出两个请求,导致这种行为。这在Chrome中尤其流行。

将空白favicon.ico添加到网站的根目录应立即修复它。您可以生成一个favicon here

+0

这不是一个100%的错误答案,但是通过编程,人们可以很容易地预测出两个文件可能被创建并采取行动的情况。 – JakeGould

+0

我完全同意。以我今天的问题为例。我有所有的检查来预测重复。但是这并没有解决它。直到我将该favicon.ico放入问题解决的根源中。 – brenjt

0

好了,这里是你的代码:

$t=time(); 
$dir = "tmp/"; 
$LogName = $t . ".txt"; 
$dicz = $dir.$LogName; 
$bunny = fopen($dicz, 'w') or die('Cannot open file: '.$dicz); 
if($bunny == false) 
{ 
    echo ("Error in opening new file"); 
    exit(); 
} 
fwrite ($bunny, "FN:" .$FN .",TL:" . $TL .",EMAIL:". $EM ."\n"); 

现在,让我们专注于这两条线:

$bunny = fopen($dicz, 'w') or die('Cannot open file: '.$dicz); 
if($bunny == false) 

当将$bunny永远等于false如果您的fopenor die()追加到它?

也许你应该尝试一下这样的:

$bunny = fopen($dicz, 'w'); 
if($bunny == false) 
{ 
    echo ("Error in opening new file"); 
    exit(); 
} 
else { 
    fwrite ($bunny, "FN:" .$FN .",TL:" . $TL .",EMAIL:". $EM ."\n"); 
} 

或者只是使用负file_exists - (又名!file_exists())-to检查文件是否存在都:

$t=time(); 
$dir = "tmp/"; 
$LogName = $t . ".txt"; 
$dicz = $dir.$LogName; 
if (!file_exists($dicz)) { 
    $bunny = fopen($dicz, 'w'); 
    if($bunny == false) 
    { 
    echo ("Error in opening new file"); 
    exit(); 
    } 
    else { 
    fwrite ($bunny, "FN:" .$FN .",TL:" . $TL .",EMAIL:". $EM ."\n"); 
    } 
} 

这样的脚本只会在文件完全不存在的情况下写入文件。

0

我有同样的问题,这是由JavaScript引起的。页面加载两次,fopen收到两个不同的文件名作为参数。查看AD7six对原始消息的评论。