ทำไม $ _FILES จะว่างเปล่าเมื่ออัปโหลดไฟล์ไปยัง PHP


145

ฉันติดตั้ง WampServer 2 บนคอมพิวเตอร์ Windows 7 ของฉันแล้ว ฉันใช้ Apache 2.2.11 และ PHP 5.2.11 เมื่อฉันพยายามอัปโหลดไฟล์ใด ๆ จากแบบฟอร์มดูเหมือนว่าจะอัปโหลด แต่ใน PHP $_FILESอาร์เรย์จะว่างเปล่า ไม่มีไฟล์ในc:\wamp\tmpโฟลเดอร์ ฉันได้กำหนดค่าphp.iniให้อนุญาตการอัปโหลดไฟล์และอื่น ๆ tmpโฟลเดอร์ได้อ่าน / เขียนสิทธิพิเศษสำหรับผู้ใช้ปัจจุบัน ฉันนิ่งงัน

HTML:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <form enctype="multipart/form-data" action="vanilla-upload.php" method="POST">
        Choose a file to upload: <input name="uploadedfile" type="file" /><br />
        <input type="submit" value="Upload File" />
    </form>
</body>
</html>

PHP:

<?php
echo 'file count=', count($_FILES),"\n";
var_dump($_FILES);
echo "\n";
?>

2
คุณตรวจสอบบันทึกข้อผิดพลาดหรือไม่
Byron Whitlock

ฉันแน่ใจว่ามีบางอย่างที่โง่ที่คุณมองเห็น ตัวอย่างเช่นคุณแน่ใจแล้วหรือที่จะมีรหัสในการvanilla-upload.php?
Luca Matteis

ฮ่าฉันมีปัญหาเดียวกัน ฉันตรวจสอบบันทึกข้อผิดพลาดและมีข้อความแจ้งว่ามีการอัปโหลดไฟล์เกินขนาดสูงสุดที่อนุญาต
BrightIntelDusk

คำตอบ:


493

นี่คือรายการตรวจสอบสำหรับการอัปโหลดไฟล์ใน PHP:

  1. ตรวจสอบ php.ini เพื่อ:
    file_uploads = On
    post_max_size = 100M
    upload_max_filesize = 100M

    • คุณอาจจำเป็นต้องใช้.htaccessหรือ.user.iniถ้าคุณอยู่ในพื้นที่สาธารณะและไม่สามารถเข้าถึงphp.iniได้
    • ตรวจสอบให้แน่ใจว่าคุณกำลังแก้ไขไฟล์ ini ที่ถูกต้อง - ใช้phpinfo()ฟังก์ชั่นเพื่อตรวจสอบว่าการตั้งค่าของคุณถูกนำไปใช้จริง
    • ยังให้แน่ใจว่าคุณทำไม่ได้สะกดขนาด - มันควรจะเป็นไม่ได้100M 100MB
  2. ตรวจสอบให้แน่ใจว่า<form>แท็กของคุณมีenctype="multipart/form-data"แอตทริบิวต์ ไม่มีแท็กอื่นที่ใช้งานได้จะต้องเป็นแท็ก FORM ของคุณ ตรวจสอบอีกครั้งว่ามันสะกดถูกต้อง ตรวจสอบอีกครั้งว่า multipart / form-data ถูกล้อมรอบด้วย STRAIGHT QUOTES ไม่ใช่เครื่องหมายอัญประกาศอัจฉริยะจาก Word หรือจากบล็อกของเว็บไซต์ (WordPress แปลงเครื่องหมายคำพูดเป็นมุมฉาก! หากคุณมีหลายรูปแบบในหน้าตรวจสอบให้แน่ใจว่าทั้งสองมีแอตทริบิวต์นี้ พิมพ์ด้วยตนเองหรือลองใส่เครื่องหมายคำพูดเดี่ยวตรงด้วยตนเอง

  3. ตรวจสอบให้แน่ใจว่าคุณไม่มีช่องป้อนไฟล์สองช่องที่มีnameแอตทริบิวต์เดียวกัน หากคุณต้องการรองรับหลาย ๆ ตัวให้ใส่วงเล็บเหลี่ยมที่ท้ายชื่อ:

    <input type="file" name="files[]">
    <input type="file" name="files[]">
  4. ตรวจสอบให้แน่ใจว่าไดเร็กทอรี tmp และอัพโหลดของคุณมีการตั้งค่าการอนุญาตอ่านและเขียนที่ถูกต้อง โฟลเดอร์การอัปโหลดชั่วคราวระบุไว้ในการตั้งค่า PHP upload_tmp_dirดังนี้

  5. ตรวจสอบให้แน่ใจว่าไฟล์ปลายทางและไดเร็กทอรี tmp / upload ของคุณไม่มีช่องว่าง

  6. ตรวจสอบให้แน่ใจว่าทุก<form>หน้าของคุณมี</form>แท็กปิด

  7. method="POST"ตรวจสอบให้แน่ใจแท็กรูปแบบของคุณมี คำขอ GET ไม่สนับสนุนการอัปโหลดหลายส่วน / ฟอร์มข้อมูล

  8. ตรวจสอบให้แน่ใจว่าแท็กอินพุตไฟล์ของคุณมีแอตทริบิวต์ NAME แอตทริบิวต์ ID ไม่เพียงพอ! แอตทริบิวต์ ID มีไว้สำหรับใช้ใน DOM ไม่ใช่สำหรับ POST payloads

  9. ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้ Javascript เพื่อปิดการใช้งาน<input type="file">ข้อมูลของคุณในการส่ง

  10. ตรวจสอบให้แน่ใจว่าคุณไม่ได้อยู่ในรูปแบบที่ต้องการ <form><form></form></form>

  11. ตรวจสอบโครงสร้าง HTML ของคุณสำหรับแท็กที่ไม่ถูกต้อง / ทับซ้อนกันเช่น <div><form></div></form>

  12. ตรวจสอบให้แน่ใจด้วยว่าไฟล์ที่คุณกำลังอัปโหลดไม่มีตัวอักษรและตัวเลขใด ๆ อยู่ในนั้น

  13. ครั้งหนึ่งฉันใช้เวลาหลายชั่วโมงพยายามคิดว่าทำไมสิ่งนี้ถึงเกิดขึ้นกับฉันในทันที ปรากฎว่าฉันได้แก้ไขการตั้งค่าบางอย่างใน PHP .htaccessและหนึ่งในนั้น (ไม่แน่ใจว่ายัง) ที่ทำให้การอัปโหลดล้มเหลวและ$_FILESว่างเปล่า

  14. คุณอาจลองหลีกเลี่ยงการขีดล่าง ( _) ในname=""แอตทริบิวต์ของ<input>แท็ก

  15. ลองอัปโหลดไฟล์ขนาดเล็กมากเพื่อ จำกัด ว่าเป็นปัญหาขนาดไฟล์หรือไม่

  16. ตรวจสอบพื้นที่ว่างในดิสก์ของคุณ แม้ว่าจะมีน้อยมาก แต่ก็มีการกล่าวถึงในความคิดเห็นหน้าคู่มือ PHP นี้ :

    หากอาร์เรย์ $ _FILES ว่างเปล่าอย่างลึกลับแม้ว่ารูปแบบของคุณจะถูกต้องคุณควรตรวจสอบพื้นที่ดิสก์ที่มีอยู่สำหรับพาร์ติชันโฟลเดอร์ชั่วคราวของคุณ ในการติดตั้งของฉันการอัปโหลดไฟล์ทั้งหมดล้มเหลวโดยไม่มีการเตือน หลังจากฟันขบเขี้ยวเคี้ยวฟันมากฉันพยายามเพิ่มพื้นที่ว่างเพิ่มเติมหลังจากที่อัพโหลดไฟล์ทำงานได้อีกครั้ง

  17. ตรวจสอบให้แน่ใจว่าคุณไม่ได้ส่งแบบฟอร์มผ่านคำขอ AJAX POST แทนคำขอ POST ปกติที่ทำให้หน้าโหลดซ้ำ ฉันผ่านทุกจุดในรายการด้านบนและในที่สุดก็พบว่าสาเหตุที่ตัวแปร $ _FILES ของฉันว่างเปล่าคือฉันส่งแบบฟอร์มโดยใช้คำขอ AJAX POST ฉันรู้ว่ามีวิธีการอัปโหลดไฟล์ด้วย ajax ด้วย แต่นี่อาจเป็นเหตุผลที่ถูกต้องว่าทำไมอาร์เรย์ $ _FILES ของคุณว่างเปล่า

แหล่งที่มาสำหรับบางประเด็น:
http://getluky.net/2004/10/04/apachephp-_files-array-mysteriously-empty/


12
บางทีคำตอบ "ยอมรับ" อาจแก้ไขโพสต์ต้นฉบับได้ แต่คำตอบนี้เป็นคำตอบที่ฉันคิดว่ามีประโยชน์ที่สุด หากมีข้อสงสัยให้ดูแหล่งที่มาของเบราว์เซอร์ ตรวจสอบแต่ละรายการในรายการนี้และติดตามย้อนหลังฉันพบข้อผิดพลาดในที่ที่ไม่คาดคิดที่สุด หากคุณกำลังดิ้นรนกับปัญหาที่คล้ายกันเชื่อฉันมันอาจไม่ใช่ข้อผิดพลาดใน Apache ;)
quickthyme

3
นอกจากนี้ตรวจสอบให้แน่ใจว่าองค์ประกอบฟอร์มของคุณที่มีไฟล์อินพุตไม่ใช่ลูกขององค์ประกอบฟอร์มอื่น เช่น<form><form><input type="file"></form></form>
sudee

3
ว้าว! ขอบคุณสำหรับรายการนี้ ปัญหาของฉันคือ # 2 ฉันโทรมา$('#my-form')[0].reset();ในตัวจัดการการส่ง
กาวิน

2
ขอบคุณ ในกรณีของฉันหมายเลข 7 enctype = "multipart / form-data" คือผู้ร้าย
Thupten

3
DUDE คุณเป็นผู้ช่วยชีวิต ฉันใช้เวลาหลายชั่วโมงในการคิดออก (2) เป็นปัญหาของฉัน ... ขอบคุณ!
Mike Q

74

เท่าที่ HTML คุณได้ตั้งค่าส่วนนั้นอย่างถูกต้อง คุณมีenctype="multipart/form-data"สิ่งที่สำคัญมากที่ต้องมีในแบบฟอร์ม

เท่าที่คุณphp.iniติดตั้งบางครั้งในระบบหลายphp.iniไฟล์มีอยู่ ต้องแน่ใจว่าคุณกำลังแก้ไขสิ่งที่ถูกต้อง ฉันรู้ว่าคุณบอกว่าคุณได้กำหนดค่าphp.iniไฟล์ของคุณให้มีการอัปโหลดไฟล์ แต่คุณได้ตั้งค่าupload_max_filesizeและpost_max_sizeให้มีขนาดใหญ่กว่าไฟล์ที่คุณพยายามอัปโหลดหรือไม่ ดังนั้นคุณควรจะมี:

file_uploads = On; sounds like you already did this
post_max_size = 8M; change this higher if needed
upload_max_filesize = 8M; change this higher if needed

ไดเรกทอรีของคุณ: "c:\wamp\tmp"มีทั้งอ่านและเขียนสิทธิ์หรือไม่ คุณจำได้ว่าต้องรีสตาร์ท Apache หลังจากทำการphp.iniเปลี่ยนแปลงหรือไม่?



4
+1: สำหรับการรีสตาร์ทเซิร์ฟเวอร์ Apache ปลาย ผู้ใช้ Windows หลายคนลืมไป
shamittomar

36

เป็นสิ่งสำคัญที่จะเพิ่มลงenctype="multipart/form-data"ในแบบฟอร์มของคุณ

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

14

ขอบคุณทุกคนสำหรับคำตอบที่ครอบคลุมแตกต่างกันไป ทั้งหมดนั้นมีประโยชน์มาก คำตอบกลายเป็นสิ่งที่แปลกมาก ปรากฎว่า PHP 5.2.11 ไม่ชอบสิ่งต่อไปนี้:

post_max_size = 2G

หรือ

post_max_size = 2048M

หากฉันเปลี่ยนเป็นการ2047Mอัปโหลดจะทำงาน


17
โปรดทราบว่าค่าสูงดังกล่าวเป็นช่องโหว่ในการโจมตีนอกพื้นที่ / ddos เพียงเพิ่มสิ่งนี้เพื่อให้ผู้คนรับรู้มากเกินไปเมื่อพวกเขาพยายามคัดลอกและวางโซลูชันของคุณ อย่างไรก็ตาม 2 กิ๊กนั้นจะต้องใช้เวลาในการอัพโหลดนานเกินไป
มานูเอลอาร์เวดชมิดท์

ไม่ใหญ่ไปกว่านี้อีกแล้ว เรามีลูกค้าที่อัปโหลดไฟล์ในช่วง 1-3G ค่อนข้างสม่ำเสมอ เนื่องจากพวกเขากำลังอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ของตัวเองและพวกเขาเป็นเซิร์ฟเวอร์ที่อยู่ IP ที่ได้รับอนุญาตการแลกเปลี่ยนจึงค่อนข้างปกติและเป็นเพียงวิธีการอนุญาตให้ลูกค้าใช้อุปกรณ์ของพวกเขาในแบบที่พวกเขาต้องการใช้ พวกเขาจ่ายเงินไม่มีความเสี่ยงด้านความปลอดภัยไม่มีปัญหา
TheSatinKnight

8

ฉันมีปัญหาเดียวกันมอง 2 ชั่วโมงเป็นเรื่องง่ายมากที่เราตรวจสอบการกำหนดค่าเซิร์ฟเวอร์ของเราก่อน

ตัวอย่าง:

echo $upload_max_size = ini_get('upload_max_filesize');  
echo $post_max_size=ini_get('post_max_size');   

ประเภทของขนาดไฟล์ใด ๆ ที่เป็น:20mbแต่เราupload_max_sizeอยู่เหนือแต่อาร์เรย์20mb nullคำตอบคือเราpost_max_sizeควรจะยิ่งใหญ่กว่า upload_max_filesize

post_max_size = 750M  
upload_max_filesize = 750M

6

นี่เป็นอีกสาเหตุหนึ่งที่ฉันค้นพบ: เมื่อใช้ JQuery Mobile และ form data-ajax ถูกตั้งค่าเป็น true อาร์เรย์ FILES จะว่างเปล่า ดังนั้นตั้ง data-ajax เป็น false


5

ตรวจสอบให้แน่ใจว่าองค์ประกอบการป้อนข้อมูลของคุณมีแอตทริบิวต์ 'ชื่อ' <input type="file" name="uploadedfile" />

หากนี่หายไป $ _FILES จะว่างเปล่า


4

ฉันกำลังดิ้นรนกับปัญหาเดียวกันและทดสอบทุกอย่างไม่ได้รับการรายงานข้อผิดพลาดและดูเหมือนจะไม่มีอะไรผิดปกติ ฉันมี error_reporting (E_ALL) แต่ทันใดนั้นฉันก็รู้ว่าฉันไม่ได้ตรวจสอบ apache log และvoilà! มีข้อผิดพลาดทางไวยากรณ์ในสคริปต์ ... ! (ขาดหายไป "}")

ดังนั้นถึงแม้ว่านี่จะเป็นสิ่งที่เห็นได้ชัด แต่ก็สามารถลืมได้ ... ในกรณีของฉัน (linux) มันอยู่ที่:

/var/log/apache2/error.log

3

ไม่มีใครพูดถึงเรื่องนี้ แต่มันช่วยฉันออกมาได้และมีหลายที่บนอินเทอร์เน็ตที่พูดถึงมัน

ตรวจสอบให้แน่ใจว่า php.ini ของคุณตั้งค่าคีย์ต่อไปนี้:

    upload_tmp_dir="/path/to/some/tmp/folder"

คุณจะต้องตรวจสอบกับโฮสต์ของคุณหากพวกเขาต้องการให้คุณใช้เส้นทางไฟล์เซิร์ฟเวอร์ที่แน่นอน คุณควรจะเห็นตัวอย่างไดเรกทอรีอื่น ๆ ในไฟล์ php.ini ของคุณเพื่อตรวจสอบสิ่งนี้ ทันทีที่ฉันตั้งค่าฉันจะได้รับค่าในวัตถุ _FILES ของฉัน

สุดท้ายตรวจสอบให้แน่ใจว่าโฟลเดอร์ tmp ของคุณและทุกที่ที่คุณย้ายไฟล์มีสิทธิ์ที่ถูกต้องเพื่อให้สามารถอ่านและเขียนได้


2

ถ้าคุณกำลังพยายามที่จะอัปโหลดอาร์เรย์ของไฟล์แล้วคุณอาจต้องเพิ่มmax_file_uploadsในphp.iniซึ่งเป็นชุดที่จะเริ่มต้น20

หมายเหตุ : max_file_uploadsไม่สามารถเปลี่ยนแปลงได้นอก php.ini ดูPHP "Bug" # 50684


2

ผู้ร้ายที่เป็นไปได้อีกอย่างคือ apache redirects ในกรณีของฉันฉันได้ตั้งค่า httpd.conf ของ Apache ไว้เพื่อเปลี่ยนเส้นทางหน้าบางหน้าในเว็บไซต์ของเราไปเป็นรุ่น http และหน้าอื่น ๆ ไปยังหน้า https รุ่นของหน้าหากพวกเขายังไม่ได้ หน้าที่ฉันมีฟอร์มที่มีไฟล์อินพุตเป็นหนึ่งในเพจที่กำหนดค่าให้บังคับ ssl แต่เพจที่กำหนดให้เป็นแอ็คชันของฟอร์มได้รับการกำหนดค่าให้เป็น http ดังนั้นหน้าจะส่งการอัปโหลดไปยังเวอร์ชัน ssl ของหน้าการดำเนินการ แต่ apache กำลังเปลี่ยนเส้นทางไปยังหน้า http และหน้าข้อมูลการโพสต์รวมถึงไฟล์ที่อัปโหลดแล้ว


2

ตรวจสอบ php.ini ของคุณสำหรับenable_post_data_reading = เปิดเพราะ:

ปิดการใช้งานตัวเลือกนี้เป็นสาเหตุที่ทำให้ $ _POST และ $ _FILES ไม่ได้ที่จะมีประชากร วิธีเดียวที่จะอ่าน postdata นั้นจะเป็นการใช้ php: // input stream wrapper (... )

ในhttp://php.net/manual/en/ini.core.php#ini.enable-post-data-reading


1

หากสคริปต์หลักของคุณhttp://Some_long_URL/index.phpระมัดระวังในการระบุ URL แบบเต็ม (ที่มีความชัดเจนindex.phpและไม่เฉพาะhttp://Some_long_URL) ในactionฟิลด์ น่าแปลกที่ถ้าไม่มีสคริปต์ที่ถูกเรียกใช้งาน แต่ว่างเปล่ากับ $ _FILES!


1

ฉันพบปัญหาเดียวกันและพบว่า IDE ของฉันเป็นส่วนหนึ่งของปัญหา ฉันเปิดตัวดีบักเกอร์โดยตรงจาก IDE (PHPStorm) แทนที่จะใช้เบราว์เซอร์โดยตรง URL ที่วางไข่ของ IDE เป็นเช่นนี้:

"...localhost:63342/CB_Upload/index.php?_ijt=j2hcbacqepj87bvg66ncuohvne"

และเพียงแค่ใช้:

"...localhost/CB_Upload/index.php"

ทำงานได้ดี การตั้งค่าของฉันคือ PC / Windows 10 / WAMPSERVER 3.0.6 64 บิต


สิ่งเดียวกันที่นี่ฉันทำงานเป็นวงกลมเป็นเวลาหนึ่งชั่วโมง! ขอบคุณ
EKanadily

1

อย่าเชื่อถือตำแหน่งโฟลเดอร์ temp ที่ระบุโดยsys_get_temp_dirหากคุณอยู่ในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกัน

นี่คืออีกหนึ่งสิ่งที่จะตรวจสอบว่ายังไม่ได้กล่าวถึง ...

ผมถือว่าเป็นธรรมชาติที่โฟลเดอร์ที่ PHP /tmpสคริปต์ของฉันเก็บไว้อัพโหลดไฟล์ชั่วคราว ความเชื่อนี้ได้รับการเสริมด้วยความจริงที่ว่าผลตอบแทนecho sys_get_temp_dir() . PHP_EOL; /tmpนอกจากนี้ยังecho ini_get('upload_tmp_dir');ไม่มีอะไรส่งคืน

ในการตรวจสอบว่าไฟล์ที่อัปโหลดนั้นปรากฏใน/tmpโฟลเดอร์ของฉันสั้น ๆฉันได้เพิ่มsleep(30);คำสั่งลงในสคริปต์ของฉัน (ตามที่แนะนำไว้ที่นี่ ) และไปที่/tmpโฟลเดอร์ของฉันใน cPanel File Manager เพื่อค้นหาไฟล์ อย่างไรก็ตามไม่ว่าจะเกิดอะไรขึ้นไฟล์ที่อัพโหลดก็ไม่สามารถพบได้ที่นั่น

ฉันใช้เวลาหลายชั่วโมงเพื่อพยายามหาสาเหตุของสิ่งนี้และดำเนินการตามข้อเสนอแนะทุกข้อที่เสนอให้ที่นี่

ในที่สุดหลังจากค้นหาไฟล์เว็บไซต์ของฉันเพื่อค้นหาtmpฉันพบว่าเว็บไซต์ของฉันมีโฟลเดอร์อื่นที่มีชื่อtmpในไดเรกทอรีต่าง ๆ ฉันรู้ว่าสคริปต์ PHP ของฉันกำลังเขียนไฟล์ที่อัปโหลด.cagefs/tmpไว้ (การตั้งค่า"แสดงไฟล์ที่ซ่อน"ต้องเปิดใช้งานใน cPanel เพื่อดูโฟลเดอร์นี้)

เหตุใดsys_get_temp_dirฟังก์ชันจึงส่งคืนข้อมูลที่ไม่ถูกต้อง

นี่คือคำอธิบายจากเว็บเพจ PHP.net สำหรับsys_get_temp_dir(เช่นความคิดเห็นยอดนิยม):

หากทำงานบนระบบ Linux ที่ systemd มี PrivateTmp = true (ซึ่งเป็นค่าเริ่มต้นบน CentOS 7 และบางที distros รุ่นใหม่กว่า) ฟังก์ชันนี้จะส่งคืน "/ tmp" ไม่ใช่เส้นทางที่ยาวกว่าจริงและมีความยาวมาก

โพสต์ SO นี้จะทำการวิเคราะห์ปัญหาเช่นกัน:


0

ฉันพบปัญหาเดียวกันและไม่มีข้อผิดพลาด ตรวจสอบในไฟล์. htaccess ของคุณหากคุณมีหนึ่งไฟล์หากเปิดใช้งาน "MultiViews" ฉันต้องปิดการใช้งานพวกเขา



0

ฉันว่างเปล่า$_FILESเพราะหลังจาก<form enctype="multipart/form-data" method="post">ฉันวาง

</div>
<div style="clear:both"></div>

รหัสเริ่มต้นเป็นเช่น

<span class="span_left">Photos (gif/jpg/jpeg/png) </span>
<form enctype="multipart/form-data" method="post">
<input name="files[]" type="file" id="upload_file" />
<input type="button" id="upload" value="Upload photo" />
</form>

ฉันตัดสินใจที่จะแก้ไขและ

<div>
<span class="span_left">Photos (gif/jpg/jpeg/png) </span>
<form enctype="multipart/form-data" method="post">
</div>
<div style="clear:both"></div>
<input name="files[]" type="file" id="upload_file" />
<input type="button" id="upload" value="Upload photo" />
</form>
<div style="clear:both"></div>

ดังนั้นข้อสรุปคือหลังจากนั้น<form enctype="multipart/form-data" method="post">จะต้องเป็น<input name, type, idและต้องไม่เป็น<div>หรือบางแท็กอื่น ๆ

ในสถานการณ์ของฉันรหัสที่ถูกต้องคือ

<div>
<span class="span_left">Photos (gif/jpg/jpeg/png) </span>
</div>
<div style="clear:both"></div>
<form enctype="multipart/form-data" method="post">
<input name="files[]" type="file" id="upload_file" />
<input type="button" id="upload" value="Upload photo" />
</form>
<div style="clear:both"></div>

0

ฉันก็มีปัญหากับ $ _FILES ที่ว่างเปล่า รายการตรวจสอบด้านบนไม่ได้พูดถึง MultiViews ใน. htaccess, httpd.conf หรือ httpd-vhost.conf

หากคุณตั้งค่า MultiViews ในคำสั่งตัวเลือกสำหรับไดเรกทอรีของคุณที่มีเว็บไซต์ $ _FILES จะว่างเปล่าแม้ว่าส่วนหัวความยาวเนื้อหาหากแสดงว่าไฟล์ที่ฉันอัปโหลด


0

หากคุณใช้ JQuery Mobile

Ajax ไม่รองรับการใช้รูปแบบหลายส่วนที่มีอินพุตไฟล์ ในกรณีนี้คุณควรตกแต่งฟอร์มหลักด้วย data-ajax = "false" เพื่อให้แน่ใจว่าฟอร์มถูกส่งไปยังเซิร์ฟเวอร์อย่างถูกต้อง

<form action="upload.php" method="post" enctype="multipart/form-data"  data-ajax="false">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

0

แยกแบบฟอร์มของคุณออกจากหน้าที่คุณใช้เป็นหน้า php ง่าย ๆ ที่มีรูปแบบและรหัส php เท่านั้นและทดสอบแบบนั้น

bootstrap หรือสคริปต์ java ใด ๆ อาจล้าง _FILES [] นั่นคือกรณีของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.