Bagaimana cara meningkatkan batas waktu eksekusi di php?

103

Bagaimana cara menambah batas waktu transaksi? Saya ingin mengupload video, tetapi video berukuran besar tidak diupload?

Itu melempar kesalahan The process *** exceeded the timeout of 60 seconds.

Aamir
sumber
1
Tentukan "batas waktu transaksi". Apa yang tidak berhasil dimana?
Pekka
1
Menurut Anda mengapa menurut Anda batas waktu "transaksinya"?
Akal Sehat Anda
video pendek berhasil diunggah. tapi video panjang tidak diunggah, saya pikir waktu habis.
Aamir
ini_set ('post_max_size', '200M'); ini_set ('upload_max_filesize', '200M'); ini_set ('max_execution_time', '200M'); ini_set ('max_input_time', '200M'); ini_set ('memory_limit', '200M'); set_time_limit (65536);
Aamir
1
lebih baik membagi file sebelum mengunggahnya. Ada banyak aplikasi yang bisa digunakan. Saya lebih memilih plupload.
bksi

Jawaban:

129

Anda perlu mengubah beberapa pengaturan di php.ini Anda:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must - sets the maximum time in seconds

Apakah lokasi PHP.ini Anda bergantung pada lingkungan Anda, informasi lebih lanjut: http://php.net/manual/en/ini.list.php

Hannes
sumber
maaf, saya tidak mengerti apa yang Anda maksud dengan itu :(
Hannes
@Aamir, Anda harus memiliki izin dari host web Anda untuk mengubah konfigurasi server web Anda. Seringkali, mereka tidak mengizinkan Anda mengubah hal-hal seperti itu.
hellozimi
bisakah saya mengubah upload_max_filesize dan max_execution_time di file htaccess?
Aamir
2
@Col, saya tidak setuju, dia ingin membuat perubahan dengan cepat dan tidak secara keseluruhan, jadi dia bertanya bagaimana dia bisa melakukan itu. Dan bahkan jika dia bertanya bagaimana dia bisa mengubah beberapa hal di php.ini, itu mungkin pertanyaan pemula, tetapi pertanyaan yang sah tetap sama.
Hannes
1
@IulianOnofrei baiklah, hanya merasa perlu untuk menunjukkan itu: D, tapi mungkin jika Anda tidak tahu apa itu masih bagus untuk mencarinya ... "Mereka yang tidak bisa belajar dari sejarah ditakdirkan untuk mengulanginya" dan semua itu …
Hannes
57

Anda harus dapat melakukannya selama runtime juga menggunakan

set_time_limit(100);

http://php.net/manual/en/function.set-time-limit.php

atau di vhost-config Anda

php_admin_value max_execution_time 10000

Memiliki batas waktu eksekusi global yang RENDAH sebagian besar merupakan ide bagus untuk alasan kinerja pada aplikasi yang tidak terlalu andal. Jadi, Anda mungkin ingin hanya mengizinkan skrip tersebut berjalan lebih lama yang memang harus dilakukan.

ps: Jangan lupa tentang post_max_size dan upload_max_filesize (seperti jawaban pertama yang diceritakan sudah)

Christoph Strasen
sumber
Jika Anda mengaturnya maka tidur akan diabaikan
Snake Eyes
21

Untuk melengkapi jawaban Hannes.

Anda perlu mengubah beberapa pengaturan di php.ini Anda:

upload_max_filesize = 2M 
;or whatever size you want

max_execution_time = 60
; also, higher if you must

Jika seseorang ingin memasukkan tanpa batas (saya tidak tahu mengapa tetapi jika Anda mau), Anda dapat mengatur waktu ke 0:

Anda perlu mengubah beberapa pengaturan di php.ini Anda:

upload_max_filesize = 0 

max_execution_time = 0

Dan jika Anda tidak tahu di mana php.ini Anda. Anda dapat membuat file "name.php" di server Anda dan meletakkan:

<?php phpinfo(); ?>

Dan di situs web Anda, Anda dapat melihat konfigurasi php.ini Anda dan ditandai di mana itu.

Edit pada 9 Januari 2015:

Jika Anda tidak dapat mengakses php.ini, Anda memiliki dua opsi lagi.

Anda dapat menyetel baris ini langsung di file "name.php" Anda tetapi saya tidak menemukan upload_max_filesize untuk opsi ini:

set_time_limit(0);

Atau di ".htaccess"

php_value upload_max_filesize 0
php_value max_execution_time 0
Lynxi
sumber
9

jika yang perlu Anda lakukan hanya spesifik untuk 1 atau 2 halaman saya sarankan untuk menggunakan set_time_limit agar tidak mempengaruhi keseluruhan aplikasi.

set_time_limit(some_values);

tetapi tentu saja 2 nilai ini (post_max_size & upload_max_filesize) dapat diselidiki.

Anda juga dapat mengaturnya melalui fungsi ini_set

ini_set('post_max_size','20M');
ini_set('upload_max_filesize','2M');

atau langsung di file php.ini seperti respon di atas oleh Hannes, atau bahkan set ke iin .htaccess seperti di bawah ini

php_value upload_max_filesize 2M
php_value post_max_size 20M
Komang
sumber
5

Sebagai tambahan dari jawaban di atas, Anda dapat menggunakan set_time_limit()fungsi:

http://php.net/manual/en/function.set-time-limit.php

meneruskan 0sebagai argumen akan membuat skrip Anda berjalan tanpa batas waktu.

Tomasz Kowalczyk
sumber
set_time_limit () tidak ada hubungannya dengan unggahan file
Akal sehat Anda
1
Ini tidak cukup akurat Kolonel pecahan peluru. Sementara di lingkungan Unix, waktu eksekusi maksimal dibandingkan dengan waktu CPU kumulatif yang digunakan oleh php-thread, pada sistem windows waktu absolut digunakan. Mengupload sebagian besar adalah "waktu menganggur" (IO-Tunggu). Tapi seperti yang Anda lihat, unggahan bisa berhenti meski memakan waktu terlalu lama.
Christoph Strasen
4

Jika Anda kebetulan menggunakan server Microsoft IIS , selain pengaturan php.ini yang disebutkan oleh orang lain, Anda mungkin perlu meningkatkan pengaturan batas waktu eksekusi untuk aplikasi PHP FastCGI di IIS Server Manager:

Langkah 1) Buka IIS Server Manager (biasanya di bawah Server Manager di Start Menu, lalu Tools / Internet Information Services (IIS) Manager ).

Langkah 2) Klik pada koneksi utama (tidak spesifik untuk domain tertentu).

Langkah 3) Di bawah bagian IIS , temukan Pengaturan FastCGI (ditampilkan di bawah).

masukkan deskripsi gambar di sini

Langkah 4) sinilah, klik kanan aplikasi PHP dan pilih Edit ... .

Langkah 5) Periksa batas waktu (ditampilkan di bawah).

masukkan deskripsi gambar di sini

Dalam kasus saya, batas waktu default di sini adalah 70 dan 90 detik; yang pertama menyebabkan 500 Internal Server Error pada skrip PHP yang membutuhkan waktu lebih dari 70 detik.

Michael
sumber
3

Anda memiliki kesalahan ketik: ini_set ('max_input_time', '200M') - set nilai harus berupa int, seperti ini_set ('max_input_time', '200')

thanatoid
sumber
2

Saya tahu Anda secara khusus menanyakan tentang batas waktu PHP, tetapi yang tampaknya tidak disebutkan oleh orang lain adalah bahwa mungkin juga ada batas waktu di server web dan itu bisa terlihat sangat mirip dengan batas waktu PHP.

Jadi jika Anda sudah mencoba:

  1. Meningkatkan batas waktu di php.ini dengan menambahkan baris: max_execution_time = {jumlah detik yaitu 60 untuk satu menit}
  2. Meningkatkan batas waktu dalam skrip Anda sendiri dengan menambahkan: ini_set ('max_execution_time', '{number of seconds ie 60 for one minute}');

Dan Anda telah memeriksa dengan fungsi phpinfo () bahwa max_execution_time memang telah ditingkatkan, maka Anda mungkin ingin mencoba menambahkan ini ke .htaccess yang akan memastikan Apache sendiri tidak memiliki waktu habis:

RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]

Info lebih lanjut di sini: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-desthough-ini-set/

Paul Feakins
sumber
2

Pertama periksa php.inijalur file dengan phpinfo(); dan kemudian mengubah PHP.INIparameter:

upload_max_filesize = 1000M
memory_limit = 1500M
post_max_size = 1500M
max_execution_time = 30

memulai ulang Apache

set_time_limit(0); // safe_mode is off

ini_set('max_execution_time', 500); //500 seconds

Catatan : Anda juga dapat menggunakan perintah untuk menemukan php.inidi Linux

locate `php.ini`
Ashfaq Muhammad
sumber
1

Jika Anda tidak dapat mengedit php.ini (di server Anda misalnya), Anda dapat mencoba mengubah parameter php.ini dari dalam kode php Anda. Mencoba:

ini_set('max_execution_time', 'NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');

Jika itu tidak berhasil, coba juga setel 'set_time_limit' dengan cara yang sama, di luar itu saya akan mengatakan satu-satunya pilihan Anda adalah menghubungi host Anda. Pengaturan ini tidak dapat diubah saat dalam mode aman.

John
sumber
3
Hannes mendapatkan ini satu menit sebelum saya memposting, dan dengan benar menunjukkan bahwa set_time_limit () tidak boleh disetel oleh ini_set, seperti yang dinyatakan dalam jawaban ini, tetapi dengan meletakkan detik di dalam tanda kurung. Telah memilih hannes.
Yohanes
1

Uji apakah Anda dalam mode aman - jika tidak - tetapkan batas waktu (Nilai Lokal) sesuai keinginan Anda:

if(!ini_get('safe_mode')){

    echo "safe mode off";
    set_time_limit(180);// seconds

    phpinfo();// see 'max_execution_time'
}

* Anda tidak dapat mengatur batas waktu dengan cara ini jika safe mode 'on'.

TV-C-15
sumber
1

opsional: jika Anda menyetel konfigurasi tentang php.ini tetapi masih tidak dapat mengunggah

-ini adalah fungsi php untuk memeriksa kode kesalahan

$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;
}
Ruthe
sumber
0

Anda juga dapat menyetel waktu eksekusi maksimal di .htaccessfile Anda :

php_value max_execution_time 180
Wawasan
sumber
0

Untuk benar-benar meningkatkan batas waktu, saya lebih suka mendapatkan nilai saat ini terlebih dahulu. set_time_limittidak selalu menambah batas waktu. Jika nilai saat ini (misalnya dari php.iniatau yang sebelumnya ditetapkan) lebih tinggi dari nilai yang digunakan dalam panggilan saat ini set_time_limit, itu akan mengurangi batas waktu!

Jadi ada apa dengan pembantu kecil seperti ini?

/**
 * @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);

Lihat juga: Dapatkan max_execution_time dalam skrip PHP

algoritme
sumber