Strona 1 z 1

[php] upload wielu plikow

: 02 sie 2010, 09:36
autor: sajmon
Witam!
Apache/2.2.11 (Ubuntu)
PHP Version 5.2.6-3ubuntu4.5

Mam u siebie taki prywatny hosting zdjec.
formularz wyglada tak:

Kod: Zaznacz cały

echo("<form enctype=\"multipart/form-data\" action=\"index.php?id=upload\" method=\"POST\"> 
					<script type=\"text/javascript\">
						function nowagal(thisForm){\nif(thisForm.gdzie.value==0){
						thisForm.nalbum.disabled=false;\n	
						thisForm.has.disabled=false;\n
						}
						else{\n
						thisForm.nalbum.disabled=true;
						thisForm.has.disabled=true;
						}\n}
						function passwd(thisForm){
						if(thisForm.has.checked==true){
						thisForm.haslo.disabled=false;
						}
						else{
						thisForm.haslo.disabled=true;
						}\n}
					</script>
					<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".(9*1024*1024)."\" /> 
					<select onchange=\"nowagal(this.form)\" name=\"gdzie\"><option value=\"0\">Nowy album</option>");
					$q="SELECT name FROM galleries;";
					$res=mysql_query($q);
					for($i=0;$i<mysql_num_rows($res);$i+=1){
						$row=mysql_fetch_assoc($res);
						echo("<option value=\"".($i+1)."\">".$row['name']."</option>");
					}
					echo("</select>
					nazwa: <input type=\"text\" name=\"nalbum\" value=\"\">
					zabezpiecz hasłem?<input type=\"checkbox\" name=\"has\" onchange=\"passwd(this.form)\">
					wpisz hasło: <input type=\"password\" name=\"haslo\" disabled=\"disabled\">
");
					for($j=1;$j<=10;$j+=1){
						echo($j."<input name=\"plik".$j."\" type=\"file\" /> 
");
					}
					echo("<input type=\"submit\" name=\"submit\" value=\"Zapisz\" /> 
					</form>");
Jak widac, mam 10 pol do wyboru pliku.

A tutaj fragment kodu wykonywany po wyslaniu formularza:

Kod: Zaznacz cały

if(isset($_POST['submit'])){
						if($_POST['gdzie']==0){
							if(isset($_POST['nalbum'])) $nnam=$_POST['nalbum'];
							else $nnam="gal-".date("Y-m-d-H-i-s");
							if(isset($_POST['has'])) $q="INSERT INTO galleries SET name=\"".$nnam."\", created=\"".date("Y-m-d")."\", modified=\"".date("Y-m-d")."\", public=0, login=\"".$_COOKIE['zal']."\", nop=0, hash=\"".md5($_POST['haslo'])."\";";
							else $q="INSERT INTO galleries SET name=\"".$nnam."\", created=\"".date("Y-m-d")."\", modified=\"".date("Y-m-d")."\", public=1, login=\"".$_COOKIE['zal']."\", nop=0, hash=\"null\";";
							//echo("<p>".$q."</p>");
							mysql_query($q);
							mkdir($nnam);
							system("chmod 777 ".$nnam);
							$gal=$nnam;
						}
						else{
							$q="SELECT name FROM galleries;";
							$res=mysql_query($q);
							for($i=0;$i<mysql_num_rows($res);$i+=1){
								$row=mysql_fetch_assoc($res);
								if(($i+1)==$_POST['gdzie']) $gal=$row['name'];
							}
						}
						$dodanych=0;
						for($j=1;$j<=10;$j+=1){
							if(is_uploaded_file($_FILES['plik'.$j]['tmp_name'])){
								if($_FILES['plik'.$j]['size']<=$_POST['MAX_FILE_SIZE']){	 
							    	move_uploaded_file($_FILES['plik'.$j]['tmp_name'], $gal."/".$_FILES['plik'.$j]['name']); 
							    	$dodanych++;
							    	echo("Plik: <strong>".$_FILES['plik'.$j]['name']."</strong> został dodany do galerii ".$gal."
");
						    	}
						    	else{
									echo("Plik: <strong>".$_FILES['plik'.$j]['name']."</strong> jest zbyt duży! Jego rozmiar przekracza ".($_POST['MAX_FILE_SIZE']/1024/1024)." MB
");
								}	
							}
						}
						$q="SELECT nop FROM galleries WHERE name=\"".$gal."\";";
						$res=mysql_query($q);
						$row=mysql_fetch_assoc($res);
						$zip = new ZipArchive;
						$zip_plik=$gal."/gal_".$gal."_".date("Y-m-d").".zip";
						if ($zip->open($zip_plik, ZIPARCHIVE::CREATE) !==TRUE) {
							echo("nie mogę zrobić pliku archiwum ".$zip_plik.".");
        				}
        				$folder=opendir($gal);
        				while (false !== ($file = readdir($folder))) if(preg_match('#^.*\.(jpg|gif|png)#i',$file)){
							$zip->addFile($gal."/".$file);
						}
						$zip->close();
						closedir($folder);
						$q="UPDATE galleries SET nop=".($row['nop']+$dodanych).", zip=\"".$zip_plik."\" WHERE name=\"".$gal."\";";
						mysql_query($q);
						echo("link do galerii:

						    <h2><a href=\"http://81.15.212.181/zdj/index.php?id=show&gal=".$gal."\">http://81.15.212.181/zdj/index.php?id=show&gal=".$gal."</a></h2>");
					}
i wszystko dziala poprawnie, jezeli wysylam do 6 plikow (~10mb).
Jezeli wykorzystam wszystkie 10 pol (albo 9) to po kliknieciu na "Zapisz" wymazuja sie wszystkie dane z formularza i nie jest wykonywany ten drugi fragment kodu.

Zanim napisalem na forum probowalem to rozwiazac tak:

Kod: Zaznacz cały

ini_set('upload_max_filesize','64M');
ini_set('post_max_size','64M');
ale nie dalo efektu. zmiana tych wlasciwosci w php.ini tez nie dala efektu.
nawet sprobowalem

Kod: Zaznacz cały

ini_set('memory_limit', '64M');
ale w tym przypadku memory_limit nie powinno miec na nic wplywu. oczywiscie bez efektu.

Co moze byc przyczyna ?