【问题标题】:How to save images from list image url in csv如何从 csv 中的列表图像 url 保存图像
【发布时间】:2016-05-09 18:52:27
【问题描述】:

我想在下载到 csv 后将图像从 url 保存到我的目录及其图像名称。

我编写了以下存储图像的代码。但它没有按我的意愿工作。 在下面的代码中 $img 是从 csv 获取 url 的变量。

假设我在 csv 中有 1000 多种产品,并且每个产品都有图像 url,例如 www.example.com/images/image1.jpg

所以我想将此图像下载到我的本地目录/服务器目录,并在下载后将其图像名称存储到 csv 文件中,这样我就可以只将图像名称添加到数据库表中。

set_time_limit(1000);    
		while($url = $response->fetch()) {
		    $my_image = file_get_contents($img);
		    $my_file = fopen('/csvfiles/','w+'); 
		    fwrite($my_file,$my_image);
		    fclose($my_file);
		  }

我在其他类似问题上找到的一些解决方案是

	$file = file_get_contents($img);
	file_put_contents("/csvfiles/Tmpfile.zip", fopen($img, 'r'));

但它不适用于我的情况或不工作。

任何帮助将不胜感激。

编辑新 - 由于标记为重复,我想在此处添加更多信息 -

由于我拥有 csv 格式的所有产品信息,并且在导入产品时,我还想从其 url 下载图像。并且无法手动下载 1000 多个产品图像。我检查了上述解决方案,但不适用于这种情况。与上述解决方案一样,他们仅从特定页面下载图像并直接重命名。所以这里的情况不同。

新代码 - 我也试过这个代码仍然无法正常工作

$content = file_get_contents("http://www.google.co.in/intl/en_com/images/srpr/logo1w.png");
$fp = fopen("/csvfiles/image.jpg", "w");
fwrite($fp, $content);
fclose($fp);

【问题讨论】:

  • Saving image from PHP URL的可能重复
  • csv 文件在这里真的很重要吗?我认为,上面的评论应该会有所帮助。
  • 是的 csv 文件很重要 .. 因为我拥有 csv 格式的所有产品信息,并且在导入产品时,我还想从其 url 下载图像。并且无法手动下载 1000 多个产品图像。我检查了上述解决方案,但不适用于这种情况。与上述解决方案一样,他们仅从特定页面下载图像并直接重命名。所以这里的情况不同。

标签: php image file csv


【解决方案1】:

试试下面的代码。

set_time_limit(1000);
while ($url = $response->fetch()) {
    $my_image = file_get_contents($img);
    // check stricly that you have content of image
    if ($my_image !== false) {
        // download the image and store in the database.
        $my_file = fopen('/csvfiles/', 'w+');
        fwrite($my_file, $my_image);
        fclose($my_file);
    }
}

【讨论】:

  • 这里的 $response 是什么?或者应该是 $img 存储来自 csv 的图像 url .. 请确认 .
  • 该代码将帮助您确保您有来自 URL 的图像,如果不是,那么您决定将哪些内容存储在 CSV 文件中,而不是图像文件名,例如默认文件名或 noimage。 jpg等
  • 我尝试了这个解决方案,但出现致命错误 PHP 致命错误:在非对象上调用成员函数 fetch() 致命错误:在非对象上调用成员函数 fetch()
  • $response 未定义检查while 之前的行,因为$response 不为空。它应该是您的记录资源。
【解决方案2】:

您还需要一个文件名,而不仅仅是一个目录:

// download the inage from the internet:
$my_image = file_get_contents($url);

// get filename from url:
$filename = basename($url);

$path = '/csvfiles/' . $filename;

// save image to that file:
$my_file = fopen($path,'w+');
fwrite($my_file, $my_image);
fclose($my_file);

// save $filename to DB

【讨论】:

  • 嗨@Gavriel 这对我有用,但我不想更改图像的原始名称,因为它包含产品信息,所以有没有使用 tempnam() 的替代方法或替代方法,并使用原始名称保存图像。跨度>
【解决方案3】:

您好,下面的代码对我有用..希望它对某人有所帮助..

感谢@Gavriel 和@Alankar

if(!empty($img)){
    $my_image = file_get_contents($img);
    file_get_contents(filename)

    $filename = $data[0] . ".jpg";
     echo $filename. "\n";
    if(!file_exists($filename))
        {
            $my_file = fopen($filename,'w+');
            file_put_contents($filename, $my_image);
            echo $filename . "\n";

        }
    }
    $image = "/uploads/" . $filename;
    echo $image . "\n";

这里$img 存储图片的网址。这是从 csv 文件中获取的。

这里data[0] 是用于唯一存储图像名称的csv 列。所以我们可以使用file_exists();,否则每当我一次又一次地运行我的脚本时,它会再次存储图像并通过随机临时名称存储它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 2012-03-30
    • 1970-01-01
    • 2010-10-17
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多