当前位置: 首页 > 知识库问答 >
问题:

寄存器\关闭\函数()不工作

饶滨海
2023-03-14

我有两台服务器:

  • 1)PHP版本7.0.28-1~dotdeb 8.1

System Linux online 3.16。0-4-amd64#1 SMP Debian 3.16。51-2(2017-12-03)x86_64服务器API FPM/FastCGI虚拟目录支持禁用配置文件(php.ini)路径/etc/php/7.0/FPM

  • 2)PHP版本5.6.34-1~dotdeb 7.1

SystemLinuxovh 3.14.32-xxxx-std-ipv6-64#6 SMP Wed Jan20 18:22:32CET 2016x86_64Build Date Mar12 2018 09:28:40Server API CGI/FastCGI虚拟目录支持禁用配置文件(php.ini)路径/etc/php5/cgi

在服务器1上,当我遇到一个错误时,它工作得很好,它调用HTTP0。html,

<?php register_shutdown_function(function(){
$last_error = error_get_last();
if ( !empty($last_error) &&
    $last_error['type'] & (E_ERROR | E_COMPILE_ERROR | E_PARSE | E_CORE_ERROR | E_USER_ERROR)
)
{
    require_once(dirname(__FILE__).'/ErrorPages/HTTP0.html');
    exit(1);
}
});
echo phpinfo(); ?>

但在服务器2上:当我出现错误时,它不会改变任何内容:

分析错误:语法错误,意外“;”在/var/www。。。。

我认为区别在于FPM和CGI

谢谢你的帮助

共有1个答案

卫嘉泽
2023-03-14

我找到一个解决方案来帮助每个人:我使用PHP. ini用这段代码前置一个文件(prepend.php)

<?php 
error_reporting(-1);
ini_set('display_errors', 0);
define('WEBMASTER_EMAIL', 'xxx@gmail.com');
function error_type($id) {
    switch($id) {
        case E_ERROR:// 1
            return 'E_ERROR';
        case E_WARNING:// 2
            return 'E_WARNING';
        case E_PARSE:// 4
            return 'E_PARSE';
        case E_NOTICE:// 8
            return 'E_NOTICE';
        case E_CORE_ERROR:// 16
            return 'E_CORE_ERROR';
        case E_CORE_WARNING:// 32
            return 'E_CORE_WARNING';
        case E_COMPILE_ERROR:// 64
            return 'E_COMPILE_ERROR';
        case E_COMPILE_WARNING:// 128
            return 'E_COMPILE_WARNING';
        case E_USER_ERROR:// 256
            return 'E_USER_ERROR';
        case E_USER_WARNING:// 512
            return 'E_USER_WARNING';
        case E_USER_NOTICE:// 1024
            return 'E_USER_NOTICE';
        case E_STRICT:// 2048
            return 'E_STRICT';
        case E_RECOVERABLE_ERROR:// 4096
            return 'E_RECOVERABLE_ERROR';
        case E_DEPRECATED:// 8192
            return 'E_DEPRECATED';
        case E_USER_DEPRECATED:// 16384
            return 'E_USER_DEPRECATED';
    }
    return 'UNKNOWN';
}
function error_alert() {
    // send alert
    if(!is_null($e = error_get_last())) {
        $type = error_type($e["type"]);
        if (strpos($type, 'ERROR') !== false || strpos($type, 'PARSE') !== false) {
            mail(WEBMASTER_EMAIL, $type . ' in ' . $e['file'] . ' at line ' . $e['line'], $e['message']);
            require_once(__DIR__.'/HTTP0.html');
            exit(1);
        }
    }
}
register_shutdown_function('error_alert');
?>
 类似资料:
  • 我使用的是Laravel6.5,这对PHP和Laravel来说还是新的。当我成功注册时,它会将我返回到相同的注册表单,其输入为空。它成功注册了用户tho,但不会重定向。我也尝试过重写redirectPath()函数,但该函数不起作用。 当我尝试重写其他方法(如ShowRegistrationForm())时,它工作得很好,但我无法让它重定向。 重定向对登录控制器非常有效。 这是我的ontrolle

  • 我正在尝试为短代码创建一个插件。但我的激活钩不起作用。插件在我的页面中被激活,但在我的代码中没有任何东西可以工作,比如:我的 请帮帮我。我卡住了

  • 我一直试图改变输入字段从一个到另一个无济于事,当我使用。焦点它给我一个错误,它不是一个函数。 我将粘贴我的代码 有人能帮忙吗。如果你知道更好的方法,我会很感激你引导我走上正确的道路

  • Vim 可以将不同字段剪切或复制到不同寄存器中,您可以从不同寄存器中取出内容后粘贴 "寄存器名称 按下"键和另一个字符键,便可以定义一个寄存器。例如:"a "1 定义寄存器后直接进行操作 "ayy 将当前行复制到寄存器 a 中 "ap 将寄存器 a 中的内容粘贴到光标之后 :registers 查看所有寄存器的内容 通常情况下,寄存器 + (先按",再按 Shift+= )对应

  • Vim提供了许多寄存器。可以将这些寄存器用作多个剪贴板。使用多个文件时,此功能非常有用。在本章中,将讨论以下主题内容 - 复制寄存器中的文本 粘贴寄存器中的文本 列出可用的寄存器 寄存器类型 1. 复制寄存器中的文本 对于复制,可以使用普通的命令,即并将其存储在寄存器中,可以使用以下语法 - 例如,要复制寄存器中的文本,请使用以下命令 - 2. 粘贴寄存器中的文本 从寄存器粘贴文本 - 例如,下面

  • 当前的Perl 5虚拟机是一台堆栈机器。 它通过将操作保持在堆栈上来传递操作之间的值。 操作将值加载到堆栈上,执行他们需要执行的操作并将结果放回堆栈。 这很容易使用,但速度很慢。 要将两个数字相加,您需要执行三次堆栈推送和两次堆栈弹出。 更糟糕的是,堆栈必须在运行时增长,这意味着在您不想分配内存时分配内存。 因此,Parrot将打破虚拟机的既定传统,并使用寄存器架构,更类似于真实硬件CPU的架构。