przepraszam, nie mam pojęcia, co przez to rozumiesz :(
Hannes,
@Aamir, musisz mieć pozwolenie od swojego hosta, aby zmienić konfigurację swojego serwera WWW. Często nie pozwalają ci zmieniać takich rzeczy.
hellozimi
czy mogę zmienić upload_max_filesize i max_execution_time w pliku htaccess?
Aamir
2
@Col, nie zgadzam się, chce wprowadzać zmiany w locie, a nie w całej aplikacji, więc pyta, jak to zrobić. I nawet jeśli miałby zapytać, jak może po prostu zmienić niektóre rzeczy w php.ini, może to być pytanie dla początkujących, ale mimo wszystko uzasadnione pytanie.
Hannes
1
@IulianOnofrei w porządku, po prostu czułem potrzebę zwrócenia na to uwagi: D, ale może jeśli nie wiesz, co to jest, dobrze jest to sprawdzić… „Ci, którzy nie mogą się nauczyć z historii, skazani są na powtórzenie” i tak dalej …
Hannes,
57
Powinieneś być w stanie to zrobić również w czasie wykonywania za pomocą
Mając globalny limit czasu wykonywania, który jest NISKI, jest głównie dobrym pomysłem ze względu na wydajność niezbyt niezawodnych aplikacji. Więc możesz chcieć, aby te skrypty działały dłużej, niż jest to absolutnie konieczne.
ps: Nie zapomnij o post_max_size i upload_max_filesize (tak jak już powiedziano w pierwszej odpowiedzi)
set_time_limit () nie ma nic wspólnego z przesyłaniem plików
Your Common Sense
1
To nie jest wystarczająco dokładne, pułkowniku Shrapnel. Podczas gdy w środowiskach uniksowych maksymalny czas wykonania jest porównywany ze skumulowanym czasem procesora używanym przez wątek php, w systemach Windows używany jest czas bezwzględny. Przesyłanie odbywa się głównie w trybie „bezczynności” (IO-Wait). Ale jak widać, przesyłanie może się zatrzymać, gdy trwa to zbyt długo.
Christoph Strasen
4
Jeśli korzystasz z serwera Microsoft IIS , oprócz ustawień php.ini wspomnianych przez innych, może być konieczne zwiększenie limitu czasu wykonywania aplikacji PHP FastCGI w Menedżerze serwera IIS:
Krok 1) Otwórz Menedżera serwera IIS (zwykle w Menedżerze serwera w menu Start, a następnie w Narzędziach / Menedżer internetowych usług informacyjnych (IIS) ).
Krok 2) Kliknij główne połączenie (nie specyficzne dla żadnej konkretnej domeny).
Krok 3) W sekcji IIS znajdź FastCGI Settings (pokazane poniżej).
Krok 4) W nim prawym przyciskiem myszy aplikację PHP i wybierz Edycja ... .
Krok 5) Sprawdź limity czasu (pokazane poniżej).
W moim przypadku domyślne limity czasu wynosiły 70 i 90 sekund; z których pierwsza powodowała wewnętrzny błąd serwera 500 w skryptach PHP, który trwał dłużej niż 70 sekund.
Wiem, że pytasz konkretnie o limit czasu PHP, ale wydaje się, że nikt inny nie wspominał o tym, że na serwerze sieciowym może również występować limit czasu i może wyglądać bardzo podobnie do limitu czasu PHP.
Więc jeśli próbowałeś:
Zwiększenie limitu czasu w php.ini przez dodanie linii: max_execution_time = {liczba sekund czyli 60 na minutę}
Zwiększenie limitu czasu w skrypcie poprzez dodanie: ini_set ('max_execution_time', '{liczba sekund, czyli 60 na minutę}');
Sprawdziłeś za pomocą funkcji phpinfo (), że max_execution_time rzeczywiście został zwiększony, możesz spróbować dodać to do .htaccess, co zapewni, że sam Apache nie przekroczy limitu czasu:
Jeśli nie możesz edytować php.ini (na przykład na swoim serwerze), możesz spróbować zmienić parametry php.ini z poziomu kodu php. Próbować:
ini_set('max_execution_time','NUMBER OF SECONDS TO ALLOW BEFORE TIMEOUT');
Jeśli to nie zadziała, spróbuj również ustawić 'set_time_limit' w ten sam sposób, poza tym powiedziałbym, że jedyną opcją jest skontaktowanie się z gospodarzem. Tych ustawień nie można modyfikować w trybie awaryjnym.
Hannes dostał to minutę przed wysłaniem i poprawnie wskazuje, że set_time_limit () nie powinno być ustawiane przez ini_set, jak podano w tej odpowiedzi, ale przez umieszczenie sekund w nawiasach. Zagłosowano na hannes w górę.
John,
1
Sprawdź, czy jesteś w trybie bezpiecznym - jeśli nie - ustaw limit czasu (wartość lokalna) na to, co chcesz:
if(!ini_get('safe_mode')){
echo "safe mode off";
set_time_limit(180);// seconds
phpinfo();// see 'max_execution_time'}
* Nie możesz ustawić limitu czasu w ten sposób, jeśli tryb bezpieczny jest włączony.
opcjonalnie: jeśli ustawisz konfigurację o php.ini, ale nadal nie możesz przesłać
-to jest funkcja php do sprawdzania kodu błędu
$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;}
Aby naprawdę zwiększyć limit czasu, wolę najpierw uzyskać aktualną wartość. set_time_limitnie zawsze wydłuża termin. Jeśli aktualna wartość (np. Z php.inilub poprzednio ustawiona) jest wyższa niż wartość użyta w bieżącym wywołaniu set_time_limit, spowoduje to zmniejszenie limitu czasu!
Więc o co chodzi z takim małym pomocnikiem?
/**
* @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);
Odpowiedzi:
Musisz zmienić niektóre ustawienia w swoim php.ini:
Gdzie zlokalizowane jest twoje PHP.ini, zależy od twojego środowiska, więcej informacji: http://php.net/manual/en/ini.list.php
źródło
Powinieneś być w stanie to zrobić również w czasie wykonywania za pomocą
set_time_limit(100);
http://php.net/manual/en/function.set-time-limit.php
lub w twoim vhost-config
php_admin_value max_execution_time 10000
Mając globalny limit czasu wykonywania, który jest NISKI, jest głównie dobrym pomysłem ze względu na wydajność niezbyt niezawodnych aplikacji. Więc możesz chcieć, aby te skrypty działały dłużej, niż jest to absolutnie konieczne.
ps: Nie zapomnij o post_max_size i upload_max_filesize (tak jak już powiedziano w pierwszej odpowiedzi)
źródło
Aby uzupełnić odpowiedź Hannesa.
Musisz zmienić niektóre ustawienia w swoim php.ini:
Jeśli ktoś chce ustawić bez ograniczeń (nie wiem dlaczego, ale jeśli chcesz), możesz ustawić czas na 0:
Musisz zmienić niektóre ustawienia w swoim php.ini:
A jeśli nie wiesz, gdzie jest twój plik php.ini. Możesz zrobić plik "name.php" na swoim serwerze i wstawić:
Na swojej stronie możesz zobaczyć konfigurację twojego php.ini i jest zaznaczone, gdzie to jest.
Edycja 9 stycznia 2015 r .:
Jeśli nie możesz uzyskać dostępu do swojego php.ini, masz jeszcze dwie opcje.
Możesz ustawić tę linię bezpośrednio w swoim pliku "name.php", ale nie mogę znaleźć parametru upload_max_filesize dla tej opcji:
Lub w „.htaccess”
źródło
jeśli to, co musisz zrobić, dotyczy tylko 1 lub 2 stron, sugeruję użycie set_time_limit, aby nie wpłynęło to na całą aplikację.
ale oczywiście te 2 wartości (post_max_size i upload_max_filesize) podlegają zbadaniu.
możesz to ustawić za pomocą funkcji ini_set
lub bezpośrednio w pliku php.ini, jak powyższa odpowiedź od Hannesa, lub nawet ustaw ją w .htaccess jak poniżej
źródło
Jako uzupełnienie powyższych odpowiedzi możesz skorzystać z
set_time_limit()
funkcji:http://php.net/manual/en/function.set-time-limit.php
przekazanie
0
jako argument spowoduje, że skrypt będzie działał bez ograniczeń czasowych.źródło
Jeśli korzystasz z serwera Microsoft IIS , oprócz ustawień php.ini wspomnianych przez innych, może być konieczne zwiększenie limitu czasu wykonywania aplikacji PHP FastCGI w Menedżerze serwera IIS:
Krok 1) Otwórz Menedżera serwera IIS (zwykle w Menedżerze serwera w menu Start, a następnie w Narzędziach / Menedżer internetowych usług informacyjnych (IIS) ).
Krok 2) Kliknij główne połączenie (nie specyficzne dla żadnej konkretnej domeny).
Krok 3) W sekcji IIS znajdź FastCGI Settings (pokazane poniżej).
Krok 4) W nim prawym przyciskiem myszy aplikację PHP i wybierz Edycja ... .
Krok 5) Sprawdź limity czasu (pokazane poniżej).
W moim przypadku domyślne limity czasu wynosiły 70 i 90 sekund; z których pierwsza powodowała wewnętrzny błąd serwera 500 w skryptach PHP, który trwał dłużej niż 70 sekund.
źródło
Miałeś literówkę: ini_set ('max_input_time', '200M') - ustawiona wartość musi być int, jak ini_set ('max_input_time', '200')
źródło
Wiem, że pytasz konkretnie o limit czasu PHP, ale wydaje się, że nikt inny nie wspominał o tym, że na serwerze sieciowym może również występować limit czasu i może wyglądać bardzo podobnie do limitu czasu PHP.
Więc jeśli próbowałeś:
Sprawdziłeś za pomocą funkcji phpinfo (), że max_execution_time rzeczywiście został zwiększony, możesz spróbować dodać to do .htaccess, co zapewni, że sam Apache nie przekroczy limitu czasu:
Więcej informacji tutaj: https://www.antropy.co.uk/blog/php-script-keeps-timing-out-despite-ini-set/
źródło
Najpierw sprawdź
php.ini
ścieżkę pliku przezphpinfo()
; a następnie zmieniono parametryPHP.INI
:zrestartował Apache
Uwaga : możesz również użyć polecenia, aby znaleźć
php.ini
w systemie Linuxźródło
Jeśli nie możesz edytować php.ini (na przykład na swoim serwerze), możesz spróbować zmienić parametry php.ini z poziomu kodu php. Próbować:
Jeśli to nie zadziała, spróbuj również ustawić 'set_time_limit' w ten sam sposób, poza tym powiedziałbym, że jedyną opcją jest skontaktowanie się z gospodarzem. Tych ustawień nie można modyfikować w trybie awaryjnym.
źródło
Sprawdź, czy jesteś w trybie bezpiecznym - jeśli nie - ustaw limit czasu (wartość lokalna) na to, co chcesz:
* Nie możesz ustawić limitu czasu w ten sposób, jeśli tryb bezpieczny jest włączony.
źródło
opcjonalnie: jeśli ustawisz konfigurację o php.ini, ale nadal nie możesz przesłać
-to jest funkcja php do sprawdzania kodu błędu
źródło
Możesz także ustawić maksymalny czas wykonywania w swoim
.htaccess
pliku:źródło
Aby naprawdę zwiększyć limit czasu, wolę najpierw uzyskać aktualną wartość.
set_time_limit
nie zawsze wydłuża termin. Jeśli aktualna wartość (np. Zphp.ini
lub poprzednio ustawiona) jest wyższa niż wartość użyta w bieżącym wywołaniuset_time_limit
, spowoduje to zmniejszenie limitu czasu!Więc o co chodzi z takim małym pomocnikiem?
Zobacz też: Uzyskaj max_execution_time w skrypcie PHP
źródło