【问题标题】:How to check if included file from a loop comes with errors如何检查循环中包含的文件是否带有错误
【发布时间】:2018-12-17 16:37:17
【问题描述】:

我有这种循环。在每次迭代中,它都应该包含一个文件,包含的文件可能会出现错误。一旦某些包含的文件出错,整个过程就会丢失。如何防止进程中断? 我试过这个 try catch 但它来自包含文件的错误仍然会导致文件停止执行。 谢谢

foreach ($li_arrays as $index => $li_array) {
    if($index == 0){

        try {
            require 'update.php';
        } catch(Exception $e) {
            echo "Exception caught with message: " . $e->getMessage() . "\n";
        }

    }
    elseif ($index == 1){
        try {
            require 'update1.php';
        } catch(Exception $e) {
            echo "Exception caught with message: " . $e->getMessage() . "\n";
        }
    }else{
        try {
            require 'update2.php';
        } catch(Exception $e) {
            echo "Exception caught with message: " . $e->getMessage() . "\n";
        }
    }

【问题讨论】:

  • 只需使用include 而不是require
  • “包含的文件可能会出现错误”是什么意思?如果这些文件包含语法错误,然后修复这些错误
  • 我希望您不要尝试执行您无法控制的 php 文件的设置?喜欢客户上传的文件?那将是一个英里宽的安全漏洞 ...任何人都可以对您的系统做任何事情。
  • 有道理。谢谢。

标签: php loops try-catch


【解决方案1】:

php 中的错误是不可恢复的,所以它们总是会导致你的脚本终止。

我什至不确定您是否在谈论错误,但如果您是,这就是您问题的答案。

另一件需要注意的事情: 如果所需文件不存在,Require 将抛出 E_COMPILE_ERROR,这也是您无法捕获的。 如果您不想在找不到脚本时终止,请改用 include。

【讨论】:

  • 谢谢。我将用“include”替换“require”。我会尝试在这些文件中捕获异常。
  • @Geobo 根据您要执行的操作的上下文,可能还有另一种可能的替代方法,包括:php.net/manual/en/ref.exec.php(执行外部脚本)如果外部脚本因错误而终止,这不会自动导致调用脚本终止。
【解决方案2】:

最后,我将“require”改为“include”,并在每个包含的文件中使用了这种 try-catch 方法。

$attempts = 0;

    do {
        try
        {
           ////PHP code ///
        } catch (Exception $e) {
            echo "\n\n======EXCEPTION======\n\n";
            var_dump($e);
            $attempts++;
            sleep(30);
            continue;
        }
        break;
    } while($attempts < 5);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2017-11-27
    相关资源
    最近更新 更多