WordPress

załączniki – Używanie zmiennej $_FILES do tej samej funkcji do przesyłania obrazów i plików

  • 5 maja, 2016
  • 3 min read
załączniki – Używanie zmiennej $_FILES do tej samej funkcji do przesyłania obrazów i plików


Chcę zacząć mówić, że się uczę i próbuję zrozumieć użycie $_FILES I $file_handler które doprowadzają mnie do szaleństwa w tej funkcji przesyłania załączników z formularza frontendowego.

To, co odkryłem w moim wczorajszym pytaniu, polegało na tym, że using $_FILES w tę samą funkcję powoduje nadpisanie, więc jakiś miły koleś zasugerował zmianę tej zmiennej na coś innego $whatever. Obydwoma plikami można by wtedy zarządzać i przesyłać, ale oczywiście tak się jeszcze nie dzieje i przesyłane są tylko pliki. Posiadanie 2 formularzy wejściowych o stosunkowo nazwanych:

  • Dla obrazów: name="moreimages"
  • Dla plików: name="morefiles"

Zasadniczo dotarłem do tego punktu w moim php:

if ($_FILES)
    {
        // Get the upload attachment files
        $images = $_FILES['moreimages'];
        foreach ($images['name'] as $key => $value)
        {
            if ($images['name'][$key])
            {
                $image = array(
                    'name' => $images['name'][$key],
                    'type' => $images['type'][$key],
                    'tmp_name' => $images['tmp_name'][$key],
                    'error' => $images['error'][$key],
                    'size' => $images['size'][$key]
                );

                //here I've changed the $_FILES variable into something else
                $my_processed_images = array("moreimages" => $image);
                foreach ($my_processed_images as $image => $array)
                {
                    $newupload = project_images($image,$pid);
                }
            }
        }
        // Get the upload attachment files
        $files = $_FILES['morefiles'];
        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],
                    'post_mime_type' => $files['type'][$key]
                );
                $_FILES = array("morefiles" => $file);
                foreach ($_FILES as $file => $array)
                {
                    $uploadfile = project_file($file,$pid);
                }
            }
        }
    }

a moje funkcje wyglądają

function project_images($file_handler, $pid)
    {
        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');
        $image_id = media_handle_upload( $file_handler, $pid );
        return $image_id;
    }
function project_file($file_handler, $pid)
    {
        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');
        $file_id = media_handle_upload( $file_handler, $pid );
        update_post_meta($file_id,'is_prj_file','1');
        return $file_id;
    }

Rozumiem, że może być problem z moim $file_handler ale nie wiem jak to ogarnąć. To, co naprawdę się dzieje, polega na tym, że debugowanie pliku $more_images jest puste i nie jest brane pod uwagę i $_FILES w drugą pętlę jest ładowany Zamiast. Możesz mnie podwieźć?

Warto przeczytać!  6 najlepszych kreatorów motywów WordPress na rok 2024 (w porównaniu)

EDYTOWAĆ

Moje pola formularza HTML są takie dla całego:

<input id="moreimages" accept="image/png, image/jpeg, image/gif" type="file" name="moreimages[]" >

<input id="morefiles" accept=".zip,.pdf,.rar,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.psd,.ai" type="file" name="morefiles[]" >

Ponadto mój AJAX POST STATUS jest w porządku, wysyłając te parametry dla moreimages:

Content-Disposition: form-data; name="moreimages[]"; filename="Screen Shot 2016-04-05 at 16.48.10.png"
Content-Type: image/png

PNG

i te parametry dla morefiles:

Content-Disposition: form-data; name="morefiles[]"; filename="articolo-slow-food-ararat.docx"
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document

Myślę więc, że po raz kolejny problem polega na tym, jak te dane są odbierane w php.


Źródło