2017-02-12 69 views
3

我试图创建一个文件夹来存储我的所有图像,但它不会上传到我安装的主题中的特定上传文件夹中。图片未上传到WordPress中专门创建的文件夹

这里是我的代码:

if(isset($_FILES['file']['tmp_name'])) 
    { 
     $num_files = count($_FILES['file']['tmp_name']);//count file upload 


     for($i=0; $i<$num_files; $i++) 
     { 
      if(!is_uploaded_file($_FILES['file']['tmp_name'][$i])) 
      { 
       echo "no file upload!!"; 
      }else 
      { 
       if(@copy($_FILES['file']['tmp_name'][$i], "/upload/".$_FILES['file']['name'][$i])) 
       { 
        $path = "upload/".$_FILES['file']['name'][$i]; 
        //$sql = "insert into tblImage value ('".$path."')"; 

       }else 
       { 
        echo "cant upload"; 
       } 
      } 
     } 
    } 
+0

如果你想在主题文件夹中上传它们,你可能需要使用这个函数[get_template_directory_uri()](https://developer.wordpress.org/reference/功能/ get_template_directory_uri /)。将其前缀放在@copy目标中,以确保将其复制到正确的路径。查看链接了解更多详情。 – devkabiir

+0

我已经使用该功能,但它不起作用 – user5317518

+1

您是否启用了调试?在每个语句后尝试error_log()以查看发生了什么。尝试输出所有变量以查看哪些地方无法正常工作。 – devkabiir

回答

0

这是很难搞清楚究竟出了什么问题,因为我不知道你的设置,但尝试这些东西:

  1. 这是不明智的在这种情况下请使用@copy,尤其是在您试图弄清楚发生了什么问题的时候。除非在前缀@前复制,否则复制将在特殊情况下返回错误并显示其他错误消息。例如,如果你的磁盘已满,它将会自动失败。只需copy可能对此更有用。
  2. 您的文件命名至少难以破译。具体来说,你使用什么路径?像copy这样的PHP文件操作需要精确的路径信息。你的路径,/upload/,后面是upload/,指的是某些相对于某个任意位置的东西,可能会改变。要解决这个问题,找出一条好的绝对路径。如果您上传到WP上传,请从wp_upload_dir开始并从此处开始构建。
  3. 除非你绝对需要的文件副本从原始位置后,移动它的而不是复制它。请记住,您会将其移至上传文件夹,因此稍后会在其他地方提供。这也可以使您的move_uploaded_file()
  4. 有一些很棒的评论(如来自@kabiir)关于如何调试你的。很难弄清楚究竟是不是没有一些调试信息会出问题。

尝试:

if(isset($_FILES['file']['tmp_name'])) { 
    for ($i = 0; $i < count($_FILES['file']['tmp_name']); $i++) { 
     $file = $_FILE['file']['tmp_name'][$i]; 
     error_log('source: ' . $file); 
     if (is_uploaded_file($file) && isset($_FILE['file']['name'][$i])) { 
      $name = $_FILE['file']['name'][$i]; 
      error_log('uploaded name: ' . $name); 
      $destination = trailingslashit(wp_upload_dir()) . $name; 
      error_log('destination: ' . $destination); 
      if (!move_uploaded_file($source, $destination)) { 
       echo 'failed to move file.'; 
       continue; 
      } 
      // Now $destination contains where the file was moved to. 
     } 
    } 
} 

此代码将输出到您的日志(或其他任何地方你都错误日志指出)源文件+路径,上传的文件名和目标文件+路径,每文件。

除非有什么东西非常特别你在做什么,wp_handle_upload()应该照顾你的所有需求而不必重写这个。完成后,它会调用wp_handle_upload过滤器。钩住该过滤器链的末尾来执行SQL或其他任何操作。还有很多插件可以完成你想要做的事情,并且让你无需自己编写代码。

作为一个附注,你不应该在WP中完全手工创建SQL。使用wpdb类,使用$wpdb->prepare()函数。这也允许您使用$wpdb->prefix,这是您的表的前缀。 (你有prefixed your table and created it according to WP standards,对不对?)