2014-09-29 26 views
0

在幾個Delphi XE2項目中,我設置了Eurekalog通過「HTTP上傳」發送錯誤報告,因爲我使用PHP腳本來捕獲錯誤報告,將其保存在目錄中並通過電子郵件發送給我:「HTTP上傳」:我如何發送程序名?

<?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('[email protected]', 
          'A User of my program', 
          'Eurekalog Bug Report', 
          'This is a bug report from Eurekalog.', 
          '[email protected]', 
          $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

+1

這個問題與Delphi無關,因爲它只涉及PHP。我正在刪除Delphi標籤。請使用實際適用於您問題的標籤;外部應用程序用語言編寫的事實並不意味着該語言適用於您的PHP腳本。如果您想提出有關如何更改您的Delphi代碼以將應用程序名稱添加到EurekaLog例外報告的問題,請這樣做。 – 2014-09-30 02:46:47

+1

加油吧,這非常不合理!這個問題並不意味着一個可能的解決方案可能是PHP代碼的一個補充,它是否假設可以在Delphi代碼中實現一個可能的解決方案。如果我知道解決方案是來自Delphi還是PHP代碼,我不會在這裏問這個問題。請從邏輯上思考!順便說一句,誰投了我的問題呢?這是一個完全合法的問題,它應該得到指出,因爲在Eurekalog中使用「HTTP上傳」選項時這是一個常見問題。對這個問題的一個合適的答案會幫助很多Eurekalog的人。 – user1580348 2014-09-30 20:25:20

+1

不,這不是要求一個PHP的唯一解決方案,因爲一個可能的解決方案也可以從Delphi實現中派生出來,並且可以用PHP中的PHP對手解決問題。這就是所謂的*** INTEROPERABILITY ***,這是一個在Delphi中不幸被低估的話題:當它們配合在一起時,你不能在兩種編程語言之間做出明顯的分離,這是Eurekalog從Delphi代碼操作並與PHP代碼交互的情況。再次說明:這是Eurekalog中「HTTP上傳」選項的真正問題。一個解決方案可以幫助很多用戶。 – user1580348 2014-09-30 21:38:36

回答

1

您可以爲此使用網絡字段。 EurekaLog有OnCustomWebFieldsRequest事件處理程序,它允許您爲任何基於Web的發送方法(例如HTTP上傳,使用HTTP API的錯誤跟蹤器等)更改Web字段。

分配等事件hanlder:

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」]

0

對於此特定任務,您還可以使用OnCustomFileName event handler來更改用於發送的文件名。您對AFileType = ftZIP感興趣(如果您打算髮送打包的.elp報告)或AFileType = ftBugReport(如果您要發送解包的.el報告)。

相關問題