Problem: Upload file

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
MTdesigns
Δημοσιεύσεις: 5
Εγγραφή: 24 Μαρ 2006 13:41

Problem: Upload file

Δημοσίευση από MTdesigns » 07 Μάιος 2008 14:43

Γειά σας, έχω ένα πρόβλημα με τη συνάρτηση move_uploaded_file(). Έψαξα λίγο κάποιες λύσεις, όμως τίποτα έτυχε να το λύσει. Παραθέτω λοιπόν εδώ το πρόβλημα, μήπως μπορεί κάποιος να βοηθήσει.

Λοιπόν, έχω το αρχείο insert_photo_query.php το οποίο έχει τον εξής κώδικα:

Κώδικας: Επιλογή όλων

<?php
	ini_set&#40;"memory_limit","20M"&#41;;
	ini_set&#40;"max_execution_time","36000"&#41;;
	$req_site_id="3";
	if&#40;&#40;isset&#40;$_POST&#91;'desc'&#93;&#41;&#41; || &#40;isset&#40;$_POST&#91;'photocat'&#93;&#41;&#41;&#41;&#123;
				$sql="select * from cms_sites where site_id=$req_site_id";
				//echo $sql;
				$query=mysql_query&#40;$sql&#41;;
				while&#40;$result=mysql_fetch_array&#40;$query&#41;&#41;&#123;
					$file_url=$result&#91;'images_url'&#93;;
					$file_path=$result&#91;'images_path'&#93;;
				&#125;
			$uploadDir = $file_path;
			$http_path = $file_url;
			if&#40;$_FILES&#91;'userfile'&#93;&#91;'name'&#93;==""&#41;&#123;
				$status="EMPTY";
			&#125;else&#123;
				$sourcefile=$_FILES&#91;'userfile'&#93;&#91;'name'&#93;;
				$ext = strtolower&#40;end&#40;explode&#40;'.', $sourcefile&#41;&#41;&#41;;
			    if &#40;$ext == 'jpg' || $ext == 'jpeg'&#41;&#123;

							$date=date&#40;'dmY'&#41;;
							$time=date&#40;'His'&#41;;
							$uploadFile = $uploadDir   .$date . $time . $_FILES&#91;'userfile'&#93;&#91;'name'&#93; ;
							if &#40;move_uploaded_file&#40;$_FILES&#91;'userfile'&#93;&#91;'tmp_name'&#93;,  $uploadDir  .$date . $time . $_FILES&#91;'userfile'&#93;&#91;'name'&#93; &#41;&#41;&#123;
								
								$uploadDir = addslashes&#40;$uploadDir&#41;;
								$imagesize=$_FILES&#91;'userfile'&#93;&#91;'size'&#93;;
		   		     			$name=$date . $time . $_FILES&#91;'userfile'&#93;&#91;'name'&#93; ;
								chmod&#40;"$uploadDir$name", 0644&#41;;
								$photodesc=addslashes&#40;$_POST&#91;'desc'&#93;&#41;;
								$sDesc=addslashes&#40;$_POST&#91;'sDesc'&#93;&#41;;
								//if&#40;&#40;!isset&#40;$_POST&#91;'width'&#93;&#41;&#41; || &#40;!isset&#40;$_POST&#91;'height'&#93;&#41;&#41; &#41;&#123;
									$temp_name=$_FILES&#91;'userfile'&#93;&#91;'tmp_name'&#93;;
									$imagesizes = @getimagesize&#40;$http_path . $name&#41;; 
									$iwidth = $imagesizes&#91;0&#93;; 
									$iheight = $imagesizes&#91;1&#93;; 
								 	$src_img = imagecreatefromjpeg&#40;"$file_path$name"&#41;;
    	 							$origw=imagesx&#40;$src_img&#41;; 
   	 	  			 				$origh=imagesy&#40;$src_img&#41;; 	
									$new_w = 140; 
										 if&#40;$origw>=140&#41;&#123;
					 					    $new_h=&#40;$new_w*$origh&#41;/$origw;  		    
    	  			 						$dst_img = imagecreatetruecolor&#40;$new_w,$new_h&#41;; 
    	   									imagecopyresized&#40;$dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx&#40;$src_img&#41;,imagesy&#40;$src_img&#41;&#41;; 
		   	 								imagejpeg&#40;$dst_img, "$file_path" ."140_" . "$name",100&#41;; 
		   	 								chmod&#40;"$file_path" . "140_" . "$name", 0644&#41;;	 
											$src_img = imagecreatefromjpeg&#40;"$file_path$name"&#41;;
    	 								    //$origw=imagesx&#40;$src_img&#41;; 
   	 	  			 					    //$origh=imagesy&#40;$src_img&#41;; 
										&#125;
										$new_w = 100;
										 if&#40;$origw>=100&#41;&#123;
					 					    $new_h=&#40;$new_w*$origh&#41;/$origw;  		    
    	  			 						$dst_img = imagecreatetruecolor&#40;$new_w,$new_h&#41;; 
    	   									imagecopyresized&#40;$dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx&#40;$src_img&#41;,imagesy&#40;$src_img&#41;&#41;; 
		   	 								imagejpeg&#40;$dst_img, "$file_path" ."100_" . "$name",100&#41;; 
		   	 								chmod&#40;"$file_path" . "100_" . "$name", 0644&#41;;	 
											$src_img = imagecreatefromjpeg&#40;"$file_path$name"&#41;;
    	 								   // $origw=imagesx&#40;$src_img&#41;; 
   	 	  			 					   // $origh=imagesy&#40;$src_img&#41;; 
										&#125;
										$new_w = 40;										
										 if&#40;$origw>=40&#41;&#123;
					 					    $new_h=&#40;$new_w*$origh&#41;/$origw;  		    
    	  			 						$dst_img = imagecreatetruecolor&#40;$new_w,$new_h&#41;; 
    	   									imagecopyresized&#40;$dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx&#40;$src_img&#41;,imagesy&#40;$src_img&#41;&#41;; 
		   	 								imagejpeg&#40;$dst_img, "$file_path" ."40_" . "$name",100&#41;; 
		   	 								chmod&#40;"$file_path" . "40_" . "$name", 0644&#41;;	 
											$src_img = imagecreatefromjpeg&#40;"$file_path$name"&#41;;
    	 								    $origw=imagesx&#40;$src_img&#41;; 
   	 	  			 					    $origh=imagesy&#40;$src_img&#41;; 
											if&#40;$new_h>40&#41;&#123;
												$img = imagecreatetruecolor&#40;40,40&#41;;
												$org_img = imagecreatefromjpeg&#40;"$file_path" . "40_" . "$name"&#41;;
												$ims = getimagesize&#40;"$file_path" . "40_" . "$name"&#41;;
												imagecopyresized&#40;$img,$org_img, 0, 0, 0, 0, $ims&#91;0&#93;, $ims&#91;1&#93;,$ims&#91;0&#93;, $ims&#91;1&#93;&#41;;
												 // imagecopyresized&#40;$img_dst, $img_src, 0, 0, $x, $y, $w, $h, $w, $h&#41;;
												imagejpeg&#40;$img,"$file_path" ."40_" . "$name",100&#41;;
												imagedestroy&#40;$img&#41;;
											&#125;
										&#125;											
										
										 

								$photocat=$_POST&#91;'photocat'&#93;;
								$sql2="insert into photos&#40;server_path,http_path,file_name,photo_desc,size,width,height,photo_cat_id,date_ins,site_id,photo_site_desc&#41; values&#40;'$uploadDir','$http_path','$name','$photodesc','$imagesize','$iwidth','$iheight',$photocat,'$date',$req_site_id,'$sDesc'&#41;";
					 			if&#40;@mysql_query&#40;$sql2&#41;&#41;&#123;
									$status="TRUE";
								&#125;else&#123;
									print&#40;$sql2&#41;;
									$status="FALSE";
								&#125;
					 		&#125;else&#123;
    							print "Possible file upload attack!  Here's some debugging info&#58;\n";
    							print_r&#40;$_FILES&#41;;
						&#125;
				&#125;else&#123;
					$status="NONTYPE";
				&#125;
			&#125;
	&#125;
?>
Όταν προσπαθώ από την φόρμα να ανεβάσω ένα αρχείο εικόνας, παίρνω το error:
Warning: move_uploaded_file(publish07052008133701header_short.jpg): failed to open stream: Permission denied in /var/www/vhosts/[domain].gr/httpdocs/cms/queries/insert_photo_query.php on line 25

Warning: move_uploaded_file(): Unable to move '/tmp/php19L2dH' to 'publish07052008133701header_short.jpg' in /var/www/vhosts/[domain].gr/httpdocs/cms/queries/insert_photo_query.php on line 25
Possible file upload attack! Here's some debugging info: Array ( [userfile] => Array ( [name] => header_short.jpg [type] => image/jpeg [tmp_name] => /tmp/php19L2dH [error] => 0 [size] => 32728 ) )
Παρ' όλα αυτά, έχω το PHP Safe Mode στο OFF, ο φάκελος db_images στον οποίο είναι να γίνει το upload είναι 777 σε δικαιώματα και η mySQL στον πίνακα 'cms_sites' έχει τα εξής περιεχόμενα (μήπως βοηθήσουν κάποιον στο να βγάλει κάποιο συμπέρασμα):

site_url : http://www.[domain].gr
images_url : http://www.[domain].gr/db_images/
images_path : /var/www/vhosts/[domain].gr/httpdocs/db_images/

Βοήηηθειααα! :D

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6228
Εγγραφή: 30 Νοέμ 2004 03:09

Problem: Upload file

Δημοσίευση από fafos » 07 Μάιος 2008 15:28

Autes tis times apo pou tis pairnei?:

$uploadDir = $file_path;
$http_path = $file_url;

MTdesigns
Δημοσιεύσεις: 5
Εγγραφή: 24 Μαρ 2006 13:41

Problem: Upload file

Δημοσίευση από MTdesigns » 07 Μάιος 2008 15:31

fafos έγραψε:Autes tis times apo pou tis pairnei?:

$uploadDir = $file_path;
$http_path = $file_url;

Είναι το αποτέλεσμα του query από τη βάση. (Γραμμές 6-14, στον παραπάνω κώδικα)


EDIT για να μην διπλοποστάρω: PROBLEM SOLVED, είχα κολλήσει και fafos με βοήθησες να δω στο σωστό σημείο. Ευχαριστώ! :)

Τελικά, το όλο θέμα ήταν γύρω από την γραμμή $req_site_id="3";, όπου μέσα στη βάση έχει id 3.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Problem: Upload file

Δημοσίευση από cpulse » 16 Μάιος 2008 00:49

Προφανώς θα ήταν πρόβλημα με permissions;

Αλλά εγω θα σου πω κι ένα ακόμα πρόβλημα που μάλλον ακόμα δεν το έχεις συναντήσει..

Τις εντολές

Κώδικας: Επιλογή όλων

ini_set&#40;"memory_limit","20M"&#41;;
ini_set&#40;"max_execution_time","36000"&#41;;
τσάμπα τις γράφεις εκεί. Δεν θα ενεργοποιηθούνε ποτέ γιατί πρώτα γίνεται το upload και μετά πάει ο έλεγχος στην PHP.

Αν θες να τα κάνεις να λειτουργήσουν θα πρέπει να τα βάλεις σε .htaccess :

Κώδικας: Επιλογή όλων

php_value max_execution_time 36000
php_value memory_limit 20M
php_value post_max_size 20M
php_value upload_max_filesize 20M
Options -Indexes

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες