2017-02-12 122 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,對不對?)