确定从WordPress AJAX调用使用fOpen()时写入文件的位置

时间:2017-02-07 作者:jchwebdev

我有一个WordPress插件,它使用AJAX发送邮件。它工作得很好。现在,我想输入一些代码,以便在发送邮件时编写日志文件。

参数$u 只是一段要记录的文字。

function writeToLog( $u ) {
    $path = \'log.txt\';
    $agent = $_SERVER[\'HTTP_USER_AGENT\'];
    if (($h = fopen($path, "a")) !== FALSE) {
        $mystring = $u . \' \' . $agent . PHP_EOL;
        echo(\'mystring seems to be working\');
        fwrite( $h, $mystring );
        fclose($h);
    }
    else
      die(\'WHAT IS GOING ON?\');
}
看起来好像fopen() 正在工作,但我找不到log.txt 文件我想它应该和插件位于同一个文件夹中。这里log.txt 正在写入文件?我是否需要提供明确的$path 要在插件目录中写入此文件?

1 个回复
最合适的回答,由SO网友:Fayaz 整理而成

在代码保持不变的情况下log.txt 将写入的文件取决于PWD (当前工作目录值)。它可以是您的web根目录,也可以是其他任何位置。

然而,由于WordPress AJAX调用wp-admin/admin-ajax.php 文件PWD 因为AJAX几乎总是wp-admin/ 目录因此,如果将文件路径用作$path = \'log.txt\';, 日志文件几乎总是在wp-admin/ 目录

现在,为了确保它是在插件目录中创建的,您可以使用:

function writeToLog( $u ) {
    // this will create the log where the CODE of this function is
    // adjust it to write within the plugin directory
    $path = dirname(__FILE__) . \'/log.txt\';
    $agent = $_SERVER[\'HTTP_USER_AGENT\'];
    if (($h = fopen($path, "a")) !== FALSE) {
        $mystring = $u . \' \' . $agent . PHP_EOL;
        echo(\'mystring seems to be working\');
        fwrite( $h, $mystring );
        fclose($h);
    }
    else
        die(\'WHAT IS GOING ON?\');
}
由于是WordPress(默认设置),您可以使用ABSPATH 常量将其写入Web Root 以及:

$path = ABSPATH . \'log.txt\';
顺便说一句,最好在自己的插件目录中编写这些日志,而不是web root. 您最好保持web根目录不可通过脚本写入(有利于安全)。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请