草庐IT

PHP 错误包装器?

coder 2024-05-02 原文

我不知道我使用的术语是否正确,但我正在寻找的是与您使用 zend 服务器获得的类似的东西。看看this .

它看起来像是一个错误,它会转储请求以及堆栈跟踪和函数参数以及一些其他信息。它使您可以在漂亮的界面中查看它。我知道这对我来说并不难,因为你总是可以进行错误回调,但如果存在这样的东西(免费),我宁愿使用它而不是重新发明轮子。

最佳答案

我没有任何工具可以自动为您执行此操作;但它并不难开发,我认为......不过,我承认,这会花费你一些时间:-(

只是添加一些注释,我想到的记录错误的最佳解决方案是:

  • set_error_handler注册你自己的错误处理器
  • 编写函数代码,以便它记录错误 + GET/POST 数据
    • 也许这可以/应该/应该在某种数据库或结构化文件中完成(一个 SQLite 数据库,也许:轻便、快速、易于使用,不依赖于外部数据库服务器,. ..),而不仅仅是普通文件;以后会更容易处理。
  • 开发“报告”应用程序...
    • 不过,正如您所说,这需要一些时间...


使用手册页上给出的示例,可能会这样做:首先,声明您的错误处理函数:

function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    $str = '';
    switch ($errno) {
        case E_USER_ERROR:
            $str .= "<b>My ERROR</b> [$errno] $errstr<br />\n";
            $str .= "  Fatal error on line $errline in file $errfile";
            $str .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
            break;
        case E_USER_WARNING:
            $str .= "<b>My WARNING</b> [$errno] $errstr<br />\n";
            break;
        case E_USER_NOTICE:
            $str .= "<b>My NOTICE</b> [$errno] $errstr<br />\n";
            break;
        default:
            $str .= "Unknown error type: [$errno] $errstr<br />\n";
            break;
    }
    $str .= print_r($_GET, true);

    $str .= "\n";
    file_put_contents(dirname(__FILE__) . '/log.txt', $str, FILE_APPEND);

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

它获取错误信息,根据错误类型准备一些特定的错误消息,并将所有这些信息和 $_GET 转储到一个文件中。
(当然,您的网络服务器必须能够创建/写入该文件)


然后,您注册该处理程序:

$old_error_handler = set_error_handler("myErrorHandler");


最后,为了测试,您触发了一些错误:

trigger_error("test of E_USER_ERROR", E_USER_ERROR);
trigger_error("test of E_USER_WARNING", E_USER_WARNING);
trigger_error("test of E_USER_NOTICE", E_USER_NOTICE);


现在,假设您使用如下内容调用该页面:http://tests/temp/temp.php?a=10&test=glop&hello=world;您将收到包含以下内容的错误日志:

$ cat log.txt
<b>My ERROR</b> [256] test of E_USER_ERROR<br />
  Fatal error on line 34 in file /home/squale/developpement/tests/temp/temp.php, PHP 5.3.0RC4 (Linux)<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

<b>My WARNING</b> [512] test of E_USER_WARNING<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

<b>My NOTICE</b> [1024] test of E_USER_NOTICE<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

在这种情况下,这是一团糟……但你可能明白了;现在,由您决定在此基础上获得您想要的东西 ;-)


当然,现在,您还必须开发报告界面(用户友好、快速、可用等等……);这可能是最长的部分 :-(

而且,不幸的是,我不知道有什么工具可以帮助您...
(也许,如果您开始开发某些东西,它可以作为开源发布?这可能对其他人有用;-)我可能对某些项目感兴趣,但我确定我不会那个 ;-) )

不过,玩得开心!

关于PHP 错误包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1246044/

有关PHP 错误包装器?的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  3. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  4. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  5. ruby-on-rails - 错误 : Error installing pg: ERROR: Failed to build gem native extension - 2

    我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby​​'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe

  6. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  7. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  8. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  9. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

  10. ruby-on-rails - Cucumber 是否只是 rspec 的包装器以帮助将测试组织成功能? - 2

    只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您

随机推荐