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źć?
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.