小编Dan*_*naq的帖子

为 php7 设置 mongoDB 扩展

我正在尝试为 php7 安装 mongoDB 扩展。我从全新安装的 Ubuntu-Server 16.04.1 开始。预安装(在安装操作系统时)软件包是 LAMP-extension、OpenSSL 和 MySQL-server。这是安装在本地 VirtualBox 上的。它应该是一个开发系统,为每个开发人员配置平等。

首先,我根据这些说明安装了 MongoDB 本身:在 Ubuntu 上安装 mongoDB

之后,根据第二条指令:安装 php7-mongoDB-client-driver

我安装了

  • php-梨
  • phpize

它可以在

$sudo apt-get install php-pear phpize
Run Code Online (Sandbox Code Playgroud)

因为这两个包在使用时被标记为丢失

sudo pecl install mongodb
Run Code Online (Sandbox Code Playgroud)

第一次。

然后我被建议安装openssl-extension。关于这一点,我找到了一条指令,告诉我执行这 3 个命令:

  • $sudo apt-get install libssl-dev
  • $sudo apt-get install libcurl4-openssl-dev
  • $sudo apt-get install libcurl4-openssl-dev pkg-config libssl-dev libsslcommon2-dev

(第一个包已经安装在我的系统上)

在那之后

$php -m
Run Code Online (Sandbox Code Playgroud)

应该将“openssl”显示为列表中的一个点。

然后我终于可以执行了

$sudo pecl install mongodb
Run Code Online (Sandbox Code Playgroud)

这个安装最后显示了四个指令:

<Installing '/usr/lib/php/20151012/mongodb.so'>
<install ok: channel://pecl.php.net/mongodb-1.1.8>
<configuration option "php_ini" is not set to …
Run Code Online (Sandbox Code Playgroud)

php ubuntu mongodb

8
推荐指数
1
解决办法
2万
查看次数

网页抓取 Symfony/Panther:无法获取 HTML

我想在 Laravel 应用程序中使用 symfony panther 包抓取一个网站。根据文档https://github.com/symfony/panther#a-polymorphic-feline我不能使用HttpBrowser或这些HttpClient类,因为它们不支持JS。

因此,我尝试使用 ChromClient,它使用本地 chrome 可执行文件和 panther 包附带的 chromedriver 二进制文件。

$client = Client::createChromeClient();
$crawler = $client->request('GET', 'http://example.com');
dd($crawler->html());
Run Code Online (Sandbox Code Playgroud)

不幸的是,我只收到 HTML 格式的空默认 chrome 页面:

<html><head></head><body></body></html>
Run Code Online (Sandbox Code Playgroud)

使用$client$crawler-instance 执行其他操作的每种方法都会导致错误“没有可用的节点”。

此外,我尝试了文档中的基本示例https://github.com/symfony/panther#basic-usage --> 相同的结果。

我在 Windows 上的 WSL 下使用 ubuntu 18.04 服务器并安装了google-chrome-stabledeb 包。这似乎有效,因为安装后不再出现“找不到二进制文件”的错误。

我还尝试手动使用 Windows 主机系统的可执行文件,但这只会打开一个空的 CMD 窗口,关闭时总是重新打开。我必须通过任务管理器终止该进程。

这是因为 Ubuntu 服务器没有任何可用的 x-server 吗?
我可以做什么来接收 HTML?

php laravel windows-subsystem-for-linux symfony-panther

5
推荐指数
1
解决办法
4586
查看次数

Laravel sainttum 令牌身份验证在模型绑定后运行

TL;DR:
如果承载令牌请求到达具有路由模型绑定但令牌不正确的端点,则响应应401改为404。这是因为在检查令牌之前404模型已解析。

环境:

  • 拉拉维尔 8
  • 圣所
  • API 请求的不记名令牌身份验证;不涉及 SPA。
  • 使用隐式路由模型绑定

我的问题:
使用例如这个 api-route:

//routes/api.php
Route::middleware('auth:sanctum')->group(function () {
    Route::get('surveys/{survey:uuid}', [SurveyController::class, 'getSurveyDetails']);
});
Run Code Online (Sandbox Code Playgroud)

当使用不正确的承载令牌和不存在的调查 UUID 请求此路由时,它不会返回401未经身份验证的 ,而是返回 a 404,因为它找不到请求的模型。

对我来说,这似乎是一个安全问题,因为未经身份验证,请求可以证明 ID 是否存在。

我尝试过的:
如下所述: https: //github.com/laravel/framework/issues/6118
- 中间件\Illuminate\Routing\Middleware\SubstituteBindings负责解析路由模型绑定。
但尚不完全清楚它是否应该在任何身份验证/授权操作之前或之后运行。

另外,根据 sactum-package-code,\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful中间件应该负责验证不记名令牌。

据我了解,它还将其设置为中间件优先级列表的顶部。

//Laravel/Sanctum/src/SanctumServiceProvider
protected function configureMiddleware()
    {
        $kernel = $this->app->make(Kernel::class);

        $kernel->prependToMiddlewarePriority(EnsureFrontendRequestsAreStateful::class);
    }
Run Code Online (Sandbox Code Playgroud)

据此,我也厌倦了在其中配置我的优先级列表Http/Kernel.php以确保这种行为:

//App/Http/Kernel.php
protected $middlewarePriority = [
        \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ];
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不断返回 a404而不是401 …

laravel bearer-token laravel-sanctum laravel-8

2
推荐指数
1
解决办法
1663
查看次数