php - 使用 File_Put_Contents 和 File_get_Contents 上传 50,000 张图像的最佳方法
问题描述
我有一个包含大约 50,000 张图像的 CSV。在 CSV 文件中,每个图像名称都有一个列,图像的实际 URL 地址有一个列。该代码清理了空格、撇号和逗号,并用破折号替换了空格,这样图像名称将更容易阅读并且对 SEO 更友好,因为原始图像名称是字母和数字的组合。
我使用的方法是将代码放在样式表上,所以为了激活它,我去https://mysite/stylesheet.php。一旦服务器下载了大约 600 - 700 张图片,我最终会收到 500 错误。
将这些 50K 图像下载到服务器而不超时的最佳方法是什么?不,我没有直接访问服务器的权限,这是 Hostgator Cloud Business 设置。我已经将 PHP 内存从 256MB 增加到 1GB,但这根本没有帮助。
代码如下:
<?php
$filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'photo.csv';
$file = fopen($filename, 'r');
while (($line =fgetcsv($file)) !== FALSE)
{
$name = $line[0];
$url = $line[1];
$str = $name;
$str = str_replace(' ' , '-', strtolower($str));
$str = str_replace('\'' , '' , $str);
$str = str_replace(',' , '' , $str);
$img = 'mtg/images/'.$str.'.jpg';
$img_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . $img;
file_put_contents($img_path, file_get_contents($url));
}
fclose ($file); ?>
解决方案
由于图像的质量,增加限制的效果基本上为零。我最终采用了一种不同的方法,使用了一个插件,当它们通过 csv 文件上传时,它会自动重命名图像。
推荐阅读
- java - 在 Spring Boot 中将实体与有效负载 (dto) 混合 - 最佳实践
- sql-server - 创建一个包含连接信息的配置文件,然后引用该连接
- php - codeigniter 从 insert_batch 的字符串修改数组
- c - 如何在 Raspberry PI 3 上的 C++ 中达到超时后清除 select() 状态
- java - Play Framework For Scala:[类型 BooksController 不是包控制器的成员]
- javascript - mxGraph 库是否适合绘制如下图这样的复杂电气图?
- c# - LINQ 获取序列值
- c# - IAsyncEnumerable 在 C# 8.0 预览版中不起作用
- html - 下拉菜单阻止了我的导航登录表单
- r - R在data.frame列中求和2个字符向量并计算角度的最快方法