我正在寻找一种从文件名中获取详细信息以将其插入我的数据库的方法。我的问题是文件名总是有点不同,即使它有一个模式。
实施例: 亚利桑那州911545_1920.jpg 低音吉他913092_1280.jpg 艾菲尔塔,905039_1280.jpg 新纽约城市78181_1920.jpg
第一部分总是图像的形象,例如亚利桑那州,低音吉他,埃菲尔铁塔,纽约市,后面是独特的身份和图像的宽度。
我所追求的是:
名称ID和宽度
所以如果我运行例如getInfo(' arizona-911545_1920.jpg');
它将返回类似
的内容$extractedname
$extractedid
$extractedwidth
所以我可以轻松地将它保存在我的mysql数据库中,如
INSERT into images VALUES ('$extractedname','$extractedid','$extractedwidth')
最困扰我的是图片名称可能更长,例如纽约城市银行甚至纽约城市银行窗口所以我需要一种安全的方法来获取名称,无论多长时间这将是。
我确实知道如何更换 - 名称之间,这不是问题。我真的只是在寻找一种方法来提取我上面提到的细节。
如果有人能告诉我如何解决这个问题,我将不胜感激。
谢谢:)
答案 0 :(得分:0)
在这种情况下,最简单的方法之一是使用regexp,例如:
preg_match('/^(\D+)-(\d+)_(\d+)/', $filename, $matches);
// $matches[1] - name
// $matches[2] - id
// $matches[3] - width
答案 1 :(得分:0)
这是主要的想法。
让我们先选择一个文件。
文件名将是“bass-guitar-913092_1280.jpg”
首先,我们将爆炸拆分为变量 $ Temp
中的点(。)这会给我们一个 bass-guitar-913092_1280 和 jpg
的数组我们会选择数组的第一个继续,因为我们感兴趣的名称是这样的,所以我们将使用 $ Temp [0] < / p>
在此之后我们将再次拆分为(_)。
现在我们将推出一系列 bass-guitar-913092 和 1280
数组的第二个值是我们需要的,所以我们将选择 $ Temp [1]
最后一部分和其他部分一样简单,我们现在用( - )拆分文件名 $ Temp [0] 我们将得到它的最后一个值这是id $ Temp [count($ Temp)-1] ,我们将从数组列表中删除它,并使用 implode 和我们想要的分隔符连接其他所有内容
现在我们还可以使用函数 ucwords 来大写主名称上每个单词的每个首字母。
在下面的代码中,有两种获取名称的方法,一种使用小写字母,另一种使用每个单词的大写首字母,取消注释你想要的内容。
<?php
function ExtractFileInfo($fileName) {
$Temp = explode(".",$fileName);
$Temp = explode("_",$Temp[0]);
$width = $Temp[1];
$Temp = explode("-",$Temp[0]);
$id = $Temp[count($Temp)-1];
unset($Temp[count($Temp-1)]);
// If you want to have the name with lowercase letters Uncomment the Following:
//$name = implode(" ",$Temp);
// If you Want to Capitalize every first letter of the name Uncomment the Following:
//$name = ucwords(implode(" ",$Temp));
return array($name,$id,$width);
}
?>
这将返回一个包含3个元素名称,Id和宽度的数组
答案 2 :(得分:-1)
通过以下正则表达式模式提取您正在寻找的数据是最好的:
(.+)-(\d+_(\d+))
此处示例:https://regex101.com/r/oM5bS8/2
preg_match('(.+)-(\d+_(\d+))',"<filename>", $matches);
$extractedname = $matches[1];
$extractedid = $matches[2];
$extractedwidth = $matches[3];
编辑 - 重新阅读问题,您正在寻找提取技术,而不是如何将图像从页面发布到您的后端。我将把它留在这里作为参考。
当您通过html中的表单将文件发布到PHP后端时,需要的项目很少。
1)您需要确保您的表单类型是多部分的,以便它知道传递文件。
<form enctype="multipart/form-data">
2)你的php后端需要迭代文件并相应地保存它们。
以下是如何迭代正在提交的文件的示例。
foreach($_FILES as $file) {
$n = $file['name'];
$s = $file['size'];
if (!$n) continue;
echo "File: $n ($s bytes)";
}