我正在尝试为 php7 安装 mongoDB 扩展。我从全新安装的 Ubuntu-Server 16.04.1 开始。预安装(在安装操作系统时)软件包是 LAMP-extension、OpenSSL 和 MySQL-server。这是安装在本地 VirtualBox 上的。它应该是一个开发系统,为每个开发人员配置平等。
首先,我根据这些说明安装了 MongoDB 本身:在 Ubuntu 上安装 mongoDB
之后,根据第二条指令:安装 php7-mongoDB-client-driver,
我安装了
它可以在
$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) 我想在 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?
TL;DR:
如果承载令牌请求到达具有路由模型绑定但令牌不正确的端点,则响应应401改为404。这是因为在检查令牌之前404模型已解析。
环境:
我的问题:
使用例如这个 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 …