Autor Zpráva
SwimX
Profil
Dobrý den,

řeším do práce jeden takový problém s uploadem velkých souborů.
Pro upload malých souborů, naprosto v pořádku (do 50MB)
při uploadu například 500MB se soubor nauploaduje (podle prohlížeče) a pak se ve formuláři objeví prázdné políčko pro výběr souboru. Stránka se tváří, že video nebylo nikdy uploadováno, žádná chyba, vubec nic.

Wordpress stránka -> administrace -> formulář pro upload videa
<form action="" method="post" enctype="multipart/form-data">
  <input type="file" name="file"><br>
  <button type="submit" name="upload" >Nahrát video</button>
</form>


php kód pro upload a přenos na druhý server (kde se video konvertuje)
set_time_limit ( 7200 );

session_start();
 
$id = $_GET['post'];

if ( !id || !$_SESSION['upload'][$id] || !$_GET['kod']) {
	echo "Nepovoleny pristup";
	exit;
}

if ( ($_FILES['file']['size']/1024/1024) > MAX_SIZE_VIDEO ) {	
	echo "$kodovani<p style='color:red;'>Video je příliš velké<br>";
	form_video();
	exit;
}
preg_match('~\.([^\.]+)$~i', $_FILES['file']['name'], $matches);
$ext = strtolower ( $matches[1] );
if ( ! in_array( $ext, $valid_ext ) ) {	
	echo "$kodovani<p style='color:red;'>Video není ve správném formátu<br>";
	form_video();
	exit;
}
	
	$file = "../../data/".PREFIX.$id.".".$ext;
				
	move_uploaded_file($_FILES['file']['tmp_name'], $file) or die ("$kodovani<p>Video se nepodařilo nahrát.<br><a href='$path'>Znovu</a></p>");

	// set up basic connection
	$ftp_server = "************";
	$ftp_user_name = "************";
	$ftp_user_pass =	"**************";
	$error_message = "$kodovani Nepodařilo se připojit k servru pro konvert videa, kontaktujte prosím admina! <br><a href='$path'>Znovu</a> ";
	
	// set up a connection or die
	$conn_id = ftp_connect($ftp_server);
	if ( ! $conn_id ) {
		echo $error_message;
		@unlink( $file );
		exit;
	} 
		
	// login with username and password
	$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
	if ( !$login_result ){
		echo $error_message;
		@unlink( $file );
		ftp_close($conn_id);
		exit;
	}
	
	$remote_file = $id.".".$ext;
	
	if ( ! ftp_pasv($conn_id, true) ) {
		echo $error_message;
		@unlink( $file );
		ftp_close($conn_id);
		exit;
	}
	
	// upload a file
	if (ftp_put($conn_id, $remote_file, $file, FTP_BINARY)) {
		@unlink( $file );
		mysql_query("INSERT INTO $table SET id_post = $id, status = 0 ");
		echo "$kodovani<p>Vaše video bylo úspěšně nahráno. Pokračujte v upravách příspěvku, video se konvertuje</p>";
		ftp_close($conn_id);
		
	} else {
		echo $error_message;
		@unlink( $file );
		ftp_close($conn_id);
		exit;
	}


v htacces mám
php_value upload_max_filesize 2000M

což se mi zobrazí i při phpinfo()

Nevíte čím to může být?
Davex
Profil
SwimX:
žádná chyba, vubec nic.
Ani v $_FILES['file']['error']?
SwimX
Profil
Davex:
no ono se to tak daleko ani nedostane, nechal jsem si vypasat
print_r($_FILES)
a prostě vyberete soubor k uploadu -> stisknete nahrát video -> v liště prohlížeče běží MB a procenta, podle prohlížeče 100% a pak se prostě zobrazí znovu možnost vybrat soubor k uploadu. Ani ten print_r se neprovede, jakoby po nauploadování server zjistit, že to překročilo limit (ale já neznám jiný než upload_max_filesize) a prostě to zahodil. Nestane se prostě nic.
Aesir
Profil
SwimX:
Jakou hodnotu má post_max_size ?
SwimX
Profil
Aesir:
100M :-) tak eště další omezení.. Zkusím přenastavit.

Jinak PhpInfo
Aesir
Profil
SwimX:
Tak to bude zřejmě tím, je doporučované aby post_max_size bylo o něco málo větší hodnotu než upload_max_filesize, protože se předpokládá, že kromě souborů můžou být v postu nějaká další data (například z běžného formuláře). Takže pokud bude upload_max_filesize na 2000M, tak post_max_size by mělo stečit bezpečně třeba 2005M
SwimX
Profil
Aesir:
a memory_limit také?
Aesir
Profil
SwimX:
Pokud soubor nenačítáte do paměti (což samotný upload/přesun v rámci filesystému nedělá), tak není potřeba.
SwimX
Profil
Aesir:
aktuální htaccess
php_value upload_max_filesize 2000M
php_value post_max_size 2005M
php_value memory_limit 2010M


nyní se mi stalo, že to nepřešlo přes fci move_uploaded_file
Aesir
Profil
SwimX:
bez detailů těžko říct, vrací to nějakou chybu? je něco v logu? co safe_mode/open_basedir?
SwimX
Profil
Aesir:
Už se mi daří uploadovat soubory kolem 150MB, na 500MB mi to padá na funkci move_uploaded_files a v $_FILES[0][error] je 7.
Aesir
Profil
SwimX:
Což znamená "Failed to write file to disk.": Error Messages Explained, takže to bude chtít zapátrat tímto směrem.
SwimX
Profil
Aesir:
Tímto směrem == poslat dotaz na server, proč mě nenechají zapsat tak velké soubory..?
SwimX
Profil
server: na serveru je /tmp ktery ma velikost pouze 1GB, nyni jsme provedli jeho procisteni, takze
by nemel byt problem uploadovat soubor o velikosti cca 900MB.

Aesir:
Děkuij za pomoc
Toto téma je uzamčeno. Odpověď nelze zaslat.