我正在学习 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 配置...我知道...谢谢大家。