gpt4 book ai didi

compiler-errors - 如何找出为什么无法加载由Symfony v2.8创建的网页?

转载 作者:行者123 更新时间:2023-12-03 07:39:14 26 4
gpt4 key购买 nike

我正在分享此问题,因为它是要解决的特别棘手的编码问题。
我过去有几个错误:

This page isn’t working
website.com didn’t send any data.
ERR_EMPTY_RESPONSE
这与在为网站生成网页的代码中出现错误时Symfony所显示的内容不同,因此并没有太大帮助。
这次我通过设置断点来跟踪错误的原因,而不是在我正在编辑的代码中,因为php xdebugger从未达到过极限,而是深入了在我的代码实际执行之前运行的Symfony代码。这是放置断点的代码:
public static function handleFatalError(array $error = null)
{
if (null === self::$reservedMemory) {
return;
}

self::$reservedMemory = null;

$handler = set_error_handler('var_dump');
$handler = is_array($handler) ? $handler[0] : null;
restore_error_handler();

if (!$handler instanceof self) {
return;
}

if ($exit = null === $error) {
$error = error_get_last();
}

try {
while (self::$stackedErrorLevels) { <<<< I put the breakpoint here!
static::unstackErrors();
}
} catch (\Exception $exception) {
// Handled below
} catch (\Throwable $exception) {
// Handled below
}

if ($error && $error['type'] &= E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR) {
// Let's not throw anymore but keep logging
$handler->throwAt(0, true);
$trace = isset($error['backtrace']) ? $error['backtrace'] : null;

if (0 === strpos($error['message'], 'Allowed memory') || 0 === strpos($error['message'], 'Out of memory')) {
$exception = new OutOfMemoryException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, false, $trace);
} else {
$exception = new FatalErrorException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, true, $trace);
}
}

try {
if (isset($exception)) {
self::$exitCode = 255;
$handler->handleException($exception, $error);
}
} catch (FatalErrorException $e) {
// Ignore this re-throw
}

if ($exit && self::$exitCode) {
$exitCode = self::$exitCode;
register_shutdown_function('register_shutdown_function', function () use ($exitCode) { exit($exitCode); });
}
}
当Symfony尝试在其代码的另一部分中使用 require $file语句加载我的 bundle 文件时,将调用上述函数。不幸的是,我看不到 $ error 或任何其他变量,但是当遇到断点时,调试器的确在分配了 error_get_last值的行上显示了 $ error 变量的内容。 (); 。即使内容是一个数组,所以它超出了屏幕的右边缘,但显示的内容足以解决问题。没有显示行号,但是显示错误文本。
我在寻找错误时发现的另一件事是服务器的 src/AppBundle./Controller/及以下版本中的所有PHP文件均由Symfony处理,因此,如果将代码保存在以* .php结尾的文件中,即使没有未被您的代码引用。在我的情况下,我有一个包文件,我将其从bundle.php重命名为bundle.24.php,目的是在继续处理bundle.php的新更改时保留它作为后备,但是bundle.24.php具有语法错误,这使Symfony停止了加载项目,但是我并没有意识到这一点,因为我遇到了此问题开头显示的错误。
无论如何,我想我应该和使用Symfony v2.8时遇到相同错误的任何人分享这一点。我希望以后的Symfony版本不会继续以这种方式工作,但是如果可以,那么这里是寻找问题所在或可能引起问题的线索。请注意,在以后的版本中,我确定处理程序功能可能与我所显示的不同,但是应该有些相似。
祝好运。

最佳答案

当您在Symfony中遇到此类错误时,解决方案是将断点放置在app_dev.php的$ response-> send();所调用的代码中;行,然后遍历代码,直到对require $file;行进行细化。使用PHP调试器监视$ file和$ class变量,您将看到require语句即将加载代码文件。如果跳转到错误处理程序函数,您将知道代码未加载,并且正如我在问题中所述,您将无法观看$ error变量,但是您应该能够看到其变量内容,如我所描述的,所以对导致包文件无法加载的代码错误有一个很好的了解。

关于compiler-errors - 如何找出为什么无法加载由Symfony v2.8创建的网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65175400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com