【问题标题】:PHP 4 try catch alternative?PHP 4 try catch 替代方案?
【发布时间】:2010-11-16 23:27:14
【问题描述】:

有人可以帮我把这段代码翻译成 PHP 4 吗?

try
{
  $picture = PDF_open_image_file($PDF, "jpeg", $imgFile, "", 0); // This is the original statement, this works on PHP4
}
catch(Exception $ex)
{
  $msg = "Error opening $imgFile for Product $row['Identifier']";
  throw new Exception($msg);
}

基本上,当出现致命错误时,我需要获取 $row['Identifier'] 以便知道导致错误的产品。

提前致谢。

编辑:我不知道 PHP_open_image_file 做了什么,但有时我会收到如下错误,我需要获取导致错误的产品标识符。

致命错误:PDFlib 错误 [1016] PDF_open_image_file:无法打开 JPEG 文件 'picture/b01_le1x.jpg' 用于 正在读取(未找到文件) /var/www/html/catalogue/pdf_make.php 在第 618 行

【问题讨论】:

  • 为什么还在用 PHP4?
  • +1 这个东西的服务器还在用 PHP4 =.="
  • 我的哀悼。如果PDF_open_image_file 抛出异常,它甚至会在 PHP4 中按原样运行吗?似乎你必须重新设计整个东西。
  • 大声谢谢!我已经更新了问题
  • 告诉你的主机不要烂,更新到 PHP5

标签: php error-handling php4


【解决方案1】:

我是否正确假设您使用的是 pdflib PECL 扩展中的 PDF_open_image_file()

如果是这样,那么它永远不会在 PHP 4 上抛出异常。我假设错误状态是通过结果报告的,结果是一个 int,因此在发生错误时可能

//try
if (file_exists($imgFile)) {
    $picture = PDF_open_image_file($PDF, "jpeg", $imgFile, "", 0);
}

//catch
if (!$picture) {
   $msg = "Error opening $imgFile for Product $row['Identifier']";
   print $msg;
}

我已用file_exists更新此内容,以防止出现致命错误。

作为附录问题,您为什么要尝试在 PHP4 上重新抛出异常?

【讨论】:

  • 感谢马里奥!我只是想将 $row['Identifier'] 添加到错误消息中,这就是我需要做的。您的代码将处理文件不存在,但如果 JPEG 文件已损坏怎么办?真的无法捕捉到错误是吗?
  • 我不确定它是什么 PDF 库。您将如何处理错误状态?
  • @aximili:先自己打开文件查看(imagecreatefromjpeg)。除非另有说明,否则 PDFLib 中没有错误捕获功能。
【解决方案2】:

您可以通过设置默认错误处理程序来捕获一些问题(请参阅PHP Manual entry),但这不会让您捕获 E_ERRORS。

我认为这在 PHP4 中是不可能的,您需要升级到 PHP5,所以它会抛出异常而不是 E_ERROR。您可能能够在某些错误发生之前捕获它们 - 例如通过在您的输入文件上运行 file_exists(),但是您不太可能能够想到并捕获 PDFLib 会发现的所有错误。

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多