2016-12-31 69 views
-1

我遇到了一個我一直在努力的代碼問題。我只是無法弄清楚是什麼原因導致了這個錯誤。array_keys()期望參數1是數組,空給出

所以,我在CMS做一個上傳表單。如果我上傳9張照片,效果很好。如果我上傳超過9個文件,它給了我這個錯誤:

array_keys() expects parameter 1 to be array, null given in C:...upload.php on line 18 

有人可以幫我嗎?

代碼:

$file_ary = reArrayFiles($_FILES['ufile']); 
    //Reorganising the $_FILES: 

    function reArrayFiles(&$file_post) { 

     $file_ary = array(); 
     $file_count = count($file_post['name']); 
     $file_keys = array_keys($file_post); 

     for ($i=0; $i<$file_count; $i++) { 
      foreach ($file_keys as $key) { 
       $file_ary[$i][$key] = $file_post[$key][$i]; 
      } 
     } 

     return $file_ary; 
    } 


    foreach ($file_ary as $file) { 
     $dir = "imgs/" . $last_fotoid . "/"; 

     if (!file_exists($dir)) { 
     mkdir("imgs/" . $last_fotoid . "/"); 
     } 


     $target_file = $dir . basename($file["name"]); 

     move_uploaded_file($file["tmp_name"], $target_file); 

} 

我的形式:

<form method="post" action="upload.php" enctype="multipart/form-data"> 
      Select image to upload:<br> 
      <input type="file" name="ufile[]" multiple> 
      <input type="submit" value="Upload Image" name="submit"> 
</form> 
+1

您複製的代碼沒有多大幫助。但基本上你需要調用** ** reArrayFiles方法時,要確保,你傳遞一個數組 – Ali

+0

$ _FILES [「ufile」]是一個數組,所以它應該工作 – laurensvanheerde

+0

好,並非總是如此,只有當你提交表單。看看你發佈的代碼是不可能的。 – Ali

回答

0

明確指出$file_keys = array_keys($file_post);錯誤,以便公然存在,你在呼喚reArrayFiles()方法,但用一個空參數的情況下,而不是預期的數組(在這種情況下是文件)。您可以在將它傳遞給您的方法之前通過檢查$_FILES['ufile']的值來確認。

是當你正在訪問的網頁,在它的形式出現這種情況?或者只有在您提交表單時纔會發生?沒有看到完整的代碼,很難成爲%100,但是我認爲只有在作爲表單提交結果的POST請求時,纔會忘記執行代碼

基本上確保只啓動過程中,當您收到預期的文件。

+0

當我上傳9個文件時,此代碼正常工作。除此之外,我得到這個錯誤信息。這些文件也沒有被上傳。 – laurensvanheerde

+0

我只是舉了一個演示,試了一下,並設法複製相同的錯誤。但不是因爲文件的數量,而是因爲包含大文件而導致上傳過程失敗 – Ali

相關問題