【问题标题】:PHP: How to call function outside of classPHP:如何在类外调用函数
【发布时间】:2017-02-28 10:49:22
【问题描述】:

我正在尝试在我正在使用的网络工具中实现一个“记录器”,它基本上是一个看起来像这样的 php 文件:

<?php
function makePost($post) {
    $file = fopen("log.txt", "a") or die ("Unable to open file");

    $today = date("Y/m/d-h:i");
    fwrite($file, $today . "\n====================================");

    fwrite("\n" . $post);
    fwrite("\n====================================");

    fclose($file);
}

我试图从“网络工具”中的其他位置调用它,当我试图从我为了处理数据库而拥有的类中调用它时出现问题,并且当我尝试调用上面的函数似乎程序只是停在它的轨道上,而函数的其余部分(以及记录器本身)没有被执行。

我尝试从中调用记录器的简化类:

class handleAccounts {
    function loginValidation() {
        require_once("log.php");
        makePost("A login was attempted");

        // Some more code that isn't executed
    }
}

【问题讨论】:

  • 首先将require_once("log.php");移到课堂之外。 log.php 定义了一个全局函数,因此将其包含在全局中。其余的:您是否收到任何可以在此处显示的错误?
  • 你必须先初始化类然后调用函数。 $a =urclass(); $a->makePost();
  • 第二个trying to call it from a class 是这个类与所有其他文件在同一个文件夹中。目前log.txt 被写入类文件不在log.php 所在的文件夹中。你有那个文件夹的权限吗?那是正确的文件夹吗?
  • 最后,这一行就是你所需要的:file_put_contents('log.txt',"$today\n".str_repeat("=",20)."\n$post\n".str_repeat("=",20)."\n",FILE_APPEND) 创建或附加数据到文件中。

标签: php logging


【解决方案1】:

第 8 行和第 9 行的 MakePost 函数有错误。通过注释第 8 行和第 9 行解决了这个问题。

function makePost($post) {
    $file = fopen("log.txt", "a") or die ("Unable to open file");

    $today = date("Y/m/d-h:i");
    fwrite($file, $today . "\n====================================");

//    fwrite("\n" . $post);
//    fwrite("\n====================================");

    fclose($file);
}

【讨论】:

    【解决方案2】:

    这样改

    <?php
    function makePost($post) {
      $today = date("Y/m/d-h:i");
      $sep = str_repeat‌​("=",20);
      $res = file_put_contents('log.txt',"$today\n$sep\‌​n$post\n$sep\n",FILE_A‌​PPEND);
      if(!$res){
        die ("Unable to open and write to file");
      }
    }
    

    <?php
    require_once("log.php");
    class handleAccounts {
     function loginValidation() {
        makePost("A login was attempted");
        // Some more code that isn't executed
     }
    }
    

    'log.txt' 的注意事项: 例如,如果log.php/foo/bar/log.php 下,并且日志文件应该在/foo/log/log.txt 下,您可以使用dirname(__FILE__).'/../log/log.txt' 而不仅仅是'log.txt',因此您将始终写入同一文件夹中的同一文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      相关资源
      最近更新 更多