comment créer un fichier en php?

je veux créer un fichier journal pour mon système pour enregistrer/enregistrer toutes les actions qu'ils font à l'intérieur du système. Mais je n'ai aucune idée de comment le faire.

par exemple, j'ai ce code php qui fait la fonction login.

public function hasAccess($username,$password){
    $form = array();
    $form['username'] = $username;
    $form['password'] = $password;


    $securityDAO = $this->getDAO('SecurityDAO');
    $result = $securityDAO->hasAccess($form);
    //var_dump($form);
    //var_dump($result);
    if($result[0]['success']=='1'){
        $this->Session->add('user_id', $result[0]['id']);
        //$this->Session->add('username', $result[0]['username']);
        //$this->Session->add('roleid', $result[0]['roleid']);
        return $this->status(0,true,'auth.success',$result);
    }else{
        return $this->status(0,false,'auth.failed',$result);
    }
}

maintenant je veux créer un journal intitulé " la date d'aujourd'hui, puis lorsque que l'fonctions est utilisé pour le loging, il écrit que l'utilisateur s'est connecté, la même chose avec d'autres fonctions. Mais je ne veux qu'un seul fichier par jour.

quelqu'un Pourrait-il d'avoir la gentillesse de les guider et de m'apprendre comment je dois faire mes codes?

39
demandé sur maecy m 2013-11-11 08:13:17

8 réponses

Pour écrire dans un fichier journal et de faire une nouvelle chaque jour, vous pouvez utiliser date("j.n.Y") comme partie du nom de fichier.

//Something to write to txt log
$log  = "User: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:i a").PHP_EOL.
        "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL.
        "User: ".$username.PHP_EOL.
        "-------------------------".PHP_EOL;
//Save string to log, use FILE_APPEND to append.
file_put_contents('./log_'.date("j.n.Y").'.log', $log, FILE_APPEND);

ainsi vous placeriez cela dans votre hasAccess() méthode.

public function hasAccess($username,$password){
    $form = array();
    $form['username'] = $username;
    $form['password'] = $password;

    $securityDAO = $this->getDAO('SecurityDAO');
    $result = $securityDAO->hasAccess($form);

    //Write action to txt log
    $log  = "User: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:i a").PHP_EOL.
            "Attempt: ".($result[0]['success']=='1'?'Success':'Failed').PHP_EOL.
            "User: ".$username.PHP_EOL.
            "-------------------------".PHP_EOL;
    //-
    file_put_contents('./log_'.date("j.n.Y").'.txt', $log, FILE_APPEND);

    if($result[0]['success']=='1'){
        $this->Session->add('user_id', $result[0]['id']);
        //$this->Session->add('username', $result[0]['username']);
        //$this->Session->add('roleid', $result[0]['roleid']);
        return $this->status(0,true,'auth.success',$result);
    }else{
        return $this->status(0,false,'auth.failed',$result);
    }
}
70
répondu Lawrence Cherone 2018-05-19 21:15:12

créer un fichier en php, à lui vous devez passer des données sur la fonction et il créera le dossier de journal pour vous.

function wh_log($log_msg)
{
    $log_filename = "log";
    if (!file_exists($log_filename)) 
    {
        // create directory/folder uploads.
        mkdir($log_filename, 0777, true);
    }
    $log_file_data = $log_filename.'/log_' . date('d-M-Y') . '.log';
    file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND);
}
4
répondu JON 2017-11-11 08:36:04

Vous pouvez utiliser la fonction intégrée trigger_error() pour déclencher l'utilisateur des erreurs/avertissements/avis et set_error_handler() pour les gérer. À l'intérieur de votre gestionnaire d'erreurs, vous pouvez utiliser error_log() ou file_put_contents() pour stocker tous les enregistrements dans les fichiers. Pour avoir un seul fichier pour chaque jour suffit d'utiliser quelque chose comme sprintf('%s.log', date('Y-m-d')) comme nom de fichier. Et maintenant tu devrais savoir par où commencer... :)

2
répondu Paulo Freitas 2013-11-11 04:39:30

s'il vous Plaît vérifier avec cette documentation.

http://php.net/manual/en/function.error-log.php

Exemple:

<?php
// Send notification through the server log if we can not
// connect to the database.
if (!Ora_Logon($username, $password)) {
    error_log("Oracle database not available!", 0);
}

// Notify administrator by email if we run out of FOO
if (!($foo = allocate_new_foo())) {
    error_log("Big trouble, we're all out of FOOs!", 1,
               "operator@example.com");
}

// another way to call error_log():
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
?>
2
répondu Surabhil Sergy 2013-11-11 04:54:27

Veuillez vérifier ce code, il fonctionne très bien pour moi.

$data = array('shopid'=>3,'version'=> 1,'value=>1');  //here $data is dummy varaible

error_log(print_r($data,true), 3, $_SERVER['DOCUMENT_ROOT']."/your-file-name.log");

//In $data we can mention the error messege and create the log
1
répondu Pasupathi Thangavel 2017-01-04 06:32:11

utiliser la fonction ci-dessous

// Enable error reporting
ini_set('display_errors', 1);
//Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//error_reporting(E_ALL & ~E_NOTICE);
// Tell php where your custom php error log is
ini_set('error_log', 'php_error.log');

$dateTime=date("Y-m-d H:i:s");
$ip= $_SERVER['REMOTE_ADDR'];
$errorString="Error occured on time $dateTime by ip $ip";
$php_error_msg.=$errorString;
// Append the error message to the php-error log
//error_log($php_error_msg);
error_log("A custom error has been triggered",1,"email_address","From: email_address");

la fonction ci-dessus va créer un journal dans le fichier php_error avec la description appropriée et le courrier électronique sera envoyé.

0
répondu vritika 2014-04-16 13:09:35

C'est mon code de travail. Grâce à Paulo pour les liens. Vous créez un gestionnaire d'erreurs personnalisé et appelez le trigger_error function avec le bon $errno exception, même si ce n'est pas une erreur. Assurez-vous que vous pouvez écrire dans le répertoire du fichier journal sans un accès administrateur.

<?php
    $logfile_dir = "C:\workspace\logs\";   // or "/var/log/" for Linux
    $logfile = $logfile_dir . "php_" . date("y-m-d") . ".log";
    $logfile_delete_days = 30;

    function error_handler($errno, $errstr, $errfile, $errline)
    {
        global $logfile_dir, $logfile, $logfile_delete_days;

        if (!(error_reporting() & $errno)) {
            // This error code is not included in error_reporting, so let it fall
            // through to the standard PHP error handler
            return false;
        }

        $filename = basename($errfile);

        switch ($errno) {
            case E_USER_ERROR:
                file_put_contents($logfile, date("y-m-d H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "ERROR >> message = [$errno] $errstr\n", FILE_APPEND | LOCK_EX);
                exit(1);
                break;

            case E_USER_WARNING:
                file_put_contents($logfile, date("y-m-d H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "WARNING >> message = $errstr\n", FILE_APPEND | LOCK_EX);
                break;

            case E_USER_NOTICE:
                file_put_contents($logfile, date("y-m-d H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "NOTICE >> message = $errstr\n", FILE_APPEND | LOCK_EX);
                break;

            default:
                file_put_contents($logfile, date("y-m-d H:i:s.").gettimeofday()["usec"] . " $filename ($errline): " . "UNKNOWN >> message = $errstr\n", FILE_APPEND | LOCK_EX);
                break;
        }

        // delete any files older than 30 days
        $files = glob($logfile_dir . "*");
        $now   = time();

        foreach ($files as $file)
            if (is_file($file))
                if ($now - filemtime($file) >= 60 * 60 * 24 * $logfile_delete_days)
                    unlink($file);

        return true;    // Don't execute PHP internal error handler
    }

    set_error_handler("error_handler");

    trigger_error("testing 1,2,3", E_USER_NOTICE);
?>
0
répondu xinthose 2017-10-12 18:55:36

D'accord avec la réponse de @jon. Vient de modifier le chemin pour créer le répertoire log à l'intérieur de la racine

 function wh_log($log_msg) {
    $log_filename = $_SERVER['DOCUMENT_ROOT']."/log";
    if (!file_exists($log_filename))
    {
        // create directory/folder uploads.
        mkdir($log_filename, 0777, true);
    }
    $log_file_data = $log_filename.'/log_' . date('d-M-Y') . '.log';
    file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND);
}

just added $_SERVER ['DOCUMENT_ROOT']

0
répondu Manish 2018-05-12 07:19:05