我正在使用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) 我理解strtolower()
和mb_strtolower()
函数之间的用法/行为差异.它已被要求之前:)
但我不明白 - 目前的目的是strtolower
什么?
是否因为向后兼容性而可用?或者是否有一些用例何时strtolower
更可取?它似乎mb_strtolower()
更安全,更通用,所以我很想在任何地方使用它...
我想通过刻意制作一个重复的问题来打破所有规则......
在其他问题有一个公认的答案.它显然解决了问题,但它没有回答标题问题.
让我们从头开始 - 该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()
.如何获得第二个? …
有申报extern int (x)[]
在结束这个文章.括号是做任何事情还是只是为了混淆?
我的猜测是,括号x
是一个外部整数数组(这就是文章所说的),但没有那些x
将是一个外部整数数组.如果是这样,定义将如何不同?他们俩都不是int x[]
吗?
我在网站上使用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) 我试图有一个粘性的第一列以及一些 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 …
我通过设置一个新的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) 我在一个项目中使用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解决方案.
我正在尝试使用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
。
我已经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 效果,例如bounce
or shake
,但我无法以任何方式导入和/或调用它们,无论是记录的还是上面的。总而言之,我觉得我做错了,应该更容易。
laravel ×4
php ×3
eloquent ×2
javascript ×2
c ×1
caching ×1
couchdb ×1
css ×1
es6-promise ×1
extern ×1
fetch-api ×1
jquery ×1
jquery-ui ×1
laravel-5 ×1
laravel-5.1 ×1
laravel-5.8 ×1
laravel-mix ×1
mariadb ×1
mysql ×1
npm ×1
rest ×1