FileResponse – Invalid response

Aishak
Člen | 30
+
0
-

Zdravím,

dnes se nám objevil zajímavý problém.

Mám formulář, který na základě zaškrtaných polí dokáže vygenerovat příslušný CSV soubor, který uloží na disk a pak následně jej pošle přes FileResponse. Bohužel při zaškrtnutí jednoho konkrétního pole se v Chromu ukáže chyba ERR_INVALID_RESPONSE (stejně tak nefunguje v ostatních prohlížečích). Soubor se i tak uloží tak jak má, jenom nastane ta chyba a to až při sendResponse.

<?php

	public function exportFormSuccess($form) {
		$values   = $form->getValues(true);
		$data     = $this->impexp->exportVarioData($values);
		$fileName = $this->uniqidReal() . '.csv';
		$filePath = 'csv/' . $fileName;
		$file     = fopen($filePath, "w");
		foreach ($data as $line) {
			fputcsv($file, (array) $line, ';');
		}
		fclose($file);
		$this->impexp->lsisLog('export', $filePath, 'vario');
		$response = new FileResponse($filePath);
		try {
			$this->sendResponse($response);
		} catch (Nette\Application\AbortException $ex) {
			// Zachytí chybu s kódem 0 a prázdnou zprávou -> udělám tedy jenom redirect
			$this->redirect('this');
		}

	}

?>

Zajímavé je, že mám na té samé stránce i seznam souborů, kde je i tlačítko na stažení, které směruje na metodu downloadFile.

<?php

	public function handleDownloadFile($filePath) {
		$response = new FileResponse($filePath);
		$this->sendResponse($response);
	}

?>

Zde naleznu i můj požadovaný soubor u kterého mi vyhodí sendResponse() chybu popsanou výše a přes downloadFile se mi soubor již podaří normálně stáhnout.
Nutno říci, že fungovala i první možnost bez problémů. Nedělal jsem žádný update, ani nic podobného.

Děkuji za jakoukoliv pomoc :)

CZechBoY
Člen | 3608
+
0
-

V logu není nic? Zkus si místo ukládání souboru na disk dát výpis do prohlížeče a koukni jestli tam nejsou nějaký chyby.

David Matějka
Moderator | 6445
+
0
-

proc tam mas to chytani AbortException? smaz to..

Aishak
Člen | 30
+
0
-

CZechBoY napsal(a):

V logu není nic? Zkus si místo ukládání souboru na disk dát výpis do prohlížeče a koukni jestli tam nejsou nějaký chyby.

V logu nic není.

David Matějka napsal(a):

proc tam mas to chytani AbortException? smaz to..

Nemá na to žádný vliv, původně jsem to tam ani neměl, zkoušel jsem nyní pouze k řešení chyby, zda mi to k něčemu nepomůže. Zapomněl jsem to tu odstranit.

Milo
Nette Core | 1283
+
0
-

Zkus po fclose() zavolat clearstatcache(), ale to vařím z vody.

Aishak
Člen | 30
+
0
-

Milo napsal(a):

Zkus po fclose() zavolat clearstatcache(), ale to vařím z vody.

Bohužel nepomohlo.

Již jsem zjistil možnou příčinu. Jde o množství dat, která se exportují do CSV. Co mi ale hlava nebere, že to vyhodí ERR_INVALID_RESPONSE, ale soubor lze prakticky stejným způsobem vzápětí stáhnout.

Milo
Nette Core | 1283
+
0
-

V logu PHP/Apache nic? Možná to padá na paměti.

Aishak
Člen | 30
+
+2
-

Milo napsal(a):

V logu PHP/Apache nic? Možná to padá na paměti.

Nejdřív v logu nebylo nic. Po pár dnech to začalo padat na paměť. To jsme si nedokázali vysvětlit, protože máme celkem velkou rezervu. Nakonec vyřešeno úplně jednoduše restartováním serveru. Proč se tohle stalo netušíme.

Děkuji všem za pomoc.