WordPress文件句柄-fOpen,fWRITE不支持$.ajax或$.post jQuery

时间:2016-04-15 作者:Sheldon Alag

我正在为所有在站点中执行的操作制作一些日志,这些操作可以存储在中。txt文件。

我的php代码在正常加载时运行良好,但当我使用ajax时,似乎没有阅读php上的fopen、fpost方法。。

请检查我的代码。

这是我的函数和ajax处理程序

function action_log( $msg ) {
    $current_user = wp_get_current_user();
    $path = "wp-content/themes/creation/templates/inc/log.txt";
    $myfile = (file_exists($path)) ? fopen($path, "a+") : fopen($path, "w+");
    $txt = $msg.$current_user->display_name."\\n";

    if ( $myfile ) {
        fwrite( $myfile, $txt );
        fclose( $myfile );
        chmod($path, 0777);
        $result = $txt;
        return $result;
    } else {
        $result = $myfile;
        return $txt;
    }
}

add_action(\'wp_ajax_action-log-ajax\', \'action_log_ajax\');
add_action(\'wp_ajax_nopriv_action-log-ajax\', \'action_log_ajax\');
function action_log_ajax(){

    $post = $_REQUEST;
    $msg = $post[\'msg\'];
    $write = action_log( $msg );

    exit( wp_send_json_success( $write ) );
}
我的jquery插件函数

  $.send_log_changes = function( $msg ) {

    var msgs = $msg;
    var action = \'action-log-ajax\';
    console.log(msgs);

    $.post({
      url: plugins_ajax.ajaxUrl,
      method: \'POST\',
      data: {
        action: action,
        msg: msgs
      },
      dataType: \'json\',
      success: function( respones ) {
        console.log(respones);
      }

    });
 }
我试过使用。AJAX收到post仍然是相同的错误。它总是回来False无法在文件中写入/打开。

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

我想这句话的问题是:

$path = "wp-content/themes/creation/templates/inc/log.txt";
使用时,需要使用完整路径,而不是相对部分fopen()file_exists().

类似这样的操作可以解决您的问题:

$path = get_template_directory() . "/templates/inc/log.txt";
get_template_directory() 将返回绝对服务器路径,不带尾部斜杠。