ColdFusion GetTempDirectory() Stops Working

Posted December 20, 2007 at 10:56 AM by Ben Nadel

Tags: ColdFusion

I just went and removed the usage of GetTempDirectory() in one of my applications because every now and then, ColdFusion's GetTempDirectory() starts returning an empty string. It's almost as if there is some error being thrown by the machine and, instead of letting that error bubble up to the web application, ColdFusion catches it and just returns an empty string.

Restarting the server fixes the issue, but certainly, that is not a viable option on our production machine that host as many sites as ours (I think some of our clients just look for reasons to call up and yell ;)).

Has anyone else ever come across this? Is there anything that can be done to prevent this other than just removing the use of ColdFusion's GetTempDirectory()? Does anyone feel that using GetTempDirectory() should be considered less than a best practice?



Reader Comments

Dec 20, 2007 at 11:34 AM // reply »
5 Comments

Funny... I thought I was crazy one day when I hit a similar problem. I didn't get an empty string, but it returned null and thus I was getting null pointer exceptions. Then I checked the docs and it turns out this is known behavior. I did indeed stop using the function.

Good luck Ben.


Dec 20, 2007 at 11:46 AM // reply »
11,246 Comments

@Marc,

I posted this problem back in May to the House of Fusion mailing list and didn't get any replies, so I just assumed that I was the only one :) Then, it just happened again this morning. I couldn't find anything in Google; I can't believe I didn't see the note in the live docs. Is it actually part of the docs? Or is it just in the comments?


Dec 20, 2007 at 11:56 AM // reply »
44 Comments

I don't understand why someone would use the gettempdirectory() over just creating an application variable and assigning it a directory path. What benefits do you get by using it?


Dec 20, 2007 at 11:59 AM // reply »
2 Comments

What version of ColdFusion and what platform are you guys running on? I don't believe I've ever seen this error occur, but maybe it would explain some "random" NPEs I've seen.

Also, I looked in the livedocs for 6.1 and 7 and didn't see any mention of this. Where is this issue documented?


Dec 20, 2007 at 12:03 PM // reply »
5 Comments

Weird, Ben. I'm certain I read this in the docs... I didn't make it up myself! But I can't find it anywhere. Down the memory hole I suppose...


Dec 20, 2007 at 12:05 PM // reply »
11,246 Comments

@Tony,

I think the only think you gain is not having to assign a variable in the Application :) I use it mostly for File Uploads when I need to upload a file, then rename it, then move it. The temp directory just seems like the kind of place that stuff should be done.

@Leon,

We are using ColdFusion 7.0.2 I think. Definitely some brand of MX7, which updater I am not exactly sure. However, it has happened on both the production and the Dev machines, but at different times. Both machines are running Windows Sever 2003 (I think, but I am not really involved in the server setup).


Dec 20, 2007 at 1:26 PM // reply »
211 Comments

@Ben, because our clients are on a shared box, we've always manually setup a temp directory for them as one global location is a "bad idea."


Dec 20, 2007 at 1:54 PM // reply »
25 Comments

Ben,
We get the temp directory by calling this api on app server

ServletContext.getAttribute("javax.servlet.context.tempdir")

And we get this only the first time after which it is cached. So the only case you can get empty space is when the app server returns this value as empty String which looks little unlikely. Bid you change the temporary directory value in jrun.xml by any chance?
Is there any way I can replicate this?


Dec 20, 2007 at 2:22 PM // reply »
11,246 Comments

@Todd,

Good point - shared hosting or not.

@Rupesh,

I don't know how to reproduce it. It seems to only happen occasionally. From what you are saying, though, it seems like if it hiccups occasionally on startup, then it is in trouble till the next reboot.

I don't know anything about the jrun.xml file, but I do not believe we have messed with it.


JP
Dec 20, 2007 at 11:34 PM // reply »
2 Comments

I'm having the same problem... debugging FCKEditor 2.5, which uses GetTempDirectory () to upload files. My local server is returning an empty string (right now!), and FCKEditor doesn't check for it. I like the suggestion of setting a temp directory that your application uses. I'm going to modify FCKEditor so that I can set a temp directory in the configuration that defaults to GetTempDirectory ().


Dec 21, 2007 at 2:57 AM // reply »
6 Comments

I am also a fan of creating site-wide request variables for things like that!

Ben - I know you like recursion so if you really want to use the temp directory function, why not create your own UDF which basically keeps recursively calling the GetTempDirectory() method until it is not = '' or not = null

Not the most kosher approach, but it allows you to use the GetTempDirectory() directory.

:P


Dec 21, 2007 at 4:25 AM // reply »
18 Comments

Paolo, if GetTempDirectory() stops working until the server is restarted, calling the function recursively I would expect to crash the server, or at least timeout


Dec 21, 2007 at 4:33 AM // reply »
6 Comments

Does the empty string get returned everytime once it starts or just randomly on occasion?


Dec 21, 2007 at 7:18 AM // reply »
11,246 Comments

@Paolo,

Duncan is right - it's not randomly returning the empty string. It randomly starts returning the empty string, but once it does this, it keeps returning it until the server is restarted.


Dec 21, 2007 at 7:55 AM // reply »
25 Comments

In case you get into such state again where GetTempDirectry() is returning an empty String, can you let me know what is the output for this?

<cfoutput>#GetpageContext().getServletContext().getAttribute("javax.servlet.context.tempdir")#</cfoutput>

Probably that could give us some clue.


Dec 21, 2007 at 7:59 AM // reply »
11,246 Comments

@Rupesh,

I'm rockin' that scenario right now even for my site (I am on the same production server):

http://www.bennadel.com/test.cfm

I have also output the GetTempDirectory() which is empty.


JP
Dec 21, 2007 at 11:26 AM // reply »
2 Comments

<cfoutput>#GetpageContext().getServletContext().getAttribute("javax.servlet.context.tempdir")#</cfoutput>

The output is empty.


Apr 18, 2008 at 3:57 AM // reply »
18 Comments

Ben, interesting spam comments happening here - 'sohbet' repeating something you posted earlier, then JSC replying... both with links to spam domains.


Apr 18, 2008 at 7:14 AM // reply »
11,246 Comments

Yeah, this "sohbet" is a pain in the butt. I see he has been spamming other blogs (I get the blog comment subscriptions to). I think it is human though - it doesn't post with any kind of speed. Just got to the office now need to go clean out the spam.


Sep 23, 2011 at 9:18 AM // reply »
3 Comments

I am on a shared host and get this issue quite often. Support has been less than supportive and I don't blame them, i am not sure if there is an answer for this. Sometimes this issue crops up once ever few weeks, lately it has been every few days. Even after the server has been rebooted and the site comes back, I get NULL when try to see what the temp path is. Has anyone come up with any answers?


Jan 30, 2012 at 4:36 PM // reply »
1 Comments

I had recently ran into this same issue.

I had followed one of your example on how to re-size images. http://www.bennadel.com/blog/1638-Ask-Ben-CFImage-And-Dynamic-Image-Compression-With-File-Size-Limits.htm

And ran into this getTempDirectory() returns empty string issue.

I wonder after all these years, if there is a stable solution to this issue?
if not, how can I removed the usage of GetTempDirectory() in resizing image?



Post A Comment

Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.

Please review the following issues:

Author Name:


Author Email:

Author Website:

Comment:

Supported HTML tags for formatting: <strong>bold</strong>   <em>italic</em>   <code>code</code>







  • Help Wanted - Find Your Next ColdFusion Job
Ben Nadel's Company - Epicenter Consulting Recent Blog Comments
May 24, 2013 at 11:21 AM
Strange Interaction Between DeserializeJson(), ArrayContains(), And Database Values In ColdFusion
@WebManWalking, Ha ha, let's us never speak of justifying "##" notation again :P ... read »
May 24, 2013 at 11:18 AM
Strange Interaction Between DeserializeJson(), ArrayContains(), And Database Values In ColdFusion
@Ben, Ah, so it was indeed how I vaguely remembered it to be: A direct assignment value = users.id[ i ] causes value to retain the sticky datatype of the query column. Although unnecessary in ... read »
May 24, 2013 at 9:11 AM
Preventing Links In Standalone iPhone Applications From Opening In Mobile Safari
@Brandon, Hi, No, I haven't been able to do that. I have just kept it as it is. ... read »
May 23, 2013 at 9:52 PM
Preventing Links In Standalone iPhone Applications From Opening In Mobile Safari
@Muhmmadibn Did you figure out a solution to launching PDFs? I am running into the same issues myself. There is no way to close the PDF or go back once you launch it. Thanks in advance! ... read »
May 23, 2013 at 6:06 PM
The Girl Who Broke My Heart, And Made Me A Better Person
Good day,ladies and gentle men, my name is Dr AMADI the great spell caster in Africa, i have help so many people for different kind of problems,who say there is no solution to problems on earth, that ... read »
May 23, 2013 at 4:26 PM
ColdFusion QueryAppend( qOne, qTwo )
@Heather, Glad people are still getting value out of this! ... read »
May 23, 2013 at 3:49 PM
Strange Interaction Between DeserializeJson(), ArrayContains(), And Database Values In ColdFusion
@WebManWalking, I meant the code at the bottom (not the video). I did try to experiment with an intermediary variable, like: value = users.id[ i ]; arrayContains( userIDs, value ); ... but t ... read »
May 23, 2013 at 11:06 AM
Strange Interaction Between DeserializeJson(), ArrayContains(), And Database Values In ColdFusion
@Ben, Are you talking about As Number: YES As String: YES As Java: YES? If so, that's with 3 different ways of referencing the constant 1, not users.id[1]. Query object references(*) are what seem ... read »
InVision App - Prototyping Made Beautiful With Prototyping Tools