I'm still working on my project to host my own photos that I'm calling
going off the grid, and I'm sharing the code I write as I go. I was hoping to be done by the end of February, but I think I'm still a few steps away from a functioning system. Last time I set up a method for authenticating myself, and the next step was figuring out how to get new photos into the filesystem and database.
Flickr has myriad ways to get photos into their system. They have a bunch of
client software that can upload photos in batches, in addition to a standard
web form and uploading
via email. I've played around with all of these, but I only used two regularly: the web form and uploading via email. So that's what I put together for my local system.
For the forms, I basically duplicated Flickr's 3-step upload process. I choose the files, upload the photos, then title and tag them. The big difference here is there aren't any privacy controls. I'm assuming that every photo I add into the system will be public, so I'm not concerned about setting privacy when I upload. (That's always something I can add later.) I reused code from
Step 8 to write thumbnails for the new photos, and just needed to write a few scripts to handle uploading and updating the database. Here's the set of files I'm using to upload photos:
- upload.php - sets the basic uploading form.
- upload-action.php - uploads the files, writes thumbnails, and then writes a form for each photo for adding title, description, and tags.
- upload-final.php - updates the database with the new titles, descriptions, and tags, and sets the photos as public.
And outside of my public web directory, I have a couple of files with some helper functions that are included:
- addPhoto.inc - adds an incoming photo to the database and returns its photoID.
- writeThumbs.inc - writes all of the standard thumbnail sizes (and resizes the original, if necessary) for a given photoID.
Each of the public files are only going to be used by me, so there's an identity check at the top of each script. If the current user isn't logged in as an admin, the script boots the user to the home page. That's not too friendly, but I'll know what's happening immediately since this is my system.
Another difference I should point out is that I have to go through all steps to publish the photos. If I upload three photos, but don't add tags and titles in Step 2, the photos won't be public. In Flickr web uploading, you can skip the form for adding titles, tags, and descriptions and the photos will still be live. I decided to make that last step mandatory, even if it's just hitting the submit button again. I think forcing myself to think about titles helps my publishing process.
Sending photos by email is crucial for me because I like publishing cell-phone pictures while I'm out and about. When I set up my first
moblog several years ago, I whipped up a filter for
XMail (my mail server) to process attachments from any incoming message to a specific address. This time around I wanted something more generic, so I settled on a script that checks a specific email address via POP every 15 minutes, and handles any new messages with attachments.
And here's the script:
check-mail.php. I keep it outside the public web directory, and run it every 15 minutes with Windows Task Scheduler. (You could use
cron on *nix systems.)
If you're going to try this out, you'll need to add your own mail server details to the top of the script. The
MAIL_TAGS constant is set in
ini.inc, and is simply a set of tags to use for any photo that comes in via email. (a la Flickr.) I use
mopho and
cameraphone for any photo that comes in this route. Same with
TEMP_DIR, this should be set to a full path to a directory for temporary files.
I think it's important to use a brand new email address that's hard to guess, and is only used for this purpose. And you shouldn't ever share the address. The address is almost like a password, so I treat mine accordingly. And if you can use an email address at a private domain (instead of gmail, hotmail, yahoo, etc.) I think that would be better. You don't want random spammers to be able to post pictures of pills or casinos to your photoblog. (In fact, I think I'll go back and add a sender whitelist to this script for my own piece of mind.) This script is set up for a POP account on standard ports, so you might need to check the
PHP IMAP documentation for different setups. I've also only tested this with my phone (a
Sony Ericsson S710a) and other phones might attach photos in a different way.
Now that photos can find their way into the system, I need a way to edit photo details. That's up next.