2014-08-29 2 views
1

Я пытаюсь записать дату в текстовый файл из плагина WordPress. Хотя это работает для одного файла PHP, он не пишет, когда я добавляю код в плагин. Файл TXT имеет разрешение 777 и находится в том же каталоге, что и файл плагина.Запись из плагина WordPress в текстовый файл с помощью PHP

Что я делаю неправильно?

Это плагин и линии я добавил в блоке //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

Вы являетесь supp Отчеты об ошибках, возникающие из ваших вызовов 'fopen' и' fputs', используя префикс '@'. Вы можете попытаться удалить '@' из этих вызовов и посмотреть, какие ошибки вызывает ваш плагин. –

+1

Чтение неподготовленного кода довольно сложно, это плохо для вас и плохо для нас, которые пытаются понять проблему ... Почему у вас есть функции внутри функций? – brasofilo

+0

Я не могу найти никаких ошибок, связанных с этим плагином. – WendiT

ответ

3

Pass полный путь к файлу /wp-content/plugins/your-plugin/errors.txt к fopen с 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

Смежные вопросы