尝试从目录及其子目录中获取所有文件时的错误500

时间:2018-04-24 18:08:28

标签: php

我尝试使用此PHP代码从主目录及其所有子目录中获取所有文件:

function allFiles($dir) {
    $files = [];
    foreach(glob($dir.'*') as $fileOrDir) {
        if(is_dir($fileOrDir)) {
            $files = array_merge($files, allFiles($fileOrDir));
        } else {
            $files[] = $fileOrDir; 
        }
    }
    return $files;
}

$allFiles = allFiles($_SERVER['DOCUMENT_ROOT'].'/contents/');
foreach($allFiles as $file) {
    echo $file.'<br>';
}

但我收到错误 500内部服务器错误

我发现问题在于

$files = array_merge($files, allFiles($fileOrDir));

因为没有此行的代码可以正常运行

但问题是什么?

1 个答案:

答案 0 :(得分:-1)

500 Internal Server Error是一个通用异常,当发生未捕获的异常时由PHP返回到Web浏览器。为了调试问题,您需要获取有关抛出的更具体异常的信息。您当前使用的配置在生产方案中很常见,其中内部异常消息的详细信息不应向公众公开,但它可以使调试更加困难。

以下是您可以尝试获取真实异常消息的一些内容:

  • 查看日志文件。位置因配置而异,但以下是一些需要检查的地方:
    • /var/log/apache2
    • /var/log/httpd
    • /usr/local/apache/logs/error_log
    • /var/log/messages
    • 查看phpinfo()的输出和error_log的grep。
    • 查看ls /var/log的内容,看看那里是否有另一个明显的位置。
    • 自定义文件日志,或特殊配置,如Graylog等外部日志搜索实用程序。
  • 使用调试器。逐步解决代码中有问题的部分,并注意异常。
  • Turn on error display,但如果这是一个生产环境,请小心。
    • 在php.ini中将error_reporting设置为E_ALL。
    • 在php.ini中将display_errors设置为1。