首页 > 解决方案 > 使用 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); ?>

标签: phparrayscsvfile-get-contentsfile-put-contents

解决方案


由于图像的质量,增加限制的效果基本上为零。我最终采用了一种不同的方法,使用了一个插件,当它们通过 csv 文件上传时,它会自动重命名图像。


推荐阅读