formular TextArea limity serveru?
- leroux
- Člen | 9
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
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;
}
- Michal Kumžák
- Člen | 106
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'))
- Michal Kumžák
- Člen | 106
Tak nehledejte problém v nette, ale na serveru. Zkuste si udělat stejný form úplně mimo nette.
- leroux
- Člen | 9
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 | 1280
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
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
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.