【问题标题】:Eurekalog "HTTP upload": How can I send the program name?Eurekalog“HTTP上传”:如何发送程序名称?
【发布时间】:2014-09-29 23:24:54
【问题描述】:

在几个 Delphi XE2 项目中,我设置了 Eurekalog 以通过“HTTP 上传”发送错误报告,效果很好,因为我使用 PHP 脚本捕获错误报告,将其保存在目录中并通过以下方式发送给我电子邮件:

<?php

require 'PHPMailerAutoload.php';

foreach ($_FILES as $key => $value)
{
    $uploaded_file = $_FILES[$key]['tmp_name'];
    $server_dir = 'upload/';
    $server_file = $server_dir . date("Y-m-d H-i-s ") . basename($_FILES[$key]['name']);
    $ext = strtoupper(pathinfo($server_file, PATHINFO_EXTENSION));
    if ($ext != 'EL')
    {
        continue;
    }
    if (move_uploaded_file($uploaded_file, $server_file))
    {
        echo '<html>';
        echo '<head>';
        echo '<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=UTF-8">';
        echo '<title>Bug submission</title>';
        echo '</head>';
        echo '<body>';
        echo 'Thank you!<br />';
        echo "<!--\n";
        echo "<EurekaLogReply>Thank you for your feedback!</EurekaLogReply>\n";        
        echo "-->";
        echo '</body>';
        echo '</html>';

        SendBugReportMessage('auserofmyprogram@usersofmyprogram.com',
                             'A User of my program',
                             'Eurekalog Bug Report',
                             'This is a bug report from Eurekalog.',
                             'eurekalog.bugreport@mysite.com',
                             $server_file,
                             basename($server_file)
                             );
    }    
}

function SendBugReportMessage($AFrom, $AFromName, $ASubject, $ABodyText, $ARecipient, $AFileToAttach, $ANameOfFile)
{
    $email = new PHPMailer();
    $email->From      = $AFrom;
    $email->FromName  = $AFromName;
    $email->Subject   = $ASubject;
    $email->Body      = $ABodyText;
    $email->AddAddress($ARecipient);
    $file_to_attach = $AFileToAttach;
    $email->AddAttachment($file_to_attach, $ANameOfFile);
    return $email->Send();
}

?>

现在我有几个程序使用这个相同的 PHP 脚本来上传他们的错误报告。但是,发送到此 PHP 脚本的错误报告始终名称为“BugReport”。那么,在 PHP 脚本中如何获取发送错误报告的程序的名称,以便我可以通过附加程序名称来保存它并将程序名称包含在邮件主题中?或者是否可以通过在 Delphi 代码的一侧实现某些东西来解决?还是在 Eurekalog 中?

Eurekalog 版本为 7.1.0.0

【问题讨论】:

  • 这个问题与Delphi无关,因为它只涉及PHP。我正在删除 Delphi 标签。请使用实际适用于您的问题的标签;外部应用程序是用一种语言编写的这一事实并不意味着该语言适用于您的 PHP 脚本。如果您想询问有关如何更改 Delphi 代码以将应用程序名称添加到 EurekaLog 异常报告的问题,请这样做。
  • 来吧,这太不合理了!这个问题并不意味着可能的解决方案可能是 PHP 代码的补充,也不是假设可能的解决方案可以在 Delphi 代码中实现。如果我知道解决方案是来自 Delphi 还是 PHP 代码,我就不会在这里问这个问题。请理性思考!顺便说一句,谁否决了我的问题?这是一个完全合理的问题,它应该得到分数,因为在 Eurekalog 中使用“HTTP 上传”选项时这是一个常见问题。对这个问题的有效回答将帮助很多使用 Eurekalog 的人。
  • 不,这不是要求仅使用 PHP 的解决方案,因为可能的解决方案也可以从 Delphi 实现中派生,并且可以使用 PHP 中的 PHP 对应物解决问题。这就是所谓的 INTEROPERABILITY,不幸的是,Delphi 低估了这个话题:当它们一起合作时,你不能在两种编程语言之间做出明显的区分,这就是 Eurekalog 操作的情况来自 Delphi 代码并与 PHP 代码交互。再说一遍:这是 Eurekalog 中“HTTP 上传”选项的一个真正问题。一个解决方案可以帮助很多用户。
  • 一个描述 PHP、包含 PHP 代码并要求 PHP 解决方案的问题在这种情况下可能IMPLY一个 Delphi 解决方案,因为两者交互彼此。 “暗示”意味着可以包含外部主题而无需明确提及。 - 顺便说一句,我已经改写了这个问题,所以请删除反对票。
  • 再一次,我在工作中看到了很多非理性......

标签: php delphi eurekalog


【解决方案1】:

您可以为此使用网络字段。 EurekaLog 具有OnCustomWebFieldsRequest 事件处理程序,允许您更改任何基于 Web 的发送方法的 Web 字段(例如 HTTP 上传、带有 HTTP API 的错误跟踪器等)。

分配这样的事件处理程序:

uses
  EEvents;

procedure AddApplicationName(const ACustom: Pointer; ASender: TObject { TELWebSender }; AWebFields: TStrings; var ACallNextHandler: Boolean);
begin
  AWebFields.Values['Application'] := AnsiLowerCase(ExtractFileName(ParamStr(0)));
end;

initialization
  RegisterEventCustomWebFieldsRequest(nil, AddApplicationName);
end.

然后,您可以从脚本访问新的“应用程序”字段。对于 PHP,它将是 $_REQUEST["Application"] 或 $_POST["Application"]

【讨论】:

    【解决方案2】:

    对于此特定任务,您还可以使用OnCustomFileName event handler 更改用于发送的文件名。您对 AFileType = ftZIP(如果您要发送打包的 .elp 报告)或 AFileType = ftBugReport(如果您要发送未打包的 .el 报告)感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2020-11-12
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 2014-09-26
      • 2017-09-06
      相关资源
      最近更新 更多