php - Laravel 自定义命令不创建 csv
问题描述
因此,在 Laravel 中,我创建了自己的自定义命令来搜索产品并根据它们的概览中是否有某个链接来过滤它们,并从中创建一个 csv,我已经将 dd 放在适当的位置以尝试找出哪个部分不起作用,但它似乎根本没有触及回调函数的内部,它也没有抛出任何错误,所以想知道我哪里出错了?
这是我的自定义命令的句柄部分中的部分:
$fileName = 'products.csv';
$products = Product::all()->chunk(1000);
$headers = array(
"Content-type" => "text/csv",
"Content-Disposition" => "attachment; filename=$fileName",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
);
$columns = array('ID', 'Full URL', 'Title', 'Alt Tag', 'Product ID');
$callback = function() use($products, $columns) {
$file = fopen('php://output', 'w');
fputcsv($file, $columns);
$num = 1;
foreach ($products as $product){
preg_match_all('/<img[^>]+>/i',$product->overview, $result);
$img = array();
foreach($result as $img_tag)
{
preg_match_all('/(alt|title|src)=("[^"]*")/i', $img_tag, $img[$img_tag]);
}
foreach($img as $image){
if(strpos($image, "cdn")){
$row['ID'] = $num + 1;
$row['Product ID'] = $product->id;
if(count($image[2]) === 3){
$row['Full URL'] = $image[2][0];
$row['Title'] = $image[2][1];
$row['Alt Tag'] = $image[2][2];
} else if(count($image[2]) === 2){
$row['Full URL'] = $image[2][0];
if(strpos($image, "title")){
$row['Title'] = $image[2][1];
} else {
$row['Title'] = "N/A";
}
if(strpos($image, "alt")){
$row['Alt Tag'] = $image[2][1];
} else {
$row['Alt Tag'] = "N/A";
}
} else if(count($image[2]) === 1){
$row['Full URL'] = $image[2][0];
$row['Title'] = "N/A";
$row['Alt Tag'] = "N/A";
}
}
fputcsv($file, array($row['ID'], $row['Full URL'], $row['Title'], $row['Alt Tag'], $row['Product ID']));
}
};
fclose($file);
};
return Response::stream($callback, 200, $headers);
解决方案
推荐阅读
- c# - 使用 switch 语句进行加法和减法
- angular - [ngModel] [(ngModel)] 和 ngModel 有什么区别
- python - 在 Kivy for android 中打包 Biopython
- python - Spark中的嵌套案例
- mysql - 现在是使用 meilisearch 之类的解决方案的合适时机吗?
- javascript - 根据输入的数字向数组添加元素
- node.js - MongoDB中不同集合的聚合
- php - 谷歌人员 API | 从回复中提取电子邮件地址 | PHP
- mysql - 循环中的节点 JS 回调
- node.js - 如何修复“请等待几分钟再试一次”错误instagram?