【问题标题】:Is there a way in PHP to leave a function upon errorPHP中有没有办法让函数出错
【发布时间】:2020-03-09 07:50:07
【问题描述】:

为了最大限度地减少页面加载时间,我们将 PHP 生成的 HTML 缓存为 HTML 文件。如果存在“缓存文件”,我们将使用它。否则,我们运行 PHP 脚本来生成页面。 为了进一步降低页面加载速度,我们想删除“如果文件存在”行(这需要时间),如果文件不存在,则让 PHP 生成错误。然后我们会“捕捉”错误并让 PHP 生成页面。

问题如下:有没有简单的方法在PHP中实现“On error, leave function”。

这是我们的代码:

function UseCachedPage()
{
$CacheFile='mypage.html';
if(!file_exists($CacheFile)) return; //Would like to skip this to save time
include($CacheFile); 
//Magic "on error, leave function" needed here.
exit; //Cache included, so no need to run the php.
}

任何帮助将不胜感激。

【问题讨论】:

  • 我的意思是..什么样的错误?如果 PHP 无效,PHP 将发出致命错误/抛出通知/警告
  • “(这需要时间)” - 你有没有实际测量过那是多少……?对不起,但整个想法对我来说听起来像是高级废话。我非常怀疑这会显着加快任何速度;取决于您计划如何“处理错误”,它甚至可能会减慢速度。
  • 我们尝试包含缓存文件。如果它在那里,那就太好了。如果不是 PHP 将生成此错误”:警告:include('cache file') [function.include]:无法打开流:xx.php 中的第 xx 行没有此类文件或目录警告:include() [function.include ]: 在第 xx 行的 xx.php 中打开 'xxx.html' 以包含 (include_path='.:/usr/local/lib/php/') 失败
  • 如何使用专门的缓存工具,例如 Varnish?

标签: php caching error-handling


【解决方案1】:

根据docs

根据给定的文件路径包含文件,如果没有给出,则根据指定的 include_path。如果在 include_path 中找不到该文件,则 include 最终会在失败之前检查调用脚本自己的目录和当前工作目录。如果找不到文件,include 构造将发出警告;这与 require 的行为不同,后者会发出致命错误。

所以这意味着如果你想“抓住”它,你必须改用require。现在,您只能捕获此致命错误as of PHP 7,了解这一点很重要。

function UseCachedPage() {
    $CacheFile = "mypage.html";
    try {
        require($CacheFile);
        exit;
    } catch (Error $e) {
        // Call something to build your file here
    }
}

【讨论】:

  • 关于可能遍历包含路径的好提醒,请确保您使用绝对路径作为要求。或者可能有很多文件遍历正在进行,试试这里,试试这里,试试这里,试试这里等等。
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
相关资源
最近更新 更多