小编Džu*_*ris的帖子

从Laravel存储中下载而不将整个文件加载到内存中

我正在使用Laravel Storage,我想为用户提供一些(大于内存限制)文件.我的代码的灵感源自SO中的帖子,它是这样的:

$fs = Storage::getDriver();
$stream = $fs->readStream($file->path);

return response()->stream(
    function() use($stream) {
        fpassthru($stream);
    }, 
    200,
    [
        'Content-Type' => $file->mime,
        'Content-disposition' => 'attachment; filename="'.$file->original_name.'"',
    ]);
Run Code Online (Sandbox Code Playgroud)

不幸的是,我遇到了大文件的错误:

[2016-04-21 13:37:13] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Allowed memory size of 134217728 bytes exhausted (tried to allocate 201740288 bytes)' in /path/app/Http/Controllers/FileController.php:131
Stack trace:
#0 /path/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(133): Symfony\Component\Debug\Exception\FatalErrorException->__construct()
#1 /path/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(118): Illuminate\Foundation\Bootstrap\HandleExceptions->fatalExceptionFromError()
#2 /path/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(0): Illuminate\Foundation\Bootstrap\HandleExceptions->handleShutdown()
#3 /path/app/Http/Controllers/FileController.php(131): fpassthru()
#4 /path/vendor/symfony/http-foundation/StreamedResponse.php(95): App\Http\Controllers\FileController->App\Http\Controllers\{closure}()
#5 /path/vendor/symfony/http-foundation/StreamedResponse.php(95): call_user_func:{/path/vendor/symfony/http-foundation/StreamedResponse.php:95}()
#6 /path/vendor/symfony/http-foundation/Response.php(370): Symfony\Component\HttpFoundation\StreamedResponse->sendContent()
#7 /path/public/index.php(56): Symfony\Component\HttpFoundation\Response->send()
#8 /path/public/index.php(0): {main}()
#9 {main} …
Run Code Online (Sandbox Code Playgroud)

php laravel

27
推荐指数
3
解决办法
8675
查看次数

我为什么要使用strtolower()而不是mb_strtolower()?

我理解strtolower()mb_strtolower()函数之间的用法/行为差异.它已被要求之前:)

但我不明白 - 目前的目的是strtolower什么?

是否因为向后兼容性而可用?或者是否有一些用例何时strtolower更可取?它似乎mb_strtolower()更安全,更通用,所以我很想在任何地方使用它...

php

11
推荐指数
1
解决办法
1050
查看次数

如何访问Laravel集合中的第n个项目?

我想通过刻意制作一个重复的问题来打破所有规则......

其他问题有一个公认的答案.它显然解决了问题,但它没有回答标题问题.

让我们从头开始 - 该first()方法实现如下:

foreach ($collection as $item)
    return $item;
Run Code Online (Sandbox Code Playgroud)

它显然比采用$collection[0]或使用其他建议的方法更健壮.

即使集合中有20个项目,也可能没有索引0或索引的15项目.为了说明这个问题,让我们从文档中取出这个集合:

$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'desk'],
    ['product_id' => 'prod-200', 'name' => 'chair'],
]);

$keyed = $collection->keyBy('product_id');
Run Code Online (Sandbox Code Playgroud)

现在,我们是否有任何可靠的(最好是简洁的)方式来访问第n项$keyed

我自己的建议是:

$nth = $keyed->take($n)->last();
Run Code Online (Sandbox Code Playgroud)

但是这会给出错误的item($keyed->last())$n > $keyed->count().如果第n个项目存在并且null它不仅仅是first()表现,我们怎样才能得到第n个项目?

编辑

为了澄清,让我们考虑一下这个集合:

$col = collect([
    2 => 'a',
    5 => 'b',
    6 => 'c',
    7 => 'd']);
Run Code Online (Sandbox Code Playgroud)

第一项是$col->first().如何获得第二个? …

laravel laravel-collection

11
推荐指数
4
解决办法
1万
查看次数

C中的`extern int(x)[]`和`extern int x []`有什么区别?

有申报extern int (x)[]在结束这个文章.括号是做任何事情还是只是为了混淆?

我的猜测是,括号x是一个外部整数数组(这就是文章所说的),但没有那些x将是一个外部整数数组.如果是这样,定义将如何不同?他们俩都不是int x[]吗?

c global-variables extern variable-declaration

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

Laravel偶尔会无法读取缓存

我在网站上使用laravel缓存(remember()方法),代码如下:

$postedItems = Cache::remember('home_posted_items', $this->cacheTimes['postedItems'], function() {

    /* the stuff that prepares data */

    return ['items' => $items, 'firstItemNumber' => $firstItem];
});
Run Code Online (Sandbox Code Playgroud)

问题是,有时(每隔几天,我会说)缓存文件似乎已损坏,因此我有停机时间,直到缓存过期(除非我手动清除它).

以下是可能相关的错误堆栈的一部分:

[2017-02-04 22:01:34] production.ERROR: ErrorException: unserialize(): Error at offset 131059 of 131062 bytes in /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php:78
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'unserialize(): ...', '/home/path/to/...', 78, Array)
#1 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(78): unserialize('a:2:{s:7:"item...')
#2 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(47): Illuminate\Cache\FileStore->getPayload('home_posted_ite...')
#3 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/Repository.php(98): Illuminate\Cache\FileStore->get('home_posted_ite...')
#4 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/Repository.php(202): Illuminate\Cache\Repository->get('home_posted_ite...')
#5 [internal function]: Illuminate\Cache\Repository->remember('home_posted_ite...', 1, Object(Closure))
#6 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php(318): call_user_func_array(Array, Array)
#7 /home/path/to/app/bootstrap/cache/compiled.php(6089): Illuminate\Cache\CacheManager->__call('remember', Array)
#8 /home/path/to/app/app/Http/Controllers/HomeController.php(197): Illuminate\Support\Facades\Facade::__callStatic('remember', …
Run Code Online (Sandbox Code Playgroud)

php caching laravel-5 laravel-5.1

6
推荐指数
1
解决办法
959
查看次数

如何使用 Javascript 写入 CouchDB?

我看到了夫妻这样的问题,并阅读教程我能找到。不幸的是,他们都认为我对一些我实际上没有的知识有所了解,我什至不知道我不知道的关键词。

我有一个 HTML 页面,其中包含一些 javascript。我可以将信息放在字符串或 javascript 对象中。现在,我如何将它发送到我的数据库?我如何指出我的数据库在哪里以及javascript如何授权数据库以便它可以写入?

大多数教程只展示了 CouchDB 如何与 curl 一起工作,我还没有看到使网站与数据库交互的教程。这不是 CouchDB 的用途吗?

javascript rest jquery couchdb

5
推荐指数
2
解决办法
6634
查看次数

为什么一个即时贴的绝对子项总是躲在另一个即时贴后面?

我试图有一个粘性的第一列以及一些 CSS 工具提示。这是我的设置的简化模型:

div.container
{
  width: 300px;
  overflow: auto;
}

table
{
  border-collapse: collapse;
}

td 
{
  border: 1px black solid;
}


td div 
{
  width: 80px;
  height: 30px;
}

td:first-child
{
  position: sticky;
  left: 0;
  background-color: lime;
}


[data-tooltip]:hover:after
{
  content: attr(data-tooltip);
  position: absolute;
  background: white;
  top: 22px;
}
Run Code Online (Sandbox Code Playgroud)
<!doctype html>
<div class="container">
  <table>
    <tr>
      <td><div data-tooltip="123">hover me</div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
    <tr>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
      <td><div></div>
  </table>
</div>
Run Code Online (Sandbox Code Playgroud)

问题是工具提示隐藏在下一行的单元格后面,我找不到任何解决方案(除了删除position: sticky …

css

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

从Laravel 5.1升级到Laravel 5.8后,where(Has())变慢

我通过设置一个新的5.8项目并复制文件并在此处和此处进行一些调整,将应用程序从Laravel 5.1切换到Laravel 5.8。

问题是在哪里有查询变得非常慢。

这是示例代码:

Article::whereHas('categories', function ($category) {
            $category->where('link', 'foto');
        })
        ->active()
        ->recent()
        ->take(3)
        ->get();
Run Code Online (Sandbox Code Playgroud)

此代码在Laravel 5.1上生成以下查询,并在0.05-0.07秒内完成。

SELECT *
FROM `articles`
WHERE `articles`.`deleted_at` IS NULL
  AND
    (SELECT count(*)
     FROM `categories`
     INNER JOIN `article_category` 
       ON `categories`.`id` = `article_category`.`category_id`
     WHERE `article_category`.`article_id` = `articles`.`id`
       AND `link` = 'foto'
       AND `categories`.`deleted_at` IS NULL) >= 1
ORDER BY IFNULL(published_at, created_at) DESC
LIMIT 3
Run Code Online (Sandbox Code Playgroud)

这是解释:

+------+--------------------+------------------+------+--------------------------------------------------------------------------+-------------------------------------+---------+-----------------+------+----------+------------------------------------+
| id   | select_type        | table            | type | possible_keys                                                            | key                                 | key_len | ref             | rows | …
Run Code Online (Sandbox Code Playgroud)

mysql mariadb laravel eloquent laravel-5.8

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

如果使用whereRaw(),我应该如何清理Laravel查询?

我在一个项目中使用Laravel 5.1和Eloquent ORM.我需要查询数据库以查找使用其名称或部分名称的人员.

如果一个人被命名为约翰Doelington,我希望所有的搜索字词john,doelin,john doe发现约翰Doelington.但是,名字和姓氏存储在不同的列中.目前我正在使用此查询:

$people = Person::whereRaw(
                     'CONCAT(first_name, \' \', last_name) 
                      LIKE \'%'.$search.'%\'')
                 ->get();
Run Code Online (Sandbox Code Playgroud)

查看日志我发现很多错误 - 每次有'符号时都会破坏查询.似乎我在安全区之外有whereRaw()功能,有人可以通过上帝知道SQL的内容.

我该怎么办?

我应该手动清理输入吗?如果是这样,我该怎么办?删除'和还有什么?如果查询实际上必须包含'符号怎么办?

也许有一种更安全的方式来执行此查询?我可以使用Eloquent但是在使用时传递参数以PDO样式进行查询whereRaw()吗?

如果它有所不同,我使用MySQL作为数据库.

我知道我可以为全名创建一个连接列,但是我在使用此回退之前首先寻找一个Eloquent解决方案.

laravel eloquent

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

我能以某种方式在第一个“ then”中获取获取响应吗?

我正在尝试使用Fetch API。从示例看来,GET请求需要then以某种方式解析响应。

目前我正在这样做

fetch(url)
    .then(response => response.json())
    .then(response => {
        console.log(response);  
    });
Run Code Online (Sandbox Code Playgroud)

但是,这首先then看起来像样板。我试图避免它,例如:

fetch(url)
    .then(response => {
        console.log(response.json());  
    });
Run Code Online (Sandbox Code Playgroud)

但是,这记录了我的Promise状态待定resolved

我阅读了有关该主题的其他问题,并阅读了一些有关Promise的信息,但我不知道是否有可能将其组合为一个then(如果这样-怎么做?)。

例如,这里的两个答案指出:

不需要使用多个“ .then”

没有充分的理由拥有两个.then()处理程序,因为每个处理程序中的代码都可以组合成单个.then()处理程序

但是我无法让那个例子真正起作用-我仍然有一个承诺:)

相反,这里被接受的答案解释了.then实际上对结果做了一些事情(提取了promise的回报),但是如果我能以某种方式自己做到这一点(response.json().then()或者说response.json().getVal()或者是double语法),我就无法理解then

javascript es6-promise fetch-api

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

如何在 npm (laravel-mix) 中使用 jquery-ui?

我已经npm install编辑了 jquery-ui。它在那里全部拆分为组件,在我使用 laravel-mix 编译的 javascript 文件中似乎很难使用它们。

这就是我设法调用可拖动到一组元素的方式:

require('jquery-ui/themes/base/draggable.css');
var jQuery = require('jquery');
var draggable = require('jquery-ui/ui/widgets/draggable');

var draggableOptions = {
    revert: 'invalid',
    // other options...
    cursor: 'move'
};

$('.resource').each(function(index, resource) {
    new draggable(draggableOptions, $(resource));
});

// The documented approach didn't work because there was no function 'draggable'
// $('.resource').draggable(draggableOptions);
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用 jquery-ui 效果,例如bounceor shake,但我无法以任何方式导入和/或调用它们,无论是记录的还是上面的。总而言之,我觉得我做错了,应该更容易。

jquery-ui npm laravel-mix

0
推荐指数
1
解决办法
3094
查看次数