php根据csv值从url保存的图像重命名
问题描述:
当前:我的代码保存了csv文件中给出的URL的图像。php根据csv值从url保存的图像重命名
目标:重命名根据在同一csv文件的值保存的图像,并通过格式:CSV位置3,4,5,6,7,8
(例如100A1_https://www.instagram.com /p/BBzUXUFLrGH/_48.8486557_2.3481125)。
我想将this stackoverflow示例合并到我的代码中。但无法如我所希望的那样迷路。
<?php
$destination = 'images/';
$dom = new DOMDocument;
$dir = "dir to photos";
$row = 0;
if (($handle = fopen("data/testcsvfile.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 100, ",")) !== FALSE /*&& $row < 1*/) {
$row++;
// number of fields in each row
$num = count($data);
// get url from position in csv
$url = $data[6];
echo $row . " " . $url. PHP_EOL;
if(strlen($url) > 0){
// if we have a url, get the contents
$page = file_get_contents($url);
//echo $page;
$dom->loadHTML($page);
// find url using meta tag
$my_tags = $dom->getElementsByTagName('meta');
// find which one is the image and grab and save
foreach ($my_tags as $tag) {
if($tag->getAttribute("property") == "og:image"){
$image_url = $tag->getAttribute('content');
echo $image_url . PHP_EOL;
$the_image = file_get_contents($image_url);
// rename file based on csv
// $newname = "$dir"."$names[3] $names[4] $names[5]".";
rename($newname);
file_put_contents($destination . "img_" . $row . ".jpg", $the_image);
}
}
}
}
fclose($handle);
}
?>
// test csv file
Mon,1,0,100,A,1,https://www.instagram.com/p/BBzUXUFLrGH/,48.8486557,2.3481125
Mon,1,0,100,A,1,https://www.instagram.com/p/BAe0tGULrC1/,48.85272468,2.347259349
Mon,1,0,100,A,1,https://www.instagram.com/p/_zik5YLrMf/,48.85356691,2.345645975
答
首先你要明白,使用URL作为文件名是一个很奇怪的/糟糕的事情。 一个URL使用特殊字符如'/',这些字符在某些操作系统中是目录分隔符。 如果你真的需要做到这一点,你需要先逃跑到文件名中的字符(或更好地与像下划线非特殊字符替换它们):
$newname = str_replace('/', '\/', $newname);
脚本的一个更新版本的安全替代用下划线斜线:
<?php
$destination = 'images';
$dom = new DOMDocument;
if (($handle = fopen("data/testcsvfile.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 100, ",")) !== FALSE) {
$num = count($data);
// get url from position in csv
$url = $data[6];
echo $row . " " . $url. PHP_EOL;
if(strlen($url) > 0){
// if we have a url, get the contents
$page = file_get_contents($url);
//echo $page;
$dom->loadHTML($page);
// find url using meta tag
$my_tags = $dom->getElementsByTagName('meta');
// find which one is the image and grab and save
foreach ($my_tags as $tag) {
if($tag->getAttribute("property") == "og:image"){
$image_url = $tag->getAttribute('content');
echo $image_url . PHP_EOL;
$the_image = file_get_contents($image_url);
$destinationName = str_replace('/', '_', sprintf(
"%s%s%s_%s_%s_%s",
$data[3],
$data[4],
$data[5],
$data[6],
$data[7],
$data[8]
));
$destinationPath = sprintf(
"%s/%s",
$destination,
$destinationName
);
file_put_contents($destinationPath, $the_image);
}
}
}
}
fclose($handle);
}
?>
我不知道我的理解正确:你想将文件从'的https牵强重命名:// www.instagram.com/p/BBzUXUFLrGH /''到100A1_https:// www.instagram.com/p/BBzUXUFLrGH/_48.8486557_2.3481125'? –
。图像目前正在通过随机计算机生成的与csv无关的命名约定(例如img_1)进行保存。 – eho