Chyba pri vyrizovani pozadavku

- zool
- Člen | 144
Zdravím, mám menší problém na serverech jako je active nebo gigaserver,
náhodně se mi stává, že mi server nevrátí stránku, přesné znění
chyby je
"
Chyba pri vyrizovani pozadavku
Server nevratil zadnou webovou stranku, kterou by bylo mozne zobrazit.
Pravdepodobna pricina teto chyby je ve scriptu, ktery webovou stranku
generuje.
"
Používám nette 2.1.1 a k tomu nejnovejší dibi 2.1.1. Nesetkal se s tím
už někdo?
Problém je, že nevím, kde můžu zjistit který script to dělá.
Díky, budu rád za každý návrh

- Jiří Nápravník
- Člen | 710
logy, at uz z Debugger nebo error_logy nerikaji nic?
pak je taky dost mozny, ze server nemusi stihat, meli jsme s tim podobne problemy, proste se nezpracoval php skript a nebylo co vykreslit, tak tohlevyhazoval. Jednou taky byl problem, ze bylo deseti tisice session souboru, a server byl overloaded. Ale ot jsou spsie krajni meze, pokud nerikaji nic logy…

- zool
- Člen | 144
to je právě ten problém, že logy nic neříkají. Na gigaserveru mi říkaly, že se postupně přeplňuje memory limit obecně. Ten je vždy počítán na každý spuštěný skript. Ale to mi nepřijde správně. Když se stránka zobrazí tak to bere maximálně do těch 10 MB paměti.
Tento presenter to dělá v celku často, zde je kod, včetně předka. Třeba dělám něco špatně.
<?php
namespace PartnerModule;
use Models\Obrazky_zbo;
use Models\Zbozi;
use Nette\Application\UI\Form;
use Nette\DateTime;
use Nette\Http\FileUpload;
use Nette\Image;
use Nette\Utils\Strings;
class AkcePresenter extends BasePresenter
{
/** @var int */
public $id;
/** @var \Models\Zbozi @inject */
public $zbozi;
/** @var \Models\Obrazky_zbo @inject */
public $obrazky;
/** @var \DibiFluent */
public $akce;
protected function createComponentAkceForm( $name )
{
$form = new Form( $this, $name );
$form->addText("nazev","Název akce do 200 znaků")->setRequired("Název je povinný");
$form->addSelect("stranky_id","Zařazení do kategorie", $this->stranky->select("id, nazev")->where("kategorie = 1 AND stav=1 AND nazev != 'Menu'")->fetchPairs("id","nazev"))
->setPrompt("-- prosím vyberte --")
->setRequired("Zařazení je povnné");
$form->addText("datum_konec","Datum ukončení nabídky")->setType("date")->setRequired("Datum je povnné");
$form->addText("cena_puvod","Původní cena")
->setRequired("Cena je povnná")
->addRule(Form::INTEGER,"Cena musí být v celých korunná.");
$form->addText("sleva","Sleva v procentech")
->setRequired("Sleva je povnná")
->addRule(Form::INTEGER,"Cena musí být v celých korunná.");
$form->addHidden("cena");
$form->addText("ulice","Ulice, č.p.")->setRequired("Ulice je povinná");
$form->addText("mesto","Město")->setRequired("Město je povinný");
$form->addText("psc","PSČ")->setRequired("PSČ je povinný");
$form->addTextArea("kratky","Krátký popis");
$form->addTextArea("dlouhy","Dlouhý popis");
$form->addText("vyhoda1","Výhoda1");
$form->addText("vyhoda2","Výhoda2");
$form->addText("vyhoda3","Výhoda3");
$form->addUpload("soubory","Vložit jednotlivé fotografie", true);
$form->addSubmit("ok","Uložit nabídku");
$form->onSuccess[] = $this->akceFormSubmitted;
}
public function akceFormSubmitted( Form $form )
{
$values = $form->getValues();
$soubory = $values["soubory"];
$values["uzivatel_id"] = $this->user->id;
$values["adresa"] = Strings::webalize($values["nazev"]);
unset($values["soubory"]);
if($this->id)
{
}
else
{
$insert = $this->zbozi->insert($values);
foreach($soubory as $soubor)
{
$file = $soubor;
if($file->isOk())
{
if($file->isImage())
{
$name = time()."-".$file->sanitizedName;
$soubor = Image::fromFile($file);
$soubor->resize(800,600);
$soubor->save($this->fileStorage->wwwDir . "/images/produkty/".$name);
$data = array(
"zbozi_id" => $insert,
"soubor" => $name,
"datum" => new DateTime(),
"hlavni" => 0
);
$this->obrazky->insert($data);
}
}
}
}
$this->flashMessage("Akce byla uložena.");
$this->redirect('this');
}
public function actionDefault()
{
$this->akce = $this->zbozi->select("id, nazev, adresa, kratky, stav, (select soubor from obrazky_zbo ob where ob.zbozi_id=zbozi.id order by hlavni DESC LIMIT 1) as soubor")
->where("uzivatel_id = ?",$this->user->id);
}
public function renderDefault()
{
$this->template->akce = $this->akce;
}
public function actionNova()
{
}
public function renderNova()
{
}
public function handleAktivuj($idz)
{
$this->zbozi->db->update("zbozi",array("stav"=>1))->where("uzivatel_id = ? AND id = ?",$this->user->id,$idz)->execute();
$this->redirect("this");
}
public function handleDeaktivuj($idz)
{
$this->zbozi->db->update("zbozi",array("stav"=>0))->where("uzivatel_id = ? AND id = ?",$this->user->id,$idz)->execute();
$this->redirect("this");
}
}
Zde jeho předek
<?php
namespace PartnerModule;
use Models\Stranky;
abstract class BasePresenter extends \BasePresenter
{
/** @var \Models\Stranky @inject */
public $stranky;
public function startup(){
parent::startup();
if(!$this->user->isLoggedIn())
{
$this->flashMessage("Na tuto stránku mají přístup pouze přihlášení uživatele.");
$this->redirect(":Front:Stranky:");
}
}
public function beforeRender()
{
parent::beforeRender();
$this->template->uzivatel = $this->uzivatel->get($this->user->id);
}
}

- Jiří Nápravník
- Člen | 710
JJ, resize obrázku bych taky tipoval. Jestli má povoleno hosting Imagick, tak pouzij ten, pokud si dobre pamatuji, tak ten se npocita do memory_limit a bezi „mimo php“

- zool
- Člen | 144
No ono to resize používá až po odeslání formuláře, ale ta chyba
nastává právě už při návštěvě stránky. Administratoři z gigaserveru
říkají, že je největší pravděpodobnost v tom, že tam cacheji
požadavky a nějaký cache naroste až na kritickou hranici a spadne to. Ale
když se podívám do složky temp, tak ty cache mají tak do 100Kb. Dá se
nějak nastavít cache, jako třeba jiné ukládání? Ted nemyslím
složku.?
A nemůže to dělat akcelerátor?
Editoval zool (14. 4. 2014 16:33)