php寫入日誌
① php日誌類
首先,你得有一個「日誌類」,明顯PHP並沒有內置,所以你需要自己編寫這個類。
日誌模塊的大概設計思路如下:
1、你得有一個數據表,記錄所有的用戶行為。
2、你得寫一個「日誌類」,這個類至少有一個方法:向數據表寫入日誌信息
那日誌信息從哪裡來呢?
在你想記錄日誌的地方,調用日誌類的方法來觸發寫入動作。
比如(偽代碼):
if(用戶登錄成功){
$日誌類=new日誌類();
$日誌類->插入數據("登錄日誌","登錄成功","username=a;password=b","IP"...)
}
如果你想做日誌的查詢功能,顯然你要給日誌類加更多方法..
② PHP自帶的日誌是怎麼寫入和查看的呢
查看PHP錯誤日誌
可以在命令行裡面輸入: find . -name error.log
tailf -f error.log
寫入日誌,有固定的函數error_log($str, 3, filename)
③ php怎麼記錄訪問者ip並生成日誌
php獲取訪問者IP地址匯總
在很我的時候我們需要得到用戶的真實IP地址,例如,日誌記錄,地理定位,將用戶信息,網站數據分析等,其實獲取IP地址很簡單$_SERVER[\'REMOTE_ADDR\']就可以了。下面我們就來給大家匯總一下常用的幾種獲取IP地址的方法。
//方法1:
$ip = $_SERVER["REMOTE_ADDR"];
echo $ip;
//方法2:
代碼如下:
$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
echo $user_IP;
//方法3:
function getRealIp()
{
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
echo getRealIp();
//方法4:
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
{
$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
}
elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
{
$ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
}
elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
{
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
}
elseif (getenv("HTTP_X_FORWARDED_FOR"))
{
$ip = getenv("HTTP_X_FORWARDED_FOR");
}
elseif (getenv("HTTP_CLIENT_IP"))
{
$ip = getenv("HTTP_CLIENT_IP");
}
elseif (getenv("REMOTE_ADDR"))
{
$ip = getenv("REMOTE_ADDR");
}
else
{
$ip = "Unknown";
}
echo $ip ;
//方法5:
if(getenv('HTTP_CLIENT_IP')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$onlineip = getenv('REMOTE_ADDR');
} else {
$onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
echo $onlineip;
//方法6:
print "您的IP地址是:";
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$cip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif(!empty($_SERVER["REMOTE_ADDR"])){
$cip = $_SERVER["REMOTE_ADDR"];
}
else{
$cip = "無法獲取!";
}
print $cip;
保存TEXT中
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$time = gmdate("H:i:s",time()+8*3600);
$file = "123.txt" ;
$fp=fopen ("123.txt","a") ;
$txt= "$ip"."----"."$time"."\n";
fputs($fp,$txt);
?>
④ thinkphp 寫入log日誌~呢
thinkphp設置保留log日誌文件的個數日誌記錄\ThinkPHP\Lib\Think\Core\Log.class.php
⑤ php怎麼增加log日誌來
1、使用指定的文件記錄錯誤報告日誌
使 用指定的文件記錄錯誤報告日誌使用指定的文件記錄錯誤報告日誌使用指定的文件記錄錯誤報告日誌 如果使用自己指定的文件記錄錯誤日誌,一定要確保將這個文 件存放在文檔根目錄之外,以減少遭到攻擊的可能。並且該文件一定要讓PHP腳本的執行用戶(Web伺服器進程所有者)具有寫許可權。假設在Linux操作系 統中,將/usr/local/目錄下的error.log文件作為錯誤日誌文件,並設置Web伺服器進程用戶具有寫的許可權。然後在PHP的配置文件中, 將error_log指令的值設置為這個錯誤日誌文件的絕對路徑。
需要將php.ini中的配置指令做如下修改:
1. error_reporting = E_ALL ;將會向PHP報告發生的每個錯誤
2. display_errors = Off ;不顯示滿足上條 指令所定義規則的所有錯誤報告
3. log_errors = On ;決定日誌語句記錄的位置
4. log_errors_max_len = 1024 ;設置每個日誌項的最大長度
5. error_log = E:/php_log/php_error.log ;指定產生的 錯誤報告寫入的日誌文件位置
PHP 的配置文件按上面的方式設置完成以後,並重新啟動Web伺服器。這樣,在執行PHP的任何腳本文件時,所產生的所有錯誤報告都不會在瀏覽器中顯示,而會記 錄在自己指定的錯誤日誌/usr/local/error.log中。此外,不僅可以記錄滿足error_reporting所定義規則的所有錯誤,而且 還可以使用PHP中的error_log()函數,送出一個用戶自定義的錯誤信息。
⑥ php能不能像java那樣列印錯誤堆棧信息到錯誤日誌
PHP 確實不會輸出錯誤堆棧,但通過函數,還是能夠獲取到錯誤堆棧的。
function getBacktrace() {
ob_start();
debug_print_backtrace();
return ob_get_clean();
}
調用上面這個函數取得錯誤堆棧,再用 file_put_contents('log_path', FILE_APPEND); 寫入日誌文件即可。
還有一個辦法:為 PHP 安裝 xdebug 擴展
windows 下的安裝方法 安裝好後,修改 php.ini