Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将图像文件上载到文件夹+;在数据库中链接而不使用表单输入问题_Php_File_Input - Fatal编程技术网

Php 将图像文件上载到文件夹+;在数据库中链接而不使用表单输入问题

Php 将图像文件上载到文件夹+;在数据库中链接而不使用表单输入问题,php,file,input,Php,File,Input,我已经为一个问题挣扎了一段时间,希望有人能在这里帮助我 我正在创建一个PHP项目,将项目输入数据库以及相应的图像。 我为输入单个项目及其图像而创建的页面工作正常。 现在,我想在我的项目中创建另一个页面(使用“输入单个项目”页面中已经工作的功能),用户可以使用通过“输入类型=文件”选择的CSV文件以及所有相应的图像自动上载项目+图像。这些图像不在excel文件中,而是存储在名为c:\Uploads的文件夹中,应该移动到数据库中添加的另一个文件夹+链接。这些项目在csv文件的a列中有一个特定的名称(

我已经为一个问题挣扎了一段时间,希望有人能在这里帮助我

我正在创建一个PHP项目,将项目输入数据库以及相应的图像。 我为输入单个项目及其图像而创建的页面工作正常。 现在,我想在我的项目中创建另一个页面(使用“输入单个项目”页面中已经工作的功能),用户可以使用通过“输入类型=文件”选择的CSV文件以及所有相应的图像自动上载项目+图像。这些图像不在excel文件中,而是存储在名为c:\Uploads的文件夹中,应该移动到数据库中添加的另一个文件夹+链接。这些项目在csv文件的a列中有一个特定的名称(例如apple),而Uploads文件夹中相应的图像名为apple.jpg

csv文件上传本身工作正常,但是图像有很多问题。它们不是从表单中选择的,而是通过使用:

$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中提供的文件名,然后再覆盖它。这很复杂;)