使用 PHP 从 WordPress 插件写入文本文件

     2023-02-18     260

关键词:

【中文标题】使用 PHP 从 WordPress 插件写入文本文件【英文标题】:Write from WordPress plugin to text file with PHP 【发布时间】:2014-10-22 23:19:24 【问题描述】:

我正在尝试从 WordPress 插件将日期写入文本文件。虽然这适用于单个 PHP 文件,但当我将代码添加到插件时它不会写入。 TXT 文件的权限为777,与插件文件在同一目录下。

我做错了什么?

这是插件,我添加的行在 //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');
 ?>

【问题讨论】:

您正在使用 @ 前缀抑制来自 fopenfputs 调用的错误报告。您可以尝试从这些调用中删除@,看看您的插件会抛出什么错误。 我找不到与此插件相关的任何错误。 【参考方案1】:

plugin_dir_path()将文件/wp-content/plugins/your-plugin/errors.txt的完整路径传递给fopen

$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 );

【讨论】:

谢谢。这样就完成了工作。 比搞乱error_log 更容易,这似乎不太灵活 @JDandChips 这也可以在生产中使用。

wordpress插件中的ajax错误

】wordpress插件中的ajax错误【英文标题】:ajaxerrorinwordpressplugin【发布时间】:2015-06-3011:28:36【问题描述】:我正在为wordpress编写一个插件。该插件有一个小部件,其中包含一个按钮和文本框。该按钮具有onclick事件。当该事件发... 查看详情

Wordpress:如何使用 ajax 调用来调用插件函数?

】Wordpress:如何使用ajax调用来调用插件函数?【英文标题】:Wordpress:howtocallapluginfunctionwithanajaxcall?【发布时间】:2011-02-2322:16:45【问题描述】:我正在编写一个WordpressMU插件,它包含每个帖子的链接,我想在用户单击此链接时... 查看详情

将 PHP 变量从一个插件文件传递到另一个 WordPress

】将PHP变量从一个插件文件传递到另一个WordPress【英文标题】:PassPHPVariablesfromonepluginfiletoanotherWordPress【发布时间】:2012-07-1408:56:31【问题描述】:我正在开发一个WordPress插件,但遇到了一个小障碍。我正在编写与PayPal的IPN交互... 查看详情

php从breadcrumbsnavxt插件跟踪(wordpress)中删除项目(代码片段)

查看详情

从 WordPress 帖子中获取有限的纯文本摘录?

】从WordPress帖子中获取有限的纯文本摘录?【英文标题】:Getalimited,text-onlyexcerptfromaWordPresspost?【发布时间】:2011-07-1512:16:39【问题描述】:我在自己的主题模板中使用“循环”来获取来自WordPress的最后三个帖子。<?php$args=array... 查看详情

使用 WordPress 插件从 pdf 创建 jpgs

】使用WordPress插件从pdf创建jpgs【英文标题】:CreatejpgsfrompdfwithWordPressplugin【发布时间】:2015-10-1015:40:12【问题描述】:我正在开发一个插件,它可以从上传的pdf文件的每一页创建jpgs。我使用wp_handle_upload操作并检查mime类型是否... 查看详情

从 WordPress url 中删除类别和标签库 - 没有插件

】从WordPressurl中删除类别和标签库-没有插件【英文标题】:Removecategory&tagbasefromWordPressurl-withoutaplugin【发布时间】:2013-07-2120:26:04【问题描述】:我想从WordPressURL中删除类别和标签库。我遇到过其他使用插件的帖子和解决方... 查看详情

如何在 Wordpress 插件中使用 jQuery 从 Iframe 调用 Iframe?

】如何在Wordpress插件中使用jQuery从Iframe调用Iframe?【英文标题】:HowtocallIframefromanIframeusingjQueryinWordpressPlugin?【发布时间】:2019-05-2914:24:02【问题描述】:我有一个从WordpressWoocommerce商店中的iFrame调用的应用程序(WordPress插件)... 查看详情

将变量从 WordPress PHP 传递到 JavaScript

】将变量从WordPressPHP传递到JavaScript【英文标题】:PassingVariablefromWordPressPHPtoJavaScript【发布时间】:2018-01-2917:24:19【问题描述】:我正在使用两个WordPress插件-用于插入PHP代码的片段和用于插入JavaScript的脚本n样式。我的目标是获... 查看详情

如何从 wordpress 的主题选项中获取输入文本?

】如何从wordpress的主题选项中获取输入文本?【英文标题】:Howtogetinputtextfromthemeoptionsonwordpress?【发布时间】:2013-03-1006:51:49【问题描述】:我刚刚在我的theme-options.php文件中设置了一个新的输入文本选项,类似于二十一主题代... 查看详情

php在wordpress插件中使用类。请评论!(代码片段)

查看详情

php的93个wordpress插件有后门

参考技术A因为93个WordPress主题和插件包含后门,从而使得攻击者可以完全控制网站。攻击者总共入侵了AccessPress的40个主题和53个插件,AccessPress是WordPress插件的开发者,用于超过360,000个活动网站。该攻击是由Jetpack的研究人员发... 查看详情

尝试从 ajax(Wordpress 插件)将 FormData 中的 Blob 发布到 php 时出现 400(错误请求)

】尝试从ajax(Wordpress插件)将FormData中的Blob发布到php时出现400(错误请求)【英文标题】:Getting400(BadRequest)whentryingtopostaBlobinFormDatatophpfromajax(WordpressPlugin)【发布时间】:2021-01-0722:11:53【问题描述】:所以请看下面的代码。constc... 查看详情

Wordpress 插件 HTML Bootstrap + PHP

】Wordpress插件HTMLBootstrap+PHP【英文标题】:WordpressPluginHTMLBootstrap+PHP【发布时间】:2020-10-0621:44:07【问题描述】:我正在创建我的第一个wordpress插件来在wp-admin-page上显示一些仪表板数据,但是当我编辑我的插件时只有我的php代码... 查看详情

php在functions.php中使用wordpress自定义更多文本(代码片段)

查看详情

如何从自定义页面模板调用 WordPress 插件功能?

】如何从自定义页面模板调用WordPress插件功能?【英文标题】:HowtocallWordPresspluginfunctionfromcustompagetemplate?【发布时间】:2020-02-1109:28:52【问题描述】:我有一个处理身份验证的自定义WordPress插件。plugin-name/src/Classes/Auth.php中有一... 查看详情

php这个wordpress插件演示了如何使用wordpress提供的可拖动元文件构建自己的插件页面,需要wordpr(代码片段)

查看详情

如何使用 php 在 WordPress 插件中回显 json 数据 [重复]

】如何使用php在WordPress插件中回显json数据[重复]【英文标题】:HowtoechojsondatainWordPresspluginusingphp[duplicate]【发布时间】:2020-09-0307:31:48【问题描述】:我正在创建一个Courier跟踪插件并使用他们的API获取数据。它们返回的输出是JSO... 查看详情