NYCPHP Meetup

NYPHP.org

[nycphp-talk] opening files

Ben Sgro (ProjectSkyLine) ben at projectskyline.com
Fri Oct 26 09:48:42 EDT 2007


Hello,

Here's some code I'm using to store user's avatars. I have the paths' mapped 
to
defines. It removes the original image and converts to png (which is 
hardwired)
and then saves JUST the filename to the database (since I know the path, 
DEFINE).

I use the PEAR FileUpload( ) Class to take care of moving the files.
and the ImageTransform( ) (which is some kinda derivation of the PEAR 
Image_Transform() class)
to resize the image.

Thatttsss it!

        if ( $stateObject->Get('do_avatar') == TRUE )
        {
            $uploadObject = new FileUpload(0666);
            $fileName = $uploadObject->MoveFile(USER_IMAGES_PATH, 
'uploadImage');

            if ( $fileName == PROC_FAILURE )
            {   /* There has been an unrecoverable error. */
                error_log(USER_IMAGES_PATH . ' directory does not exist');
            }

            $imageObject = new ImageTransform( );
            $imageObject->sourceFile = USER_IMAGES_PATH . $fileName;

            $newFileName  = substr($fileName, 0, strrpos($fileName,"."));
            $newFileName .= '.png';

            $imageObject->targetFile = USER_IMAGES_PATH . $newFileName;

            $imageObject->resizeToHeight = 90;
            $imageObject->resizeToWidth  = 110;

            if ( !$imageObject->resize( ) )
            {
                error_log($imageObject->error);
            }

            /* Remove the uploaded image. */
            unlink(USER_IMAGES_PATH . $fileName);

            /* Update the users thumbnail in the database. */
            $dbObject->DatabaseQuery('UPDATE ' . DATABASE_TABLE_USERS
                . ' SET thumbnail = ' . $dbObject->Safe($newFileName)
                . ' WHERE username = '
                . $dbObject->Safe($sessionObject->Get(SESSION_USER))
                . ' AND email = '
                . $dbObject->Safe($sessionObject->Get(SESSION_EMAIL))
                . ' AND id = '
                . $dbObject->Safe($sessionObject->Get(SESSION_DBID)),
                RETURN_NONE, LOG_LEVEL_DEBUG);

            $avatarImage = $newFileName;
        }
        .....keeps going.....


- Ben

Ben Sgro, President
ProjectSkyLine - Defining New Horizons
+1 718.487.9368 (N.Y. Office)

Our company: www.projectskyline.com
Our products: www.project-contact.com

This e-mail is confidential information intended only for the use of the 
individual to whom it is addressed.
----- Original Message ----- 
From: "Anthony Wlodarski" <aw at sap8.com>
To: "'NYPHP Talk'" <talk at lists.nyphp.org>
Sent: Friday, October 26, 2007 9:31 AM
Subject: RE: [nycphp-talk] opening files


>I believe the simple way would to be to store a path in a database.  Here 
>is
> an example of an upload procedure to add files to the directory (must be
> world writeable though and does not provide for mime types, just extension
> checks since mime_content_type() and PEAR extensions might not be an 
> option
> on shared hosting).
>
> <?php
> /*
> * Created on Oct 14, 2007
> *
> * This application uploads a photo to be used for the profile.  The image
> * will be no larger than 250 x 250 pixels.  If the image is not of type
> gif/jpeg/png
> * the user will be asked to upload a new photo that meets the 
> requirements,
> additionally
> * the max file size for a picture upload is two megabytes.
> */
> // pre: cookie is set for user id, source image is uploaded and mime type 
> is
> checked
> // post: db is updated with link to profile photo
> function buildImage($userId, $srcImage, $extension)
> {
> $uploadDir = './images/profilePhotos/';
> // try to make sure no one has a collision of profile files
> $uploadFile = $uploadDir . md5($_SESSION['id']);
>
> // get our image dimensions so we can calculate a resize/aspect
> ratio
> list($width,$height) = getimagesize($srcImage);
>
> // check what axis we are going to calculate our resize ratio from
> if($width > $height)
> {
> $ratio = 250/$width;
> $newWidth = 250;
> $newHeight = $height * $ratio;
> }
> else
> {
> $ratio = 250/$height;
> $newWidth = $width * $ratio;
> $newHeight = 250;
> }
>
> // create an image resource from the temp uploaded file
> if($extension == 'jpeg')
> {
> $image = imagecreatefromjpeg($srcImage);
> }
> elseif($extension == 'gif')
> {
> $image = imagecreatefromgif($srcImage);
> }
> elseif($extension == 'png')
> {
> $image = imagecreatefrompng($srcImage);
> }
> else
> {
> //output an error for extensions checks and die()
> }
>
>
> // create an image resource with the new dimensions
> $resizedImage = imagecreatetruecolor($newWidth, $newHeight);
> // copy the image with resampling
> imagecopyresampled($resizedImage, $image, 0, 0, 0, 0, $newWidth,
> $newHeight, $width, $height);
> // save the resized image resource to a file
>
> // create an image resource from the temp uploaded file
> if($extension == 'jpeg')
> {
> imagejpeg($resizedImage, $uploadFile.".".$extension, 100);
> }
> elseif($extension == 'gif')
> {
> imagegif($resizedImage, $uploadFile.".".$extension);
> }
> else
> {
> imagepng($resizedImage, $uploadFile.".".$extension);
> }
>
> // update the database with the new image link
> // query data from the database for use in building the page
> $dbh = mysql_connect("localhostorIPofhost", "putyourusernamehere",
> "putyourpasswordhere");
> // select the database
>  mysql_select_db("anthonyw_mystory");
> $query = sprintf("UPDATE `anthonyw_mystory`.`users` SET
> `profilePhoto` = '%s' WHERE `users`.`id` ='%s' LIMIT
> 1",$uploadFile.".".$extension,$userId);
>  // make change in database
>  $results = mysql_query($query);
>  // close the database connection
>  mysql_close($dbh);
> // return them back to the lobby;
> include './lobby.php';
> }
>
> // the only way we can get to this script is when someone submits
> // a form submission to this script
>
> // copy their userID
> session_start();
> $userId = $_SESSION['id'];
>
> // since mime_content_type or fileinfo are not available we must
> rely on the browser
> // and see if it has uploaded the mime type of the file
> $mimeString = $_FILES['userfile']['type'];
>
> // now test the mime string for varying different types
> if(strpos($mimeString,"jpeg") || strpos($mimeString,"jpg"))
> {
> $mimeType = 'jpeg';
> }
> elseif(strpos($mimeString,"gif"))
> {
> $mimeType = 'gif';
> }
> elseif(strpos($mimeString,"png"))
> {
> $mimeType = 'png';
> }
> else
> {
> $mimeType = 'invalid';
> }
>
> buildImage($userId, $_FILES['userfile']['tmp_name'], $mimeType);
> ?>
>
> And this is how I pull the file out for an image wrapped in an 'img' tag:
>
> "<img src=\"".$row['profilePhoto']."\">"
>
> But this assumes that $row is a successful mysql_query.  There are
> additional functions if you know that the extension they can display 
> images
> or image resources: imagejpeg(), imagegif(), imagepng().  I did not 
> include
> the actual HTML form as I am assuming you can google that or look it up on
> PHP.net
>
> Anthony Wlodarski
> aw at sap8.com
>
>
>
>
> _______________________________________________
> New York PHP Community Talk Mailing List
> http://lists.nyphp.org/mailman/listinfo/talk
>
> NYPHPCon 2006 Presentations Online
> http://www.nyphpcon.com
>
> Show Your Participation in New York PHP
> http://www.nyphp.org/show_participation.php 




More information about the talk mailing list