【问题标题】:Laravel cannot receive (handle) a PHP variable from URL, but on remote onlyLaravel 无法从 URL 接收(处理)PHP 变量,但只能在远程接收(处理)
【发布时间】:2021-06-14 02:44:35
【问题描述】:

我在我的控制器中截取了这个非常简单的代码,它总是可以从 URL 获取一个 php 变量: 网址:wholesaleeventeditions/create?event=36

    $wholesaleevent = Input::get('event');
    if(isset($wholesaleevent)) {
        $event = $wholesaleevent;
    } else {
        $event = null;
    }

现在,在我迁移到新的 VPS 服务后,Laravel 8 无法处理该变量。一定是服务器问题,因为我在 Laravel 5.8 上构建的过时应用程序开始产生类似的效果。

我的环境:

  • 本地:Windows 10,php 7.4.13 vc 15 TS,Laravel 8 和 Laravel 5.8,Apache 2.4.46 VS16(在最新的 Laragon 5.0 上)
  • 远程:Ubuntu 20.10、Nginx 1.18.0、php 7.4.9
  • Laravel 版本说明:Mu 最好的猜测是它一定与 Ubuntu 20.10 服务器配置有关,因为该错误破坏了我的一个单独的 Laravel 5.8 应用程序。虽然我会责怪 php 7.4 中的一个怪癖,但我不知道。

我尝试过但无济于事:

  • 无奈之下,我将$input = Input::get('event');更改为$input = Input::all();,然后再更改为$event = $wholesaleevent['event'];。该代码在本地运行,但在远程服务器上会产生“未定义索引:事件”错误。
  • 我已在我的服务器中禁用 SSL 保护(并重新启动服务器以确保没有缓存干扰)。换句话说:我已将服务器更改为仅http,并使用单独的浏览器通过键入仅包含http 的 url 访问它。

【问题讨论】:

  • 服务器运行为https模式时​​,使用http协议访问url不会从url或body中获取数据。例如:如果运行 https://example.com,使用 http://example.com?v=1 访问站点将不会产生 v 值
  • @joHN 你在说什么?
  • 将第二个参数传递给输入 get,如果参数不存在,您将收到该值。它将帮助您调试。如果您使用的是 apache,还要检查 htaccess 或 vhost 是否配置正确
  • @joHN 这个解释不起作用。在寻找解决方案时,我通过将 Nginx 配置替换为旧配置并重新启动服务器来关闭 https 访问。所以我通过http而不是https访问了该网站。它没有帮助。
  • @Peter 那表示服务器没有接受查询参数。这不是 laravel 或 php 的问题。您的网络服务器配置不正确。

标签: php laravel variables


【解决方案1】:

如果你的两个 Laravel 都有错误,那么这是 NGINX 配置错误。

这是最基本的配置,看看有没有遗漏:

server {
    listen 80;

    index index.php;

    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    root /var/www/public;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

另外,为您的代码提供一个小提示:如果您不再使用该值(您将其存储在 $event),您可以这样做以获得更好的代码:

$event = Input::get('event');

get 有第二个参数,默认情况下是null。如果 URI 中不存在 'event',则该参数将是默认值。另外,尽量使用Request ($request) 而不是普通的Input

【讨论】:

  • 这是问题所在:try_files $uri $uri/ /index.php?$query_string;。没有?$query_string。谢谢。
  • 太棒了!很高兴我能帮上忙
【解决方案2】:
$wholesaleevent = $input = Input::all();
if (isset($wholesaleevent['event'])) {
   $event = $wholesaleevent;
} else {
   $event = null;
}

$wholesaleevent = $input = Input::get('event', false);
if (!empty($wholesaleevent)) {
   $event = $wholesaleevent;
} else {
   $event = null;
}

【讨论】:

  • 我已经尝试过这个解决方案。不工作。还是谢谢你。
  • 没问题,你能更新扩展这句话的问题吗:“Laravel 8 cannot handle the variable”你的代码出现了什么错误,或者任何意外的值?
  • 我在括号中添加了handle,但不会添加版本号,因为我在两个单独的应用程序中遇到了同样的问题:Laravel 8.2 和 5.8。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 2020-09-11
  • 2010-12-12
  • 2021-10-21
  • 1970-01-01
  • 2013-11-04
  • 2021-12-03
相关资源
最近更新 更多