Jump to content

[SOLVED] Uploading photos to web server.


Paul_Bunyan

Recommended Posts

Hello.  I am having problems uploading photos to my web server.  I have set the permissions on the file "images" to 777 via dreamweaver but when I submit the upload I still get the error message:

 

Warning: copy(images/1215797607.jpg) [function.copy]: failed to open stream: Permission denied

 

I am using code found on this page (http://www.reconn.us/content/view/30/51/):

I thought it was a permissions error at first but now I am wondering if there is something I may have overlooked in the code.  Thanks in advance.

<?php

//define a maxim size for the uploaded images in Kb 
define ("MAX_SIZE","100"); 
//This function reads the extension of the file. It is used to determine if the file  is an image by checking the extension.
function getExtension($str) 
{   
	$i = strrpos($str,".");         
if (!$i) { return ""; }         
$l = strlen($str) - $i;         
$ext = substr($str,$i+1,$l);         
return $ext; 
}

//This variable is used as a flag. The value is initialized with 0 (meaning no error  found)  
//and it will be changed to 1 if an errro occures.  
//If the error occures the file will not be uploaded. 

$errors=0;

//checks if the form has been submitted 

if(isset($_POST['Submit']))  
{ 	
//reads the name of the file the user submitted for uploading 	
$image=$_FILES['image']['name']; 	

//if it is not empty 	

if ($image)
{ 	
	//get the original name of the file from the clients machine 		
	$filename = stripslashes($_FILES['image']['name']); 	

	//get the extension of the file in a lower case format  		
	$extension = getExtension($filename); 		
	$extension = strtolower($extension); 	

	//if it is not a known extension, we will suppose it is an error and will not  upload the file,  	
	//otherwise we will do more tests 
	if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))  		
	{		
		//print error message 			
		echo '<h1>Unknown extension!</h1>'; 			
		$errors=1; 		
	} 		
	else 		
	{
		//get the size of the image in bytes 
		//$_FILES['image']['tmp_name'] is the temporary filename of the file 
		//in which the uploaded file was stored on the server 
		$size=filesize($_FILES['image']['tmp_name']);

		//compare the size with the maxim size we defined and print error if bigger
		if ($size > MAX_SIZE*1024)
		{	
			echo '<h1>You have exceeded the size limit!</h1>';	
			$errors=1;
		}

		//we will give an unique name, for example the time in unix time format
		$image_name=time().'.'.$extension;

		//the new name will be containing the full path where will be stored (images folder)
		$newname="images/".$image_name;

		//we verify if the image has been uploaded, and print error instead
		$copied = copy($_FILES['image']['tmp_name'], $newname);

		if (!$copied) 
		{	
			echo '<h1>Copy unsuccessfull!</h1>';	
			$errors=1;
		}
	}
}
}

		//If no errors registred, print the success message 
if(isset($_POST['Submit']) && !$errors)  
{ 	
			echo "<h1>File Uploaded Successfully! Try again!</h1>"; 
} ?> 

<!--next comes the form, you must set the enctype to "multipart/frm-data" and use an input type "file" --> <form name="newad" method="post" enctype="multipart/form-data"  action=""> <table> 	<tr><td><input type="file" name="image"></td></tr> 	<tr><td><input name="Submit" type="submit" value="Upload image"></td></tr> </table>	 </form>   

Link to comment
Share on other sites

there is a temp directory php uses. it is set in the php.ini file. You have to make sure the web user has access to this temp directory. Also try using move_uploaded_file() instead of copy.

 

Also a lot of hosting companies don't allow chmod 777. even though it is set to 777 things don't work. try setting to 775 instead. Should still give you enough access.

 

Ray

Link to comment
Share on other sites

do you host it yourself?? is this a test box which is local??

 

you can do this

create a file called phpinfo.php, inside it put this

<?php
phpinfo();
?>

 

A few lines down will be the location of the php.ini file

 

If this a local box on windows then it is in the windows folder.

 

Ray

Link to comment
Share on other sites

Ok, so I found my temp directory for files and it's permissions are already set to 775.

 

I'm still getting this error:

 

Warning: move_uploaded_file(images/1215800976.jpg) [function.move-uploaded-file]: failed to open stream:

 

&

 

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/fsfiles/ref/infocenter/fsweb/files/phpKk35Ea' to 'images/1215800976.jpg'

Link to comment
Share on other sites

i should have spotted this earlier, but when ever I use copy or move_uploaded_files or any function which move, erases, or copy's a file, I use the absolute path. Since you are moving a file from a temp folder which is not in your http root, the script may not be moving it to the right location. If you look at the error, I don't think the images folder is in the files folder which is the temp folder.

 

i would try using the absolute path for your destination.

 

Ray

Link to comment
Share on other sites

I just wanted to say thanks for all the help.  It turns out that even though Dreamweaver was telling me that I had changed the permissions on my folder, on my web server it was not changing.  I had to SSH in and chmod it.  That, and I had to use the absolute path for my destination.

 

Thank you!  :)

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.