วิธีเพิ่มระยะหมดเวลาการทำธุรกรรม ฉันต้องการอัปโหลดวิดีโอ แต่ไม่ได้อัปโหลดวิดีโอขนาดใหญ่?
มันแสดงข้อผิดพลาด The process *** exceeded the timeout of 60 seconds.
วิธีเพิ่มระยะหมดเวลาการทำธุรกรรม ฉันต้องการอัปโหลดวิดีโอ แต่ไม่ได้อัปโหลดวิดีโอขนาดใหญ่?
มันแสดงข้อผิดพลาด The process *** exceeded the timeout of 60 seconds.
คำตอบ:
คุณต้องเปลี่ยนการตั้งค่าบางอย่างใน php.ini ของคุณ:
upload_max_filesize = 2M
;or whatever size you want
max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds
PHP.ini ของคุณตั้งอยู่ขึ้นอยู่กับสภาพแวดล้อมของคุณหรือไม่ข้อมูลเพิ่มเติม: http://php.net/manual/en/ini.list.php
คุณควรจะสามารถทำได้ในระหว่างรันไทม์โดยใช้ไฟล์
set_time_limit(100);
http://php.net/manual/en/function.set-time-limit.php
หรือใน vhost-config ของคุณ
php_admin_value max_execution_time 10000
การมีขีด จำกัด เวลาดำเนินการทั่วโลกที่ LOW ส่วนใหญ่เป็นความคิดที่ดีสำหรับเหตุผลด้านประสิทธิภาพของแอปพลิเคชันที่ไม่น่าเชื่อถือ ดังนั้นคุณอาจต้องการอนุญาตให้สคริปต์เหล่านั้นทำงานได้นานขึ้นเท่านั้น
ps: อย่าลืม post_max_size และ upload_max_filesize (เหมือนคำตอบแรกที่บอก allready)
เพื่อให้คำตอบของ Hannes สมบูรณ์
คุณต้องเปลี่ยนการตั้งค่าบางอย่างใน php.ini ของคุณ:
upload_max_filesize = 2M
;or whatever size you want
max_execution_time = 60
; also, higher if you must
หากมีคนต้องการใส่ไม่ จำกัด (ฉันไม่รู้ว่าทำไม แต่ถ้าคุณต้องการ) คุณสามารถตั้งเวลาเป็น 0:
คุณต้องเปลี่ยนการตั้งค่าบางอย่างใน php.ini ของคุณ:
upload_max_filesize = 0
max_execution_time = 0
และถ้าคุณไม่รู้ว่า php.ini อยู่ที่ไหน คุณสามารถสร้างไฟล์ "name.php" ในเซิร์ฟเวอร์ของคุณและใส่:
<?php phpinfo(); ?>
และบนเว็บไซต์ของคุณคุณสามารถดูการกำหนดค่า php.ini ของคุณและมีการระบุว่าอยู่ที่ไหน
หากคุณไม่สามารถเข้าถึง php.ini ของคุณคุณมีอีกสองทางเลือก
คุณสามารถตั้งค่าบรรทัดนี้ได้โดยตรงในไฟล์ "name.php" ของคุณ แต่ฉันไม่พบตัวเลือก upload_max_filesize สำหรับตัวเลือกนี้:
set_time_limit(0);
หรือใน ".htaccess"
php_value upload_max_filesize 0
php_value max_execution_time 0
หากสิ่งที่คุณต้องทำเฉพาะสำหรับ 1 หรือ 2 เพจฉันขอแนะนำให้ใช้set_time_limitดังนั้นจึงไม่มีผลกับแอปพลิเคชันทั้งหมด
set_time_limit(some_values);
แต่แน่นอนว่าค่า 2 ค่านี้ (post_max_size & upload_max_filesize) อาจถูกตรวจสอบ
คุณสามารถตั้งมันผ่านini_setฟังก์ชั่น
ini_set('post_max_size','20M');
ini_set('upload_max_filesize','2M');
หรือโดยตรงในไฟล์ php.ini เช่นการตอบสนองด้านบนโดย Hannes หรือแม้กระทั่งตั้งค่าเป็น iin .htaccess เช่นด้านล่าง
php_value upload_max_filesize 2M
php_value post_max_size 20M
หากคุณใช้เซิร์ฟเวอร์Microsoft IISนอกเหนือจากการตั้งค่าphp.ini ที่กล่าวถึงโดยผู้อื่นคุณอาจต้องเพิ่มการตั้งค่าการหมดเวลาการดำเนินการสำหรับแอปพลิเคชัน PHP FastCGI ในตัวจัดการเซิร์ฟเวอร์ IIS:
ขั้นตอนที่ 1) เปิดตัวจัดการเซิร์ฟเวอร์ IIS (โดยปกติจะอยู่ในตัวจัดการเซิร์ฟเวอร์ในเมนูเริ่มจากนั้นตัวจัดการเครื่องมือ / บริการข้อมูลทางอินเทอร์เน็ต (IIS) )
ขั้นตอนที่ 2) คลิกที่การเชื่อมต่อหลัก (ไม่เฉพาะเจาะจงกับโดเมนใดโดเมนหนึ่ง)
ขั้นตอนที่ 3) ในส่วนIISค้นหาการตั้งค่า FastCGI (แสดงด้านล่าง)
ขั้นตอนที่ 4) จากนั้นคลิกขวาที่แอปพลิเคชัน PHP แล้วเลือกแก้ไข ......
ขั้นตอนที่ 5) ตรวจสอบการหมดเวลา (แสดงด้านล่าง)
ในกรณีของฉันระยะหมดเวลาเริ่มต้นที่นี่คือ 70 และ 90 วินาที อดีตที่ก่อให้เกิดข้อผิดพลาด 500 เซิร์ฟเวอร์ภายในบนสคริปต์ PHP ที่ใช้เวลานานกว่า 70 วินาที
นอกเหนือจากคำตอบข้างต้นคุณสามารถใช้ set_time_limit()
ฟังก์ชัน:
http://php.net/manual/en/function.set-time-limit.php
การส่งผ่าน0
เป็นอาร์กิวเมนต์จะทำให้สคริปต์ของคุณทำงานโดยไม่ จำกัด เวลา
คุณพิมพ์ผิด: ini_set ('max_input_time', '200M') - ชุดค่าต้องเป็น int เช่น ini_set ('max_input_time', '200')
ฉันรู้ว่าคุณกำลังถามเป็นพิเศษเกี่ยวกับการหมดเวลาของ PHP แต่สิ่งที่ดูเหมือนจะไม่มีใครพูดถึงก็คืออาจมีการหมดเวลาบนเว็บเซิร์ฟเวอร์และอาจดูคล้ายกับการหมดเวลาของ PHP
ดังนั้นหากคุณได้ลอง:
และคุณได้ตรวจสอบด้วยฟังก์ชัน phpinfo () แล้วว่า max_execution_time ได้เพิ่มขึ้นแล้วคุณอาจต้องการลองเพิ่มสิ่งนี้ใน. htaccess ซึ่งจะทำให้แน่ใจว่า Apache จะไม่หมดเวลา:
RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]
ข้อมูลเพิ่มเติมที่นี่: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-desunate-ini-set/
ขั้นแรกให้ตรวจสอบphp.ini
เส้นทางไฟล์โดยphpinfo()
; จากนั้นเปลี่ยนPHP.INI
พารามิเตอร์:
upload_max_filesize = 1000M
memory_limit = 1500M
post_max_size = 1500M
max_execution_time = 30
รีสตาร์ท Apache
set_time_limit(0); // safe_mode is off
ini_set('max_execution_time', 500); //500 seconds
หมายเหตุ : คุณยังสามารถใช้คำสั่งเพื่อค้นหาphp.ini
ใน Linux
locate `php.ini`
หากคุณไม่สามารถแก้ไข php.ini (เช่นบนเซิร์ฟเวอร์ของคุณ) คุณสามารถลองเปลี่ยนพารามิเตอร์ php.ini จากภายในโค้ด php ของคุณ ลอง:
ini_set('max_execution_time', 'NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');
หากไม่ได้ผลให้ลองตั้งค่า 'set_time_limit' ด้วยวิธีเดียวกันนอกเหนือจากนั้นฉันจะบอกว่าทางเลือกเดียวของคุณคือติดต่อโฮสต์ของคุณ ไม่สามารถแก้ไขการตั้งค่าเหล่านี้ได้ขณะอยู่ในเซฟโหมด
ทดสอบว่าคุณอยู่ในโหมดปลอดภัยหรือไม่ - ถ้าไม่ - ตั้งค่าการ จำกัด เวลา (Local Value) ตามที่คุณต้องการ:
if(!ini_get('safe_mode')){
echo "safe mode off";
set_time_limit(180);// seconds
phpinfo();// see 'max_execution_time'
}
* คุณไม่สามารถตั้งค่าการ จำกัด เวลาด้วยวิธีนี้หากเซฟโหมด "เปิด"
ทางเลือก: หากคุณตั้งค่า config เกี่ยวกับ php.ini แต่ยังไม่สามารถอัพโหลดได้
- นี่คือฟังก์ชัน php เพื่อตรวจสอบรหัสข้อผิดพลาด
$error_type = [];
$error_type[0] = "There is no error";
$error_type[1] = "The uploaded file exceeds the upload_max_filesize directive in php.ini.";
$error_type[2] = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
$error_type[3] = "The uploaded file was only partially uploaded.";
$error_type[4] = "No file was uploaded.";
//$error_type["5"] = "";
$error_type[6] = "Missing a temporary folder. Introduced in PHP 5.0.3.";
$error_type[7] = "Failed to write file to disk. Introduced in PHP 5.1.0.";
$error_type[8] = "A PHP extension stopped the file upload. PHP does not provide a way to ascertain which extension caused the file upload to stop; examining the list of loaded extensions with phpinfo() may help. Introduced in PHP 5.2.0.";
//------------------------------
//--> show msg error.
$status_code = $_FILES["uploadfile"]["error"];
if($status_code != 0){
echo $error_type[$status_code];
exit;
}
คุณยังสามารถกำหนดเวลาดำเนินการสูงสุดใน.htaccess
ไฟล์ของคุณ:
php_value max_execution_time 180
ในการเพิ่มระยะเวลาจริงๆฉันต้องการรับค่าปัจจุบันก่อน set_time_limit
ไม่ใช่การเพิ่มระยะเวลาเสมอไป หากค่าปัจจุบัน (เช่นจากphp.ini
หรือที่เคยตั้งไว้) สูงกว่าค่าที่ใช้ในการโทรปัจจุบันset_time_limit
จะลดระยะเวลาลง !
แล้วตัวช่วยเล็ก ๆ แบบนี้คืออะไร?
/**
* @param int $seconds Time in seconds
* @return bool
*/
function increase_time_limit(int $seconds): bool
{
return set_time_limit(max(
ini_get('max_execution_time'), $seconds
));
}
// somewhere else in your code
increase_time_limit(180);
ดูเพิ่มเติม: รับmax_execution_time ในสคริปต์ PHP