Formulář neodešle data emailem, pokud do něj přidám přílohu

Jarda_PT
Člen | 6
+
0
-

Zdravím, předem upozorňuji, že jsem spíš hodně zvědavý nadšenec, než expert, případné reagující tak prosím o shovívavost :-)

Mám formulář, je to odpovědní formulář na pracovní nabídku, který po vyplnění (email + prostý text + 1× checkbox + recaptcha) odesílá vyplněné informace emailem zaměstnavateli a uchazeči, který ho vyplnil potvrzení.
Pokud je součástí formuláře pouze email + text, formulář pošle oba emaily bez sebemenších problémů.
Pokud přidám jednu přílohu, formulář pošle email pouze uchazeči, zaměstnavateli ne, stránka hlásí Server error, a v logu chybu:
Nette\InvalidStateException: Unable to move uploaded file ‚/www/hosting/prace.tips/tmp/phpOoI1NE‘ to ‚/www/hosting/prace.tips/www/www/../temp/životopis.pdf‘. failed to open stream: Permission denied

A pak ještě jedna varianta, pokud přidám 2 přílohy (je možno až 5), formulář se tváří, že vše proběhlo ok, stránka error nehlásí, uchazeč opět dostane email s potvrzením, ale zaměstnavatel zase nic.
Předpokládám, že formulář bude ok, problém bude s přílohou a jejím putováním přes temp, kde se soubor dočasně ukládá a pak se při odesílání formuláře, resp. emailu vytáhne a k emailu přiloží. Píšu to dost neodborně, jde mi pouze o potvrzení správnosti této úvahy. Ještě jedna věc, problém není ve velikosti souborů, jsou tam nastavené dostatečné limity, ani na straně serveru, že by jakkoliv bránil odesílání emailů s přílohami.
Všem předem díky za nasměrování a jakoukoli radu.

Editoval Jarda_PT (2. 4. 16:32)

Pepino
Člen | 249
+
0
-

Má user pod kterým ten web běží práva zápisu do té složky temp?

Jarda_PT
Člen | 6
+
0
-

Ano, má

Kamil Valenta
Člen | 762
+
0
-
  1. zdá se, že práva nemá
  2. ten adresář temp je aktuálně prázdný?
  3. není dobré skladovat přílohy v adresáři www/… kde je riziko, že budou dostupné z prohlížeče (může být podchyceno jinou konfigurací)
Jarda_PT
Člen | 6
+
0
-

Budu vypadat jako debil, ale nemohu ten adresář temp najít :(
8 let to fungovalo bezchybně, práva nikdo neomezil/neměnil
se skladováním na www/ souhlasím, je to udělaný od začátku špatně
celé se to sekne tady:
$attachment = $values->file->move($tempFile); …/www/app/forms/JobContactForm/JobContactForm.php
$dest „/www/hosting/prace.tips/www/www/../temp/CV_Horáková.docx“ (60) v souboru Nette\Http\FileUpload->move

Ve fileUpload to vypadá takto:

 * Move uploaded file to new location.
	 * @param  string
	 * @return static
	 */
	public function move($dest)
	{
		$dir = dirname($dest);
		@mkdir($dir, 0777, TRUE); // @ - dir may already exist
		if (!is_dir($dir)) {
			throw new Nette\InvalidStateException("Directory '$dir' cannot be created. " . error_get_last()['message']);
		}
		@unlink($dest); // @ - file may not exists
		Nette\Utils\Callback::invokeSafe(
			is_uploaded_file($this->tmpName) ? 'move_uploaded_file' : 'rename',
			[$this->tmpName, $dest],
			function ($message) use ($dest) {
				throw new Nette\InvalidStateException("Unable to move uploaded file '$this->tmpName' to '$dest'. $message");
			}
		);
		@chmod($dest, 0777); // @ - possible low permission to chmod
		$this->tmpName = $dest;
		return $this;
	}

Editoval Jarda_PT (3. 4. 12:08)

Kamil Valenta
Člen | 762
+
0
-

Ten adresář je přeci zde: /www/hosting/prace.tips/www/temp/
Je potřeba zjistit jeho vlastníka, skupinu a práva na něm. A porovnat s tím, pod čím běží httpd.

Jarda_PT
Člen | 6
+
0
-

Jj, jasně, už jsem trochu mimo…
oprávnění 755, vlastník a skupina 33, popravdě, toto jsem nikdy neměl důvod řešit, je to pro mě nové
httpd 777, vlastník a skupina 1000
co z toho lze vyčíst?

Kamil Valenta
Člen | 762
+
0
-

Do adresáře s právy 755 může zapisovat jen vlastník (UID=33).
Pokud httd běží pod UID=1000, tak do něj nezapíše a proto to vykopne Permission denied.

Jednou možností je dát uživatele UID=33 do skupiny GID=1000 a adresáři www/temp dát práva 775 (zápis i pro skupinu),
nebo ten adresář smazat a vytvořit ho php skriptem, aby měl vlastníka UID=1000 a pak do něj půjde zapisovat i při právech 755.

Jarda_PT
Člen | 6
+
0
-

Skvěle, díky. Ted nastuduju, jak to udělat prakticky.
Ale to je už můj problém

Pepino
Člen | 249
+
-3
-

Nebo taky možnost – dát tomu temp adresáři práva 777.

Jarda_PT
Člen | 6
+
0
-

Tak chlapi, díky za pomoc, vše šlape jak má…