2014-05-08 96 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對原始消息的評論。