2014-08-29 56 views
1

我正在嘗試將日期從WordPress插件寫入文本文件。雖然這適用於單個PHP文件,但在將代碼添加到插件時不會寫入。 TXT文件具有權限777,並且與插件文件位於同一目錄中。使用PHP將WordPress插件寫入文本文件

我在做什麼錯?

這是插件,我已經加入了線在塊//log 404s to text file

<?php 
/* 
Plugin Name: Mail me 404 errors 
Plugin URI: http://me.com 
Description: A 404 status triggers an email with details. 
Version: 1.0 
Author: Me 
Author URI: http://me.com 
*/ 
//SENDS 404 EMAIL TO ADMIN 


function email_admin($location){ 
    // ip address 
    $ipaddress = $_SERVER['REMOTE_ADDR']; 
    if (!empty($_SERVER['X_FORWARDED_FOR'])) { 
     $X_FORWARDED_FOR = explode(',', $_SERVER['X_FORWARDED_FOR']); 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
     $X_FORWARDED_FOR = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); 
    } 
    else {$ipaddress = "undefined";} 
    if (!empty($X_FORWARDED_FOR)) { 
     $ipaddress = trim($X_FORWARDED_FOR[0]); 
    } 

    // site info 
    $blname=get_option('blogname'); 
    $admemail = get_option('admin_email'); 
    $honeypot = "http://www.projecthoneypot.org/ip_".$ipaddress; 

    // time log 
    $time = date("F jS Y, H:i", time()+25200); 

    //referrer 
    function current_page_url(){ 
     $page_url = 'http'; 
     if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){ 
     $page_url .= 's'; 
    } 
    return $page_url.'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
} 
if(isset($_SESSION['referrer'])){ 
    $referrer = $_SESSION['referrer']; 
} elseif(isset($_SERVER['HTTP_REFERER'])){ 
    $referrer = $_SERVER['HTTP_REFERER']; 
} else {$referrer = "undefined";} 
    $_SESSION['referrer'] = current_page_url(); 

// query string 
if (isset($_SERVER['QUERY_STRING'])) { 
    $string = $_SERVER['QUERY_STRING']; 
} else { 
    $string = "undefined"; 
} 

// request URI 
if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER["HTTP_HOST"])) { 
    $request = 'http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; 
} else { 
    $request = "undefined"; 
} 

// identity 
if (isset($_SERVER['REMOTE_IDENT'])) { 
    $remote = $_SERVER['REMOTE_IDENT']; 
} else { 
    $remote = "undefined"; 
} 

// user agent 
if (isset($_SERVER['HTTP_USER_AGENT'])) { 
    $agent = $_SERVER['HTTP_USER_AGENT']; 
} else { 
    $agent = "undefined"; 
} 

//log 404s to txt file 
$ipad = $_SERVER['REMOTE_ADDR']; 
$ban = "#$time\r\n$ipad\r\n"; 
$file = "errors.txt"; 
$open = @fopen($file, "a"); 
$write = @fputs($open, $ban); 
@fclose($open); 
//log 404s to txt file 

$mailhead = "MIME-Version: 1.0\r\n"; 
$mailhead .= "Content-type: text/plain; charset=UTF-8\r\n"; 
$mailhead .= 'From: "' . $blname . '" <' .$admemail. ">\r\n"; 
$mailsubj= $blname.': 404 error'; 
$mailintro = "Someone wanted to go to ".$request.", but it doesn't exist. Maybe you can have a look and see if anything needs to be fixed.\r\n"; 
$mailbody= 

    $mailintro . "\n" . 

    "TIME: "   . $time . "\n" . 
    "*404: "   . $request . "\n" . 
    "REFERRER: "  . $referer . "\n" . 
    "QUERY STRING: " . $string . "\n" . 
    "REMOTE ADDRESS: " . $ipaddress . "\n" . 
    "REMOTE IDENTITY: " . $remote . "\n" . 
    "USER AGENT: "  . $agent . "\n" . 
    "CHECK WHOIS: https://who.is/whois-ip/ip-address/". $ipaddress . "\n" . 
    "CHECK IP ADDRESS: " . $honeypot . "\n\n\n"; 

@mail($admemail,$mailsubj,$mailbody,$mailhead); 
} 
function mail_me_errors(){ 
    global $wp_query; 
    $location=$_SERVER['REQUEST_URI']; 
    if ($wp_query->is_404){ 
     email_admin($location); 
    } 
} 
add_action('get_header', 'mail_me_errors'); 
?> 
+1

您正在使用前綴「@」調用來自'fopen'和'fputs'調用的錯誤報告。您可以嘗試從這些調用中刪除「@」,並查看插件引發的錯誤。 – 2014-08-29 00:24:13

+1

讀取不顯示的代碼非常困難,這對我們來說很不好,對我們來說很難理解這個問題......爲什麼在函數內部有函數? – brasofilo 2014-08-29 00:26:40

+0

我找不到與此插件相關的任何錯誤。 – WendiT 2014-08-29 01:36:23

回答

3

傳遞給fopen文件/wp-content/plugins/your-plugin/errors.txt的完整路徑與plugin_dir_path()

$file = plugin_dir_path(__FILE__) . '/errors.txt'; 
$open = fopen($file, "a"); 

以下是最小示例:

add_action('get_header', 'mail_me_errors'); 

function mail_me_errors() { 
    if (is_404()) { 
     email_admin($_SERVER['REQUEST_URI']); 
    } 
} 

function email_admin($location) { 
    $time = date("F jS Y, H:i", time()+25200); 
    $ban = "#$time\r\n$location\r\n"; 
    $file = plugin_dir_path(__FILE__) . '/errors.txt'; 
    $open = fopen($file, "a"); 
    $write = fputs($open, $ban); 
    fclose($open); 
} 
+1

謝謝。這只是做了這份工作。 – WendiT 2014-09-02 03:00:32