【问题标题】:PHP: Execution of code after "die" function in PHP/LaravelPHP:在 PHP/Laravel 中的“死”函数之后执行代码
【发布时间】:2021-01-10 11:42:24
【问题描述】:

我是 PHP 新手,我想开始我从另一个来源复制的 laravel 项目。我收到 500 错误。如果我尝试调试公用文件夹中的 index.php,我会得到一个奇怪的行为,即如果代码中的内核行在那里,die 函数不起作用。我不明白,我以为die函数会停止执行。

<?php

die ('hi'); //this die

use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;

define('LARAVEL_START', microtime(true));

if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {
    require __DIR__.'/../storage/framework/maintenance.php';
}



require __DIR__.'/../vendor/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';

//If I comment out kernel line "die" on top doesn't return 'hi'. The response is 500 html code.
//$kernel = $app->make(Kernel::class);
/*
$response = tap($kernel->handle(
    $request = Request::capture()
))->send();

$kernel->terminate($request, $response);
*/

EDIT:从服务器访问日志中获取的日志为:

"GET /index2.php HTTP/2.0" 500 86 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"

我在错误日志中没有收到任何错误。 所以我已经激活了 PHP 错误日志。我收到此错误消息:

[24-Sep-2020 11:00:39 Europe/Berlin] PHP Parse error:  syntax error, unexpected T_CLASS, expecting T_STRING or T_VARIABLE or '$' in /usr/.../inertia/public/index2.php on line 44

【问题讨论】:

  • 可能内核代码只是使整个文件无效,因此die 永远不会运行。检查您的服务器日志以获取实际的错误消息。
  • 在 laravel 框架中 index.php 是 laravel 的入口点......你想做什么?
  • @AbdullahAlNoor 我想调试应用程序,并找出这个 500 响应的原因。
  • 请检查您的服务器日志中的错误消息,这可能会回答您的问题。解析文件时的语法错误将阻止文件中的任何代码运行。检查错误消息以查看它的确切错误。请记住,为新的 PHP 版本编写的代码也可能是语法错误的原因,因为旧的 PHP 版本不知道以后引入的新语法。
  • 访问日志只显示对您的应用程序发出的请求,为此目的并不那么有趣。但看来你确实发现了错误,这很好,很有帮助

标签: laravel installation die


【解决方案1】:

所以在谷歌搜索 PHP 错误消息后,我发现我的 PHP 版本是 5.6 而不是 7.4,这是一个问题。谢谢大家的帮助!这对我帮助很大。 laravel 在公用文件夹中有 .htaccess 文件。此文件已将 PHP 版本覆盖为默认 PHP 版本 5.6。

【讨论】:

    【解决方案2】:

    我认为这是因为 PHP 不是逐行解释您的代码,而是必须先将其转换为适合运行时引擎的格式。

    1. 忽略 cmets
    2. 解析变量、函数名等并创建符号表
    3. 构建程序的抽象语法树
    4. 写入字节码

    服务器甚至在代码执行开始之前就返回了 500 个代码。如果在“die();”之后出现任何语法错误,也会发生同样的情况方法。如果“use ...”命令出现问题,它将在准备阶段崩溃。

    【讨论】:

    • 感谢您的回答。我现在了解更多,PHP 是如何工作的。该文件将像在 Java 和 Co 中一样进行预编译。所以您认为问题出在 use 命令。
    • @CherryDT 你是对的,但这个答案帮助我理解了 PHP 的工作原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2021-08-25
    • 1970-01-01
    • 2022-11-18
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多