เปลี่ยนขนาดไฟล์อัพโหลดสูงสุด


513

ฉันมีเว็บไซต์โฮสต์บนพีซีที่ฉันไม่สามารถเข้าถึงได้ ฉันมีรูปแบบการอัพโหลดที่อนุญาตให้ผู้คนอัพโหลดไฟล์ mp3 ได้สูงสุด 30MB สคริปต์ฝั่งเซิร์ฟเวอร์ของฉันทำใน PHP

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

คำตอบ:


877

คุณต้องตั้งค่าupload_max_filesizeและpost_max_sizeใน php.ini ของคุณ:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

หลังจากแก้ไขไฟล์ php.ini คุณต้องรีสตาร์ทเซิร์ฟเวอร์ HTTP เพื่อใช้การกำหนดค่าใหม่

หากคุณไม่สามารถเปลี่ยน php.ini ได้คุณจะโชคไม่ดี คุณไม่สามารถเปลี่ยนค่าเหล่านี้ในเวลาทำงาน การอัปโหลดไฟล์ขนาดใหญ่กว่าค่าที่กำหนดไว้ใน php.ini ini_setจะมีการล้มเหลวโดยการดำเนินการที่เวลาจะถึงการเรียกร้องให้

ดูรายละเอียดของคำสั่ง php.ini หลัก


4
คุณอาจทราบเส้นทางเริ่มต้นที่จัดเก็บไฟล์ php.ini หรือไม่
Yo Momma

1
บน Linux มันมักจะอยู่ใน / etc / php / หรือบางอย่างตามบรรทัดเหล่านั้น หากคุณอยู่บนเซิร์ฟเวอร์ที่ใช้ร่วมกันคุณจะโชคดีนอกเสียจากว่าผู้ให้บริการโฮสติ้งของคุณจะใจดีพอที่จะให้ไฟล์ php.ini ต่อผู้ใช้
Johannes Gorset

4
หากคุณใช้ WAMP ในหน้าต่างคุณสามารถแก้ไขได้โดยคลิกที่ไอคอน WAMP> PHP -> php.ini ใน Debian ไฟล์ปรับแต่งของฉันอยู่ใน / etc / php5 / apache2
meagar

19
post_max_sizeผมขอแนะนำให้ตั้งค่าขนาดที่สูงขึ้นใน ขนาดโดยรวมของเขตข้อมูลที่โพสต์อาจจะสูงกว่าขนาดไฟล์ดังนั้นหากคุณกำลังมีกรณีที่ขอบของคนที่อัปโหลดไฟล์ 40MB post_max_sizeมันจะล้มเหลวเนื่องจากเกิน
acme

2
โปรดสังเกตว่า memory_limit ยัง จำกัด ขนาดการอัพโหลด
Daniel

151

คุณสามารถเปลี่ยนได้ผ่าน.htaccessไฟล์

.htaccessไฟล์จะถูกเก็บไว้ในไดเรกทอรีเดียวกับ.phpไฟล์ของคุณ พวกเขาปรับเปลี่ยนการกำหนดค่าสำหรับโฟลเดอร์นั้นและโฟลเดอร์ย่อยทั้งหมด คุณเพียงแค่ใช้มันโดยการสร้าง.htaccessไฟล์ในไดเรกทอรีที่คุณเลือก (หรือแก้ไขถ้ามี)

ต่อไปนี้จะช่วยให้คุณสามารถเพิ่มขีด จำกัด การอัปโหลดของคุณ (หากผู้ให้บริการเซิร์ฟเวอร์อนุญาตให้เปลี่ยนแปลงการกำหนดค่า PHP ผ่าน.htaccess)

php_value upload_max_filesize 40M
php_value post_max_size 42M

3
ดูเหมือนว่ามันจะไม่ได้ผลเสมอไป ในเครื่อง dev ของฉันการตั้งค่าที่เหมาะสมใน. htaccess ทำงานได้ บนโฮสติ้งที่ใช้ร่วมกันอย่างไรก็ตามการตั้งค่านี้ใช้งานไม่ได้อย่างไรก็ตามข้อความแสดงข้อผิดพลาดแสดงว่าขนาดการอัปโหลดสูงสุดที่อนุญาตคือค่าที่ฉันตั้งไว้ใน. htaccess ดังนั้นสถานการณ์ที่แปลกประหลาดเกิดขึ้น
Eugeniu Torica

5
ดูเหมือนว่าการเพิ่มสิ่งนี้ใน. htaccess จะทำงานได้ก็ต่อเมื่อคุณใช้ Apache ลองใช้งานได้ดีสำหรับฉัน
AngelGris

ไม่สามารถใช้งานได้หาก 2 บรรทัดใน php.ini ไม่มีเครื่องหมายข้อคิดเห็น:; ชื่อสำหรับไฟล์ php.ini (.htaccess) ที่ผู้ใช้กำหนด ค่าเริ่มต้นคือ ".user.ini" ;user_ini.filename = ".user.ini" ; หากต้องการปิดใช้งานคุณสมบัตินี้ให้ตั้งค่าตัวเลือกนี้เป็นค่าว่าง;user_ini.filename =
Alan Deep

น่าสังเกตว่าถ้าคุณใช้ Apache CGI หรือ Fast CGI สิ่งนี้จะทำให้เกิดข้อผิดพลาด 500 ข้อ ล้อมสิ่งนี้ไว้ข้างใน <IfModule mod_php7.c> </IfModule>
Shardj

59

ฉันมีปัญหาเดียวกันและฉันสร้างไฟล์. user.ini และวางไว้ในไดเรกทอรีที่สคริปต์อัปโหลดตั้งอยู่ กว่าในไฟล์นั้นฉันตั้งค่าทั้งสองนี้:

  upload_max_filesize = 40M

  post_max_size = 40M

และมันก็ใช้งานได้ดีสำหรับฉัน!


2
ยิ่งใหญ่ ทำงานร่วมกับ fastcgi เปิดใช้งานด้วย ต้องการ PHP5.3 หรือใหม่กว่า
Ciantic

1
ตกลงสิ่งนี้ใช้ได้กับเซิร์ฟเวอร์ที่ใช้ร่วมกันเมื่อไม่มีสิ่งใดทำงานได้ หาที่ดี
Edward Potter

55

คุณยังสามารถใช้ฟังก์ชั่น ini_set (สำหรับรุ่น PHP ด้านล่าง 5.3) เท่านั้น:

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

อย่างที่ @acme กล่าวว่าใน php 5.3 และสูงกว่าการตั้งค่านี้คือคำสั่ง PHP_INI_PERDIR ดังนั้นจึงไม่สามารถตั้งค่าได้โดยใช้ ini_set คุณสามารถใช้ user.ini แทน


38
ใน PHP เวอร์ชันล่าสุดการตั้งค่า ini เหล่านี้เป็นPHP_INI_PERDIRเท่านั้นดังนั้นคุณจึงไม่สามารถตั้งค่าเหล่านี้ในสคริปต์ของคุณ ดูที่นี่สำหรับรายละเอียดเพิ่มเติม
acme

46

หากต้องการค้นหาไฟล์ ini ให้เรียกใช้ก่อน

php -i | grep -i "loaded configuration file"

จากนั้นเปิดไฟล์และเปลี่ยน

upload_max_filesize = 2M
post_max_size = 2M

แทนที่ 2M ด้วยขนาดที่คุณต้องการเช่น 100M

ฉันมีโพสต์บล็อกเกี่ยวกับข้อมูลเล็ก ๆ น้อย ๆ เช่นกันhttp://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-in-the-php-ini- ไฟล์สำหรับ WordPress


5
มันแสดงให้เห็นแฟ้มเป็น/etc/php5/cli/php.iniแต่ไฟล์ config /etc/php5/apache2/php.iniของฉันคือ บางชนิดทำให้เข้าใจผิด
Fredrick Gauss

มีไฟล์ php.ini 2 ไฟล์ ... และด้วยคำสั่งนั้นในคำตอบมันจะแสดงให้คุณเห็นว่าคุณกำลังใช้ไฟล์ใดอยู่! ดังนั้นคุณต้องทำการเปลี่ยนแปลงเพื่อให้มีผล!
lewis4u

40

ฉันมีปัญหาเดียวกันในอดีต .. และฉันแก้ไขมันผ่าน.htaccessไฟล์

เมื่อคุณทำการเปลี่ยนแปลงการกำหนดค่า php ผ่าน.htaccessคุณควรใส่การกำหนดค่าใน IfModuleแท็กอื่น ๆ ที่เกิดข้อผิดพลาดเซิร์ฟเวอร์ภายในจะเกิดขึ้น

นี่คือตัวอย่างมันใช้งานได้ดีสำหรับฉัน:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

และนี่คือการอ้างอิง php หากคุณต้องการทำความเข้าใจเพิ่มเติม http://php.net/manual/en/configuration.changes.php


5
ให้คุณมีความสามารถในการแทนที่
AbsoluteƵERØ

3
หากต้องการสนับสนุน PHP.7 ให้เพิ่มบล็อกเดียวกันกับ: <IfModule mod_php7.c>
Mostafa

16

ฉันแก้ไขปัญหานี้โดยการสร้างไฟล์ที่เรียกว่า.user.iniในไดเรกทอรีที่มีไฟล์สคริปต์ PHP อยู่ (ซึ่งหมายความว่าสคริปต์ PHP ใด ๆ ในไดเรกทอรีนี้จะได้รับการ จำกัด ขนาดไฟล์ใหม่)

เนื้อหาของ.user.iniถูก:

upload_max_filesize = 40M
post_max_size = 40M

2
นี่คือทางออกสำหรับฉัน ทำงานได้ดี หากคุณใช้เฟรมเวิร์กเช่น codeignitor ".user.ini" จะต้องอยู่ในตำแหน่งเดียวกับ index.php
The Dude

ขอบคุณ สำหรับฉันแล้ว เหมาะสำหรับโฮสติ้งที่ใช้ร่วมกันซึ่งคุณไม่สามารถเข้าถึง php.ini ได้ ฉันเพิ่งจะเพิ่มว่ามันใช้ได้ตั้งแต่ PHP 5.3
yacsha

6

ผมมีปัญหาเดียวกัน. ฉันลองสามวิธีที่มักจะแนะนำ:

  1. functions.php
  2. php.ini
  3. .htaccess

ไม่มีถ้าซึ่งแก้ปัญหาของฉัน ฉันใช้ godaddy และพบวิธีแก้ไขปัญหาที่แนะนำซึ่งก็คือ:

  1. ได้ไปที่เว็บโฮสติ้งแล้วจัดการ
  2. ภายใต้ซอฟต์แวร์ให้เลือกเลือกรุ่น PHP
  3. เลือกSwitch to PHP Optionsที่มุมด้านขวาบนของตารางเป็นสีฟอนต์: สีน้ำเงิน
  4. ที่ด้านล่างส่วนใหญ่คุณอาจมีupload_max_filesize = 2M
  5. ตอนนี้รู้สึกอิสระที่จะเปลี่ยน
  6. อย่าลืมคลิกปุ่มบันทึก !
  7. ตอนนี้ไปที่แผง wp-admin ของคุณเลือกสื่อแล้วเพิ่ม

Voila! ตอนนี้คุณมีขนาดไฟล์อัปโหลดสูงสุดที่แตกต่างกัน :)


6

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

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);

6

คำตอบนั้นค่อนข้างไม่สมบูรณ์คุณต้องทำ 3 สิ่ง

ใน php.ini ของการติดตั้ง php ของคุณ (หมายเหตุ: ขึ้นอยู่กับว่าคุณต้องการให้ CLI, apache หรือ nginx ค้นหา php.ini ที่ถูกต้องเพื่อจัดการสำหรับ nginx โดยปกติแล้วจะอยู่/etc/php/7.1/fpmที่ 7.1 ขึ้นอยู่กับรุ่นของคุณ/etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

หรือตั้งค่าอื่น ๆ รีสตาร์ท / โหลด apache หากคุณติดตั้ง apache หรือphp-fpmสำหรับ nginx หากคุณใช้ nginx


5

ฉันต้องการเพิ่ม 2 เซนต์ของฉันที่นี่

ฉันใช้เว็บโฮสติ้งที่ใช้ร่วมกันและฉันจัดการกับปัญหานี้หลายครั้งพยายามแก้ไขด้วยตัวเอง แต่ก็ไม่มีประโยชน์ ในที่สุดฉันก็สามารถแก้ไขมันได้โดยตรวจสอบแหล่งที่มาของเว็บต่างๆและติดต่อผู้ให้บริการโฮสติ้งของฉัน คำถามของฉันคือ "ฉันจะเปลี่ยนค่า php memory_limitในการโฮสต์เว็บที่ใช้ร่วมกันได้อย่างไร", "ฉันจะเปลี่ยนค่า php upload_max_filesizeในการโฮสต์เว็บที่แชร์ได้อย่างไร", "ฉันจะเปลี่ยนค่า php max_input_varsในการโฮสต์เว็บที่ใช้ร่วมกันได้อย่างไร", "ฉันจะเปลี่ยนค่า php max_execution_timeใน webhosting ที่ใช้ร่วมกัน "," ฉันจะเปลี่ยนค่า php max_input_timeใน webhosting ที่ใช้ร่วมกันได้อย่างไร " และอีกมากมายโดยการกำหนดค่าหรือเปลี่ยน php.ini หรือ.htaccessไฟล์ ฉันพยายามเปลี่ยนพวกเขา แต่มีปัญหาเกิดขึ้น ในที่สุดฉันก็ติดต่อผู้ให้บริการโฮสต์ของฉันและปรากฎว่าฉันตั้งค่า php เป็น native พวกเขาเปลี่ยนเป็น php 5.6

"PHP ของคุณถูกตั้งค่าเป็นโหมด 'เนทีฟ' ซึ่งหมายความว่าคุณไม่สามารถแทนที่ค่าเหล่านั้นได้ฉันเปลี่ยนคุณเป็น '5.6' ดังนั้นคุณน่าจะไปได้ดี"

หลังจากนั้นฉันเชื่อมต่อเว็บไซต์ของฉันผ่าน ftp Filezilla และอย่าลืมทำให้ทั้งสองบริการ ftp ของคุณแสดงไฟล์ที่ซ่อนอยู่และคอมพิวเตอร์ในพื้นที่ของคุณให้ทำเช่นนั้นเพราะ.htaccessไฟล์ถูกซ่อนอยู่ในแล็ปท็อปของฉันและในเว็บไซต์ของฉัน มีอยู่ในโฟลเดอร์ public_html ฉันเพิ่งดาวน์โหลดและเพิ่มรหัสต่อไปนี้ที่ส่วนท้ายของไฟล์จากนั้นอัปโหลดกลับไปที่เซิร์ฟเวอร์:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ทุกอย่างทำงานได้อย่างถูกต้องในขณะนี้หากคุณประสบปัญหากรุณาเขียนที่นี่และเตือนฉันเพื่อให้ฉันสามารถเปลี่ยนรหัสที่แสดงด้านบน โดยวิธีการที่ฉันยังอัปโหลดภาพบางส่วนที่แสดงการเปลี่ยนแปลง

อีกอย่างหนึ่งที่ฉันเกือบลืมพูดถึงการติดตั้ง ZipArchive บนบริการเว็บโฮสติ้งที่ใช้ร่วมกันของฉันฉันจัดการข้อกำหนดนั้นเพื่อติ๊กโดยเพียงไปที่การตั้งค่า php ผ่าน cpanel ของฉันคลิกที่ส่วนขยายตัวเลือก php จากนั้นเลือกส่วน zip

ขอบคุณ

PS: ฉันเปิดรับแนวปฏิบัติที่ดีและหากคุณเห็นการปฏิบัติที่ไม่ดีที่นี่โปรดแจ้งให้ฉันทราบฉันจะพยายามเปลี่ยนพวกเขา ขอบคุณ


4

บางทีนี่อาจเป็นความคิดเห็นของ @ seanb123 และ @Fredrick Gauss แสดงความคิดเห็นในความคิดเห็นของเขา แต่สำหรับฉันใน Drupal 8.1 กับ PHP 7 ไฟล์ที่ฉันต้องการแก้ไขอยู่ที่นี่:

/etc/php/7.0/apache2/php.ini

ฉันได้แก้ไขไฟล์ php.ini อื่น ๆ อีกสี่ไฟล์ซึ่งรวมถึงไฟล์ที่เรียกว่า "ไฟล์การกำหนดค่าโหลด" ( php -i | grep -i "loaded configuration file") และไฟล์ที่พบในหน้า info.php แต่ไม่มีใครช่วยได้ กุญแจสำคัญในการค้นพบเส้นทางที่ถูกต้องพบได้ในเว็บไซต์ตั้งแต่ปี 2012 พวกเขาบอกว่าเส้นทางนั้น"/etc/php5/apache2/php.ini"นั้นเลิกใช้แล้วแม้จะกลับมาแล้ว แต่มันก็ให้เบาะแสที่ฉันจะหาได้ สำหรับ PHP7 นั้นแตกต่างจาก PHP5 เล็กน้อย แต่แนวคิดก็เหมือนกัน

บางทีนี่อาจช่วย schmuck ที่ทำอะไรไม่ถูกอย่างฉันได้

อย่างที่กล่าวไว้คำตอบของ OP ในกรณีของฉันคือคนที่มีสิทธิ์ของผู้ดูแลระบบในกล่องจะต้องทำ

เว็บไซต์ที่ช่วยฉัน: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

สิ่งนี้ยังแก้ไขได้ที่นี่: จำกัด ขนาดไฟล์นำเข้าใน PHPMyAdmin

แก้ไข: ข้อความทั้งหมดของบันทึกย่อของฉันต่อตัวเอง:

ในการเปลี่ยนขนาดการอัปโหลดสูงสุดให้แก้ไข upload_max_filesize และ [หากจำเป็น?] post_max_size ใน /etc/php/7.0/apache2/php.ini (หรือในเวอร์ชั่นที่เก่ากว่า: /etc/php5/apache2/php.ini)

/etc/init.d/apache2 รีสตาร์ท

แก้ไขอีกครั้ง: เนื่องจากคุณกำลังนำเข้าไฟล์ขนาดใหญ่คุณอาจต้องเปลี่ยนการหมดเวลาสำหรับการประมวลผล ในกรณีของฉันไฟล์ชื่อ "config.default.php" ถูกพบที่/usr/share/phpmyadmin/libraries/config.default.phpตัวแปรที่$cfg['ExecTimeLimit'] = 300; ฉันเปลี่ยนของฉันเป็น 900 สำหรับการนำเข้าขนาดใหญ่เช่น หลังจากนั้นคุณต้องรีสตาร์ท apache


3

การแก้ปัญหาเหล่านั้นไม่ได้ผลสำหรับฉัน !! (ตั้งค่าเป็น 32M โดยค่าเริ่มต้น) ปัญหาส่วนใหญ่แล้วmax_allowed_packet

ฉันกำลังทำงานกับ localhost และกำลังใช้งานMAMPอยู่

นี่คือโซลูชั่น;

1. ถ้าคุณไม่มี my.ini

เพิ่ม

--max_allowed_packet=168435456

ถึง

...\MAMP\bin\startMysql.sh

2. ถ้าคุณมี my.ini

ภายใต้

[mysqld]

เพิ่ม

max_allowed_packet=100M

ทำ!


เพิ่ม max_allowed_packet = 128M ให้ทั้ง php.ini และ .user.ini และนั่นทำให้ฉันได้!
Molasar

2

สามสิ่งที่คุณต้องตรวจสอบ

upload_max_filesize, memory_limitและpost_max_sizeในแฟ้มการกำหนดค่า php.ini ว่า

การตั้งค่าทั้งสามนี้ จำกัด ขนาดข้อมูลสูงสุดที่ PHP สามารถส่งและจัดการได้

โดยปกติpost_max_sizeและจำเป็นที่จะต้องมีขนาดใหญ่กว่าmemory_limitupload_max_filesize


ดังนั้นสามตัวแปรทั้งหมดที่คุณจำเป็นต้องตรวจสอบให้แน่ใจว่า


2

ด้วยWAMPมันง่ายทั้งหมด

WAMP ไอคอน> PHP> การตั้งค่า PHP> upload_max_filesize = nM> n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M, หรือเลือก (กำหนดเอง))

บริการโหลดซ้ำอัตโนมัติ

แต่ถ้าคุณไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้อย่างแท้จริงคุณอาจต้องการสำรวจการเขียนchunkingAPI


0

ฉันยังมีปัญหานี้และแก้ไขได้โดยการตั้งค่าการตั้งค่านี้ /etc/nginx/nginx.conf

client_max_body_size 0;

0 ดังที่ไม่ จำกัด

และถ้าคุณมี reverse proxy ที่รันด้วย nginx เซิร์ฟเวอร์นั้นก็ควรมีการตั้งค่านี้ด้วย (นี่คือสิ่งที่ทำให้ฉันล้มเหลวที่นี่)


0

หากคุณแก้ไขไฟล์ php.ini ที่ถูกต้องให้ทำการรีสตาร์ท Apache หรือ Nginx และยังไม่สามารถใช้งานได้คุณต้องรีสตาร์ทphp-fpmด้วย:

sudo service php-fpm restart 

0

ขณะที่การเปลี่ยนแปลงทั่วโลกจะค่อนข้างมีความเสี่ยงผมพยายามที่จะเพิ่มมูลค่าการอัปโหลดสูงสุดสำหรับสคริปต์เดียว big_file_upload.phpด้วยเหตุผลบางอย่างini_setไม่ได้ช่วย หลังจากการตรวจสอบอีกครั้งฉันก็พบสิ่งนี้ ใส่ไว้ใน.htaccess(ยกเว้นว่ามีการเปลี่ยนชื่อผ่านAccessFileName)

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

ทำงานให้ฉัน

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