Wordpress 文件句柄 - fopen、fwrite 不适用于 $.ajax 或 $.post Jquery

问题描述 投票:0回答:2

我正在为网站中完成的所有操作创建一些日志,这些日志可以存储在 .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、.get、.post,但仍然出现相同的错误。 它总是返回

False
并且无法在文件中写入/打开。

php jquery ajax wordpress fopen
2个回答
0
投票

文件打开操作似乎返回 false。您是否尝试过在 $path 变量中输入完整路径,即 /var/www/html/demo/wp-content/themes/creation/templates/inc/log.txt" 等。


0
投票

讨厌复活这个,但在开发中运行良好后,在生产中遇到了类似的问题。事实证明,SELinux 在 prod 中启用并阻止了

fopen()
的文件创建。一旦禁用,它就可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.