2013-10-07 109 views
1

作爲我的第一個PHP項目之一我正在創建一個記錄用戶IP地址的IP日誌記錄腳本。出於某種原因,我的fwrite()函數似乎沒有寫入我的日誌文件。PHP fwrite()不寫入日誌文件

有人可以幫我嗎?

<?php 
// IP Logger Script 
// By Sam Lev 
// [email protected] 
$iplogfile = 'iplog.txt'; 
$ipaddress = $_SERVER['REMOTE_ADDR']; 
$webpage = $_SERVER['SCRIPT_NAME']; 
$timestamp = date('m/d/Y h:i:s'); 
$browser = $_SERVER['HTTP_USER_AGENT']; 
$fp = fopen($iplogfile, 'a+'); 
chmod($iplogfile, 0777); 
fwrite($fp, '['.$timestamp.']: '.$ipaddress.' '.$webpage.' '.$browser. "\r\n"); 
fclose($fp); 
echo "IP ADDRESS: $ipaddress <br />\n"; 
echo "TIMESTAMP: $timestamp <br />\n"; 
echo "BROWSER: $browser <br />\n"; 
echo "Information logged to server. <br />\n"; 
?> 

運行該腳本後,iplog.txt仍爲空白。一切都很好。

感謝

+0

你的代碼檢查出來。確保您的文件具有寫入權限。 chmod'0644'或'0777' –

+0

在'$ fp = fopen($ iplogfile,'a')之後加'chmod($ iplogfile,0777);' –

+0

我在我的ssh中運行了chmod 0777'iplog.txt'終奌站。它正在工作!這是永久性修復還是需要對上面列出的代碼進行更改? –

回答

2

您的代碼檢查出來,這是一個權限問題。

無論是手動文件模式的文件0777

或添加chmod($iplogfile, 0777);$fp = fopen($iplogfile, 'a');

chmod是一個標準的服務器命令,它不是唯一到PHP。

+0

我在我的php代碼中添加了chmod行,並手動將我的權限設置回0644.該文件將不再寫入日誌。我還在$ fp定義中的「a」之後添加了+。 (不完全確定那是什麼,但有人建議它)。我已將更新的代碼發佈到原始問題。有沒有什麼原因chmod不起作用?運行Ubuntu Server版本的服務器最小化。 –

+0

@SamLev'a +'追加到文件的開頭,因爲'a'位於文件的末尾。至於它不工作,那很奇怪。不幸的是,我對本地Web服務器一無所知。嘗試移動'$ fp = fopen($ iplogfile,'a +')上方的'chmod'命令;'看看它是否會啓動。 –

5

不應該

$fp = fopen($file, 'a'); 

$fp = fopen($iplogfile, 'a'); 

?因爲我沒有看到$file的定義。

+0

+1榮譽。我也看到了...:P – opalenzuela

+0

好抓!修正了,但仍然沒有寫入文件... –

+0

還沒有。它可能是我的服務器或某事的權限錯誤?我通過webmin管理控制檯上傳文件... –

-1

繼承人我的記錄,如果這有助於但是添加代碼之後的代碼文件模式的日誌文件,以0777或它不會工作作爲添加代碼不讓它工作,並會給PHP錯誤因此,爲什麼它不代碼順便說一句,你可能需要手動創建日誌文件,但很容易的,這是我的網站www.nzquakes.maori.nz感謝你的幫助

<!-- Below Code Logs ONLY User's IP Address & Time Stamp & Browser Info To http://www.example.com/logs/ip-address-mainsite.txt --> 

<?php 
$iplogfile = 'full path to your logs goes here eg http://www.example.com/logs/ip-address-mainsite.txt'; 
$ipaddress = $_SERVER['REMOTE_ADDR']; 

//load the file 
$file = file_get_contents($iplogfile); 

//check to see if the ipaddress is already in the file 
if (! preg_match("/$ipaddress/", $file)) { 
//nope, log it! 
$webpage = $_SERVER['SCRIPT_NAME']; 
$timestamp = date('d/m/Y h:i:s'); 
$browser = $_SERVER['HTTP_USER_AGENT']; 
$fp = fopen($iplogfile, 'a+'); 
fwrite($fp, '['.$timestamp.']: '.$ipaddress.' '.$browser. "\r\n"); 
fclose($fp); 
} 
?> 
+0

這是爲我的網站www.nzquakes.maori.nz –