2014-10-31 3 views
1

Все, я использую это поле ввода:Недопустимый тип смещения при загрузке файла PHP

<input type="file" name="image_to_upload_image" accept="image/*"> 

Я затем пытается обработать загрузку файла с помощью следующего кода:

if ($_FILES["image_to_upload_image"]) { 
    echo "it will try and upload"; 
    $file = $_FILES["image_to_upload_image"]; 
    print_r($file); 
    $newupload = bmt_handle_attachment_new_post($file,$post_id); 
    echo "The newupload is: ".$newupload; 
    set_post_thumbnail($post_id, $newupload); 
} 

который вызывает следующую функцию:

function bmt_handle_attachment_new_post($file_handler,$post_id,$set_thu=false) { 
    // check to make sure its a successful upload 
    if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false(); 

    require_once(ABSPATH . "wp-admin" . '/includes/image.php'); 
    require_once(ABSPATH . "wp-admin" . '/includes/file.php'); 
    require_once(ABSPATH . "wp-admin" . '/includes/media.php'); 

    $attachment_id = media_handle_upload($file_handler, $post_id); 

    if (is_wp_error($attachment_id)) { 
     // There was an error uploading the image. 
    } else { 
     // The image was uploaded successfully! 
    } 

    // If you want to set a featured image from your uploads. 
    return $attachment_id; 
} 

я делаю то же самое, как в этом примере: http://codex.wordpress.org/Function_Reference/media_handle_upload

Почему это говорит о незаконном смещении типа?

UPDATE: У меня есть другая форма, которая имеет такое же поле ввода за исключением того, обрабатывает загрузки нескольких файлов:

<input type="file" name="kv_multiple_attachments[]" multiple="multiple" > 

Если я затем передать его в следующем виде обработчика:

if ($_FILES) { 
    $files = $_FILES["kv_multiple_attachments"]; 
    $gallery_id = $_POST['gallery_for_upload']; 
    foreach ($files['name'] as $key => $value) {    
      if ($files['name'][$key]) { 
       $file = array( 
        'name' => $files['name'][$key], 
        'type' => $files['type'][$key], 
        'tmp_name' => $files['tmp_name'][$key], 
        'error' => $files['error'][$key], 
        'size' => $files['size'][$key] 
       ); 
       $_FILES = array ("kv_multiple_attachments" => $file); 
       foreach ($_FILES as $file => $array) {       
        $newupload = bmt_handle_attachment($file,$pid,$gallery_id); 
         //$thumb_url = wp_get_attachment_thumb_url($newupload); 
         //echo "<img src=".$thumb_url.">"; 
       } 
      } 
     } 
    } 

Затем используйте одна и та же функция обработки:

function bmt_handle_attachment($file_handler,$post_id,$gallery_id,$set_thu=false) { 
// check to make sure its a successful upload 
if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false(); 

require_once(ABSPATH . "wp-admin" . '/includes/image.php'); 
require_once(ABSPATH . "wp-admin" . '/includes/file.php'); 
require_once(ABSPATH . "wp-admin" . '/includes/media.php'); 

$attachment_id = media_handle_upload($file_handler, $post_id); 
update_post_meta($attachment_id, 'bmt_gallery_id', $gallery_id); 

// If you want to set a featured image frmo your uploads. 
return $attachment_id; 
} 

Файлы загружаются без проблем.

+2

Что такое '$ post_id'? Почему вы передаете '$ _FILES [" image_to_upload_image "]' как '$ file_handler', а затем выполняете' $ _FILES [$ file_handler] '? –

+0

@ Fred-ii- Это была ошибка копирования и вставки. Вопрос обновляется. – user1048676

+0

Посмотрел хорошо в то время;) * 1 комментарий удален * –

ответ

1

Ваша bmt_handle_attachment функция хочет имя поля ввода в качестве своего первого параметра. Вы передаете его $_FILES["image_to_upload_image"], когда вам нужно просто пройти "image_to_upload_image".

$file = "image_to_upload_image"; 
$newupload = bmt_handle_attachment_new_post($file,$post_id); 
Смежные вопросы