Php 将图像文件上载到文件夹+;在数据库中链接而不使用表单输入问题
我已经为一个问题挣扎了一段时间,希望有人能在这里帮助我 我正在创建一个PHP项目,将项目输入数据库以及相应的图像。 我为输入单个项目及其图像而创建的页面工作正常。 现在,我想在我的项目中创建另一个页面(使用“输入单个项目”页面中已经工作的功能),用户可以使用通过“输入类型=文件”选择的CSV文件以及所有相应的图像自动上载项目+图像。这些图像不在excel文件中,而是存储在名为c:\Uploads的文件夹中,应该移动到数据库中添加的另一个文件夹+链接。这些项目在csv文件的a列中有一个特定的名称(例如apple),而Uploads文件夹中相应的图像名为apple.jpg csv文件上传本身工作正常,但是图像有很多问题。它们不是从表单中选择的,而是通过使用:Php 将图像文件上载到文件夹+;在数据库中链接而不使用表单输入问题,php,file,input,Php,File,Input,我已经为一个问题挣扎了一段时间,希望有人能在这里帮助我 我正在创建一个PHP项目,将项目输入数据库以及相应的图像。 我为输入单个项目及其图像而创建的页面工作正常。 现在,我想在我的项目中创建另一个页面(使用“输入单个项目”页面中已经工作的功能),用户可以使用通过“输入类型=文件”选择的CSV文件以及所有相应的图像自动上载项目+图像。这些图像不在excel文件中,而是存储在名为c:\Uploads的文件夹中,应该移动到数据库中添加的另一个文件夹+链接。这些项目在csv文件的a列中有一个特定的名称(
$dirContent = glob("uploads/ExcelUpload/*.{jpg,jpeg,gif,png,JPG,JPEG,PNG,GIF}", GLOB_BRACE);
这确实给了我一个文件数组,但问题是,我需要文件本身,而不是作为字符串的文件路径
$handle = fopen($fileTmpName, "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$dt = new \DateTime("now", new \DateTimeZone("UTC"));
$now = $dt->format('Y-m-d H:i:s');
$data = json_encode($data,true);
$data = explode(";", $data);
$data[0] = ltrim($data[0],'"[');
$uniqueQuery = Items::findItemnumber($data[0]);
$itemnr = isset($uniqueQuery->itemnumber);
if ($itemnr != $data[0]){
$mainQuery = "INSERT into items (`user_id`,`item`,`name`,`alias`,`body`,`created_at`,`updated_at`)
values('".$user."','".$data[0]."','".$data[1]."','".$data[2]."','".$now."','".$now.")";
$result1 = $db->query($mainQuery);
foreach($dirContent as $f){
$e = 0;
$imageinfo = getimagesize($f);
$size = filesize($f);
$image = $f;
$f = json_encode($f,true);
$f = explode("/",$f);
$f[2] = rtrim($f[2],'"');
$f2 = explode(".",$f[2]);
if ($f2[0] == $data[0]){
$_FILES['itemImages']['name'] = explode(' ',$f[2]);
$_FILES['itemImages']['type'] = explode(' ',$imageinfo['mime']);
$_FILES['itemImages']['tmp_name'] = explode(' ',$image);
$_FILES['itemImages']['error'] = array_map('intval', explode(' ',$e));
$_FILES['itemImages']['size'] = array_map('intval', explode(' ',$size));
$uploads = new Uploads($_FILES['itemImages']);
itemImages::uploadItemImages($itemid->{'id'},$uploads);
价值:
$_FILES['itemImages']['tmp_name']
我得到的只是字符串,例如“c:\Uploads\apple.jpg”。但是,我需要它是实际的图像(它在上传时的tmp名称,就像服务器上的表单输入一样)。已经尝试了很多东西,但似乎没有发现任何有用的东西。有人能帮我吗?您正在覆盖
$\u文件['itemImages']['tmp\u name']=explode('',$image)代码>。。。“当像服务器上的表单输入一样上传时,它拥有的tmp名称)”仅适用于通过带有POST
的表单上传的文件(使用是上传的文件()
等)。鉴于这些问题,现在还不清楚您在这里到底想做什么。您好,感谢您的快速回复!基本上,我的“newuploads”类需要一个文件,而我只发送到它的文件路径。$image变量包含文件路径(例如c:\Uploads\apple.jpg)。我需要将“真实”文件发送到Uploads类,而不是它的文件路径。我试图实现的是将我的文件路径转换为服务器上的“真实”文件,以便从那里处理它。任何帮助都将不胜感激,我已经忙了好一阵子了。我在开发人员领域还是个新手……)所以基本上,我的问题是,你能把一个文件路径字符串转换成$u文件吗?如果这个文件仍然在某人的计算机上(C:驱动器)。。。您只需将csv发送到服务器(服务器上有一个文件路径列表)。。。不可以。服务器和浏览器都无法通过这种方式挖掘个人硬盘来获取文件。您还必须通过带有用户选择的POST(或ajax POST)将每个图像文件发送到服务器(他们必须选择每个文件,这是您看到的安全问题)。但是,要知道上传的文件是csv中的文件,您必须先查看$\u POST var中提供的文件名,然后再覆盖它。这很复杂;)