我的 PHP 自定义日志文件重复,我该如何更正?

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

我正在学习 PHP 8.2.0 的一些概念。(Windows 11 上的 wamp 服务器)我正在尝试学习 PHP 错误处理选项。这是我的代码:

<?php

$logFile = "../Logs/logFile.txt";

error_reporting(E_ALL);

function dd($var)
{
    echo '<pre>';
    print_r($var);
    echo '</pre>';
    die();
}

function forceException()
{
    $msg = "Error transformed in Exception";
    echo "Erro forçado a excepção<br>";
    throw new Exception($msg);
}

set_exception_handler(function(Exception $e){
    $error = $e->getMessage() . PHP_EOL;
    file_put_contents("../Logs/logFile.txt", $error, FILE_APPEND | LOCK_EX);
    echo "Exception written.<br>";
    return true;
});

set_error_handler('forceException');

echo $b;

我通过打印未定义或未初始化的变量 $b 来强制出错。此代码在 logFile.txt 中的输出是这样的:

Error transformed in Exception
Error transformed in Exception

如您所见,错误消息是重复的。请有人帮助我吗?我不知道出了什么问题。我提前谢谢大家。

我已经对我的代码进行了一些修改,但无论我做什么,问题似乎仍然存在。

经过大量调试后,我发现在

AllowOverride all
文件的
<Directory ...>
定义中的
<VirtualHost ...>
块上使用
httpd-vhosts.conf
指令,使得此日志重复出现。但是,如果我忽略它或使用
AllowOverride none
,重复似乎就解决了。然而,这最后一个动作产生了一个新问题:任何像
mydomain.local/subdir
这样的URL现在都无法访问。

由于我需要使用

.htaccess
文件从头开始构建 PHP MVC 框架(出于教育目的),指令
AllowOverride all
应该存在。

这在我看来是服务器配置错误:我已经在 echo 之前引入了一个 sleep(10) 函数,并且 logFile 上的记录似乎是在 10 秒后写入的。这意味着我的脚本被调用了两次。

假设我在我的开发系统上安装了 SSL 证书。

我的

.htaccess
是:

Options +FollowSymLinks

# Remove the question mark from the request but maintain the query string
RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]
Header always set Content-Security-Policy "upgrade-insecure-requests;"

# Uncomment the following line if your public folder isn't the web server's root
RewriteBase /

# Accept loading from the actual files and directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

#send everything else to the index page
RewriteRule ^(.*)$ index.php?$1 [QSA,L]

再一次,如果可能的话,我们将不胜感激。我真的不太了解 apache 配置...我知道...谢谢大家。

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