formular TextArea limity serveru?

leroux
Člen | 9
+
0
-

zdravim, mam jednoduchy formular s TextArea, kde chci odesilat delsi text. V MAMPu nemam problem, na pracovnim serveru se mi ale data nad 12k nezpracuji.

$uploader = new Form;

$uploader->addTextArea('upload', 'Put your list in: ');
// ->setMaxLength('100000000');
$uploader->addSubmit('uploadlist', 'Upload');

$uploader->render();

if ($uploader->isSuccess()) {

$rawlist = $uploader->getValues();

  //file_put_contents("raw_data.txt",$rawlist['upload']);
  // echo "<pre>";
  // print_r($rawlist['upload']);
  // echo "</pre>";
...

Spravce mi zvedl hodnoty v php.ini:

post max size: 128M
memory limit: 128M

ale stale nic, at se snazim data jen vypsat nebo ulozit to txt.
Netusite prosim nekdo co dalsiho je potreba nastavit? v MAMPu po zpracovani dat mel raw_data.txt 18k, v praxi nepujde pres 32k.

Diky.

EDIT

Tohle mi jeste tedy hlasi tracy i v MAMPu i na pracovnim serveru.

PHP Notice: A non well formed numeric value encountered in .../vendor/nette/forms/src/Forms/Form.php:479
$maxSize <<= $units[$ch];

	/** @internal */
	public function validateMaxPostSize()
	{
		if (!$this->submittedBy || strcasecmp($this->getMethod(), 'POST') || empty($_SERVER['CONTENT_LENGTH'])) {
			return;
		}
		$maxSize = ini_get('post_max_size');
		$units = array('k' => 10, 'm' => 20, 'g' => 30);
		if (isset($units[$ch = strtolower(substr($maxSize, -1))])) {
			$maxSize <<= $units[$ch];
		}
		if ($maxSize > 0 && $maxSize < $_SERVER['CONTENT_LENGTH']) {
			$this->addError(sprintf(Validator::$messages[self::MAX_FILE_SIZE], $maxSize));
		}
	}

Editoval leroux (18. 9. 2021 18:51)

Michal Kumžák
Člen | 106
+
0
-

Na vyznačeném řádku je problém v tom, že $maxSize není int. V nové verzi je to upraveno.

	/** @internal */
	public function validateMaxPostSize(): void
	{
		if (!$this->submittedBy || !$this->isMethod('post') || empty($_SERVER['CONTENT_LENGTH'])) {
			return;
		}
		$maxSize = Helpers::iniGetSize('post_max_size');
		if ($maxSize > 0 && $maxSize < $_SERVER['CONTENT_LENGTH']) {
			$this->addError(sprintf(Validator::$messages[self::MAX_FILE_SIZE], $maxSize));
		}
	}
	/** @internal */
	public static function iniGetSize(string $name): int
	{
		$value = ini_get($name);
		$units = ['k' => 10, 'm' => 20, 'g' => 30];
		return isset($units[$ch = strtolower(substr($value, -1))])
			? (int) $value << $units[$ch]
			: (int) $value;
	}
leroux
Člen | 9
+
0
-

diky, jen to nebude problem toho, ze se data z formulare nezpracuji, kdyz v MAMPu jede vse ok i s touto chybou.
Spravce mi zvednul tyto hodnoty v php.ini:
post max size: 128M
upload max filesize: 128M
memory limit: 128M

ale stale nic.

Michal Kumžák
Člen | 106
+
0
-

Je tam jen ta textarea, nebo ještě něco dalšího? Zkus se podívat do konzole prohlížeče, tam ti to ukazuje co bylo odesláno.
Pak bych se podíval co ti hlásí php o velikosti post max size

bdump(ini_get('post_max_size'))
leroux
Člen | 9
+
0
-

Je tam jen textarea a submit button.
V konzoli nic nevidim, ani u uspesneho odeslani/ulozeni dat.

post max size: 128M

Michal Kumžák
Člen | 106
+
0
-

A zkoušel sis vypsat obsah $_POST a ne to co ti vrátí Nette?

leroux
Člen | 9
+
0
-

pri vetsim objemu dat mi print_r($_POST) da jen prazdny array
Array()

pri mensim objemu, kdy se data zpracuji, dostanu array s daty spravne
Array
(
[upload] ⇒ …data…

[uploadlist] ⇒ Upload
)

pres MAMP na localu mam v obou pripadech data spravne v $_POST

Michal Kumžák
Člen | 106
+
0
-

Tak nehledejte problém v nette, ale na serveru. Zkuste si udělat stejný form úplně mimo nette.

romanm
Člen | 27
+
0
-

Kolik máš nastavený max_input_vars ?

leroux
Člen | 9
+
0
-

romanm napsal(a):

Kolik máš nastavený max_input_vars ?

1000, stejne jako na MAMPu

leroux
Člen | 9
+
0
-

Michal Kumžák napsal(a):

Tak nehledejte problém v nette, ale na serveru. Zkuste si udělat stejný form úplně mimo nette.

Zkusil jsem i obycejne html s php, ale vysledek stejny jako s NETTE, bohuzel nedostavam zadnou chybovou hlasku, ani v consoli.
Uz me nenapada kterou hodnotu v php.ini na serveru zvednout.

<form method="post">

<textarea id="testform" name="testform" rows="20" cols="100">

  </textarea>
  <br><br>
  <input type="submit" value="Submit">
</form>

<?php

if (isset($_POST['testform'])) {
  echo "<pre>";
  print_r($_POST);
  echo "</pre>";
}

 ?>
Marek Bartoš
Nette Blogger | 1146
+
+2
-

Zkontroluj ještě max_input_time a max_file_uploads
Pokud je na serveru aktivní open_basedir, tak by měla zahrnovat složku pro dočasné soubory. K složce pro dočasné soubory (typicky /tmp by měl mít user (www-data) oprávnění pro čtení a zápis
Dále může jít o limit webserveru – u Apache direktiva LimitRequestBody, u Nginx ` client_max_body_size`. Nginx ti vrátí 413, u Apache si nejsem jistý.
Ideálně zkontrolovat logy webserveru i php.

romanm
Člen | 27
+
0
-

leroux napsal(a):

romanm napsal(a):

Kolik máš nastavený max_input_vars ?

1000, stejne jako na MAMPu

Jseš si jistý tím 1000 u sebe? Řešilo se totožné s mojí radou https://forum.nette.org/…vo-formulari a bylo to tím. Zkus ten max_input_vars zvednout

Michal Kumžák
Člen | 106
+
0
-

Jseš si jistý tím 1000 u sebe? Řešilo se totožné s mojí radou https://forum.nette.org/…vo-formulari a bylo to tím. Zkus ten max_input_vars zvednout

To je dost zvláštní, toto omezení je na počet proměných, ne jejich délku.

leroux
Člen | 9
+
+3
-

tak to nakonec bylo plnym systemovym /TMP

diky moc vsem, hezky den